thotypous / mikroe-uhb

USB HID Bootloader programming tool for devices manufactured by MikroElektronika
MIT License
16 stars 8 forks source link

mikroe hid bootloader linux - compatibility with pyudev 0.18 #5

Open rc-ozzy opened 8 years ago

rc-ozzy commented 8 years ago

Olá, Paulo, tudo bem?

Meu nome é Rogério, e estou muito interessado em utilizar o seu bootloader no linux. Atualmente utilizo o pic18f4550, e o bootloader mikroe HID bootloader (no windows) neste link há uma foto:

http://oi45.tinypic.com/33esll0.jpg

Meu objetivo é apenas estudar mesmo... Me formei recentemente na Fatec Osasco. Como não consegui rodar o seu bootloader, eu uso o piklab e picdemusb (microchip bootloader), com a diretiva org para mudar o meu vetor de reset. Infelizmente, para ficar o código idêntico ao windows, tenho que gravar meus arquivos hex por icsp com pickit2 (daí não preciso de diretiva org). Isso será resolvido quando eu usar o seu mikroe-uhb normalmente.

Postei meu problema no fórum Mikroe, pensando que você veria minha dúvida lá. O link é este: https://www.mikroe.com/forum/viewtopic.php?f=12&t=56367

A última linha do terminal me retornou isso: TypeError: argument of type 'Attributes' is not iterable

Se puder, me responda... Dê uma olhadinha por gentileza. Tentei contato com o pessoal da mikroletrônika, mas eles não pensam em desenvolver um bootloader HID em linux tão cedo.

Pode me ajudar por favor?

Se preferir responder por email será muito bem vindo! rc.ozzy@yahoo.com.br

Muito Obrigado!

thotypous commented 8 years ago

Olá, desculpe por não ter respondido antes no forum da Mikroe, devo estar com alguma configuração de notificação incorreta e não vi a mensagem.

Muito obrigado pelo bug report. Parece que o problema aconteceu devido a uma versão recente que lançaram da biblioteca pyudev, que quebrou compatibilidade com a versão 0.16 que eu tinha instalada na minha máquina. Agora ele não permite mais usar a classe Attribute como se fosse um dicionário, por isso ocorre o erro que você observou. Fiz uma mudança no código que mantém compatibilidade com a versão antiga e também suporta essa nova versão.

Por favor teste com a última versão do mikroe-uhb e avise se ainda ocorrer algum erro.


The issue is due to a change in pyudev's Attribute class which breaks backwards compatibility. It can no longer be treated as a dictionary. The new implementation should be compatible both with older and newer pyudev versions.

rc-ozzy commented 8 years ago

Olá, Paulo, tudo bem? Existe alguma configuração de topic reply lá no forum, mas parece que temos acesso somente ao abrir o tópico (tenho passado por alguns problemas com isso também...) Eu é que lhe agradeço pela iniciativa... é um trabalho árduo desenvolver ferramentas para linux, pois não há compatibilidade tão natural de bibliotecas 'comerciais' (como hid), e todas as ferramentas disponíveis na internet sobre bootloader para MCU pic, são baseadas no Microchip Framework, por isso é tão importante o seu projeto. A própria Mikroeletronika não possui hoje um bootloader para PIC em linux. Quando conseguirmos usá-lo com o 18f4550, ficarei muito feliz em não ter que modificar meus vetores de reset e interrupção para atender o boot da picdem (microchip), ou modificar o arquivo hex (para o tinybootloader -020000040000FA). Me desculpe pela dificuldade (sou mais da área eletrônica que da informática), desculpe também por seguir tudo bem devagar, passo a passo...

Segui as dicas do site: http://pyudev.readthedocs.org/en/latest/ e entrei com o comando no terminal: ozzy@ozzy-laptop:~$ udevadm --version 151 e depois: ozzy@ozzy-laptop:~$ python Python 2.6.5 (r265:79063, Feb 27 2014, 19:44:14) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. Será que tem problema? Porque no github pede a versão de phyton ao menos 2.7... Enfim, baixei o arquivo zip direto no github (mikroe-uhb-master), porque o do library stock está com o último update de 2014 (Last Updated: 2014-08-16).

Abri outro terminal e digitei sudo su (senha) Nautilus Daí verifiquei em usr/local/bin o arquivo mikroe-uhb e etc/modprobe.d o arquivo mikroe-uhb.conf Ok

No mikrobasic, rodei um programa de teste bem simples:

program mikroe_uhb_test

main: while TRUE TRISc.0 = 0 latc.0 = 1 while true latc.0 = 1 delay_ms(100) latc.0 = 0 delay_ms(100) wend wend end.

Testei o código no proteus com sucesso. Usei o bootloader para um pic 18f4550 http://www.mikroe.com/forum/viewtopic.php?f=88&t=53440 Fiz o upload no Mikroe HID bootloader v2.0.0 (windows7). Ok.

Conectei meu dispositivo ao computador (que após o tempo do boot já comecou a piscar o led) com linux ubuntu 10.04LTS (lucid linx), e no terminal, digitei lsusb, pressionei o reset (para acessar o bootloader) e dei enter. Achou: Bus 003 Device 016: ID 1234:0001 com a sintax: lsusb -d 1234:0001 -vvv tivemos:

Bus 003 Device 018: ID 1234:0001
Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x1234 idProduct 0x0001 bcdDevice 0.01 iManufacturer 1 Mikroelektronika iProduct 2 USB HID Bootloader iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 41 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.01 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 33 Report Descriptors: \ UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Device Status: 0x0001 Self Powered

rodando no terminal: mikroe-uhb -v ou mikroe-uhb -v /home/ozzy/Download/mikroe_uhb_test_20Mhz.hex ou /usr/local/bin/mikroe-uhb -v /home/ozzy/Download/mikroe_uhb_test_20Mhz.hex o cursor ficou piscando, até desconectar e reconectar a placa do usb (alimentação) ou pressionar o reset.

O resultado foi o mesmo: ozzy@ozzy-laptop:~$ mikroe-uhb -v DEBUG:mikroeuhb.hid.linux:opening device vendor=1234, product=1 INFO:mikroeuhb.hid.linux:USB device 1234:0001 plugged INFO:mikroeuhb.hid.linux:USB ID matches the expected one DEBUG:mikroeuhb.device:send cmd: stx, cmd=INFO, addr=0x00000000, counter=0x0000 Traceback (most recent call last): File "/usr/local/bin/mikroe-uhb", line 5, in pkg_resources.run_script('mikroe-uhb==0.2', 'mikroe-uhb') File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 461, in run_script self.require(requires)[0].run_script(script_name, ns) File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1194, in run_script execfile(script_filename, namespace, namespace) File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/EGG-INFO/scripts/mikroe-uhb", line 58, in main() File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/EGG-INFO/scripts/mikroe-uhb", line 55, in main dev.program(hexf, disable_bootloader=disable_bootloader) File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 129, in program bootinfo = self.cmd_info() File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 111, in cmd_info self.send(Command.from_attr(Command.INFO)) File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 86, in send cmd.send(self.f) File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 44, in send f.write(b'\x00' + self.buf()) IOError: [Errno 32] Broken pipe

E isso é tudo o que consegui. Paulo, mais uma vez, muito obrigado pela paciência! Parece que agora falta pouco... Estive olhando o github, nao sei se o bootloader utilizado pelo senhor Kerekes Szilard pode ter alguma informação diferente, pois estou utilizando a versão de firmware e software oficial da mikroe (windows), e tanto vendor quanto product id coincidem.

Uma última informação: O relatório não deu erro sobre minha versão de phyton (que é nativa do linux 10.04LTS), mas já tive problema com isso anteriormente, ao tentar rodar outros programas. O que me impede de atualizar meu linux é devido eu utilizar uma máquina antiga (problemas com placa de vídeo), e eu não consigo desinstalar um pacote essencial do sistema. Procurando bastante, tive esse resultado:

ozzy@ozzy-laptop:~$ whereis python2.6.5 python2.6: /usr/bin/python2.6 /etc/python2.6 /usr/lib/python2.6 /usr/local/lib/python2.6 /usr/include/python2.6 /usr/share/man/man1/python2.6.1.gz

ozzy@ozzy-laptop:~$ whereis python3.1.2 python3.1: /usr/bin/python3.1 /etc/python3.1 /usr/lib/python3.1 /usr/local/lib/python3.1 /usr/include/python3.1 /usr/share/man/man1/python3.1.gz /usr/share/man/man1/python3.1.1.gz

Tenho estas duas versões de phyton na minha máquina. Mas é só pra avisar mesmo, porque, entendi que o erro em si é este: IOError: [Errno 32] Broken pipe

Na instalação do mikroe-uhb (último update Jan 23, 2016), tivemos: Using /usr/local/lib/python2.6/dist-packages/six-1.10.0-py2.6.egg Finished processing dependencies for mikroe-uhb==0.2 install -m 644 conf/51-mikroe-uhb.rules /etc/udev/rules.d install -m 644 conf/mikroe-uhb.conf /etc/modprobe.d ozzy@ozzy-laptop:~/Download/mikroe-uhb-master$

Ou seja, instalação feita com sucesso!

Obrigado mais uma vez. Me desculpe pelo excesso de informações...

rc-ozzy commented 8 years ago

Olá mais uma vez, Paulo. Respondi lá no github (não sei se foi no lugar correto rsrs). Assim que tiver um tempinho, pode dar uma olhadinha por favor?Obrigado! Rogério Campos

  De: Paulo Matias <notifications@github.com>

Para: thotypous/mikroe-uhb mikroe-uhb@noreply.github.com Cc: rc-ozzy rc.ozzy@yahoo.com.br Enviadas: Sábado, 23 de Janeiro de 2016 13:16 Assunto: Re: [mikroe-uhb] mikroe hid bootloader linux (#5)

Olá, desculpe por não ter respondido antes no forum da Mikroe, devo estar com alguma configuração de notificação incorreta e não vi a mensagem.Muito obrigado pelo bug report. Parece que o problema aconteceu devido a uma versão recente que lançaram da biblioteca pyudev, que quebrou compatibilidade com a versão 0.16 que eu tinha instalada na minha máquina. Agora ele não permite mais usar a classe Attribute como se fosse um dicionário, por isso ocorre o erro que você observou. Fiz uma mudança no código que mantém compatibilidade com a versão antiga e também suporta essa nova versão.Por favor teste com a última versão do mikroe-uhb e avise se ainda ocorrer algum erro.The issue is due to a change in pyudev's Attribute class which breaks backwards compatibility. It can no longer be treated as a dictionary. The new implementation should be compatible both with older and newer pyudev versions.— Reply to this email directly or view it on GitHub.