Estoy tratando de flashear un programa en un attiny167 (ya cargado con el cargador de arranque micronucleus ) con una Raspberry Pi a través de avrdude y USB.
Fondo
Tengo 50 Raspberry Pi 3B conectados a un servidor de Amazon que recopila datos.
Tengo 50 PCB con sensores USB personalizados basados en attiny167 que conectaré a la Pis
vía USB ( vea este anterior para más detalles )
Es una lucha para acceder y conectar cada dispositivo (especialmente 50 de ellos),
y, por lo tanto, necesito poder volver a actualizar un programa a través de la línea de comandos de un RPi.
Los he cargado todos desde mi máquina con Windows 10 y puedo flashear cualquier programa a través de USB.
RPis
He flasheado programas del RPi con un Arduino Uno, tanto con el IDE como con avrdude. Arduino y avrdude están instalados y funcionan (se instalan ambos con apt-get).
El RPi puede ejecutar un programa ya flasheado, con lectura y escritura posible desde el dispositivo USB. Cuando está enchufado, el comando lsusb ve el dispositivo durante 5 segundos. El programa pre-flash entonces se ejecuta y lsusb no muestra ningún dispositivo:
lsusb
inmediatamente después de conectar el dispositivo al puerto
pi@raspberrypi:/usr/bin $ lsusb Bus 001 Device 005: ID 046d:c077 Logitech, Inc. Bus 001 Device 006: ID 413c:2011 Dell Computer Corp. Multimedia Pro Keyboard Bus 001 Device 004: ID 413c:1005 Dell Computer Corp. Multimedia Pro Keyboard Hub Bus 001 Device 007: ID 16d0:0753 MCS Digistump DigiSpark Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
lsusb
~ 5 segundos después de conectar el dispositivo al puerto
pi@raspberrypi:/usr/bin $ lsusb Bus 001 Device 005: ID 046d:c077 Logitech, Inc. Bus 001 Device 006: ID 413c:2011 Dell Computer Corp. Multimedia Pro Keyboard Bus 001 Device 004: ID 413c:1005 Dell Computer Corp. Multimedia Pro Keyboard Hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
udev rules
He seguido el tutorial para las reglas de udev por digistump y colocó el archivo en /etc/udev/rules.d/49-micronucleus.rules
UDEV de tinseey (similar a micronucleus de arranque para attiny167)
Dispositivo AVR
esta publicación insinúa que puede no ser posible, sin embargo, este problema puede haberse resuelto, ya que estoy usando un attiny167 (en lugar de un 85), y el Pi no se reinicia en el USB que se está enchufando.
Al usar dmesg puede ver que no se puede enumerar.
dmesg
[ 9820.701327] usb 1-1.2: new low-speed USB device number 7 using dwc_otg [ 9820.803813] usb 1-1.2: New USB device found, idVendor=16d0, idProduct=0753 [ 9820.803838] usb 1-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 9825.208851] usb 1-1.2: USB disconnect, device number 7 [ 9828.001334] usb 1-1.2: new low-speed USB device number 8 using dwc_otg [ 9833.081359] usb 1-1.2: device descriptor read/64, error -110 [ 9833.271389] usb 1-1.2: device descriptor read/64, error -71 [ 9833.461352] usb 1-1.2: new low-speed USB device number 9 using dwc_otg [ 9833.541349] usb 1-1.2: device descriptor read/64, error -71 [ 9833.731352] usb 1-1.2: device descriptor read/64, error -71 [ 9833.921349] usb 1-1.2: new low-speed USB device number 10 using dwc_otg [ 9834.341388] usb 1-1.2: device not accepting address 10, error -71 [ 9834.421361] usb 1-1.2: new low-speed USB device number 11 using dwc_otg [ 9834.841371] usb 1-1.2: device not accepting address 11, error -71 [ 9834.841480] usb 1-1-port2: unable to enumerate USB device
avrdude
Estoy usando el comando, con diferentes puertos serie
usr/bin/avrdude -p attiny167 -c arduino -C /etc/avrdude.conf -b 19200 -P [COM PORT] -U flash:w:[MyHexFile.ino.hex]:i
esto da el error
avrdude: ser_open(): can't open device "[COM PORT]": No such file or directory avrdude done. Thank you.
El mismo método funciona con el Uno en Pi y el dispositivo AVR en mis máquinas con Windows 10.
He actualizado el archivo de configuración avrdude.conf
para incluir el attiny167,
Como lo hice con mi máquina con Windows 10.
Puerto serie
serial y ttyACMO aparecen con Uno en / dev, no para el dispositivo AVR.
IDE de Arduino
Intenté hacer esto a través del IDE pero obtuve el error:
/home/pi/Downloads/arduino-1.8.1/arduino-builder -dump-prefs -logger=machine -hardware /home/pi/Downloads/arduino-1.8.1/hardware -hardware /home/pi/.arduino15/packages -tools /home/pi/Downloads/arduino-1.8.1/tools-builder -tools /home/pi/Downloads/arduino-1.8.1/hardware/tools/avr -tools /home/pi/.arduino15/packages -built-in-libraries /home/pi/Downloads/arduino-1.8.1/libraries -libraries /home/pi/Arduino/libraries -fqbn=digistump:avr:digispark-tiny -ide-version=10801 -build-path /tmp/arduino_build_279218 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.micronucleus.path=/home/pi/.arduino15/packages/digistump/tools/micronucleus/2.0a4 -prefs=runtime.tools.avr-gcc.path=/home/pi/.arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5 -verbose /home/pi/sensicorn/sensicorn/indoorSoftware/Arduino Code/neopixel_simple/neopixel_simple.ino /home/pi/Downloads/arduino-1.8.1/arduino-builder -compile -logger=machine -hardware /home/pi/Downloads/arduino-1.8.1/hardware -hardware /home/pi/.arduino15/packages -tools /home/pi/Downloads/arduino-1.8.1/tools-builder -tools /home/pi/Downloads/arduino-1.8.1/hardware/tools/avr -tools /home/pi/.arduino15/packages -built-in-libraries /home/pi/Downloads/arduino-1.8.1/libraries -libraries /home/pi/Arduino/libraries -fqbn=digistump:avr:digispark-tiny -ide-version=10801 -build-path /tmp/arduino_build_279218 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.micronucleus.path=/home/pi/.arduino15/packages/digistump/tools/micronucleus/2.0a4 -prefs=runtime.tools.avr-gcc.path=/home/pi/.arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5 -verbose /home/pi/sensicorn/sensicorn/indoorSoftware/Arduino Code/neopixel_simple/neopixel_simple.ino Using board 'digispark-tiny' from platform in folder: /home/pi/.arduino15/packages/digistump/hardware/avr/1.6.7 Using core 'tiny' from platform in folder: /home/pi/.arduino15/packages/digistump/hardware/avr/1.6.7 Detecting libraries used... "/home/pi/.arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -w -x c++ -E -CC -mmcu=attiny85 -DF_CPU=16500000L -DARDUINO=10801 -DARDUINO_AVR_DIGISPARK -DARDUINO_ARCH_AVR "-I/home/pi/.arduino15/packages/digistump/hardware/avr/1.6.7/cores/tiny" "-I/home/pi/.arduino15/packages/digistump/hardware/avr/1.6.7/variants/digispark" "/tmp/arduino_build_279218/sketch/neopixel_simple.ino.cpp" -o "/dev/null" Generating function prototypes... "/home/pi/.arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -w -x c++ -E -CC -mmcu=attiny85 -DF_CPU=16500000L -DARDUINO=10801 -DARDUINO_AVR_DIGISPARK -DARDUINO_ARCH_AVR "-I/home/pi/.arduino15/packages/digistump/hardware/avr/1.6.7/cores/tiny" "-I/home/pi/.arduino15/packages/digistump/hardware/avr/1.6.7/variants/digispark" "/tmp/arduino_build_279218/sketch/neopixel_simple.ino.cpp" -o "/tmp/arduino_build_279218/preproc/ctags_target_for_gcc_minus_e.cpp" fork/exec /home/pi/.arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/bin/avr-g++: no such file or directory Error compiling for board Digispark (Default - 16.5mhz).
cuando escribo which avr-g++
: / usr / bin / avr-g ++, esto es solo una copia de mi máquina Windows.
Encontré este problema de github
y parece ser irrelevante por ahora, solo un problema de ruta.
He tenido que usar un archivo json personalizado para que el administrador de la junta encuentre micronúcleo y Digispark Pro.
Cuando conecto el dispositivo AVR, no se muestra ningún puerto serie nuevo en Herramientas- > Puerto (a diferencia de Arduino UNO, aparece ttyACM0).
Prefiero hacer flash a través de avrdude o similar en la línea de comandos, por lo que no me he centrado en esto.
Mi pregunta
¿Es posible flashear el dispositivo AVR con una Raspberry Pi a través de USB? Si es así, ¿qué estoy haciendo mal?