Estoy usando un chip ATtiny167 Atmel en una placa PCB personalizada que he diseñado.
Hice un prototipo de la placa con los sensores y un Digispark ( Getting going , Upload Bootloader ) como ADC y conexión serial. He fabricado la placa (varias veces) y ahora estoy tratando de comunicarme con ella.
Intenté cargar un cargador de arranque a través de ISP (algo se cargó) y luego intenté hablar con mi PC con Windows 10 a través de USB:
El objetivo final es una "memoria de sensor" USB conectada a una Raspberry Pi que recopila datos del sensor y los envía a un servidor.
He usado el gestor de arranque de micronúcleos ( Micronucleus repo ) usando AVRDUDE y un Arduino Uno como ISP desde la terminal. Esto se hace a través de conexiones de pines pogo en la PCB (MISO, MOSI, RESET, SCK, VCC y GND).
El gestor de arranque se carga correctamente:
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -c stk500v1 -p attiny167 -P com6 -U lfuse:r:-:i -v -C avrdude.conf -b 19200
que salidas:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e9487 (probably t167)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "ProBootloaderR2.hex"
avrdude: writing flash (16384 bytes):
Writing | ################################################## | 100% 0.03s
avrdude: 16384 bytes of flash written
avrdude: verifying flash memory against ProBootloaderR2.hex:
avrdude: load data flash data from input file ProBootloaderR2.hex:
avrdude: input file ProBootloaderR2.hex contains 16384 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.03s
avrdude: verifying ...
avrdude: 16384 bytes of flash verified
avrdude: safemode: Fuses OK (E:FE, H:DF, L:62)
avrdude done. Thank you.
(Hablaré de los fusibles más adelante).
He instalado los controladores apropiados para el micronúcleo ( Grabar el cargador de arranque Micronúcleo para usar ATtiny85 a través de usb (avrdude) (probado con un Digispark en mi PC).
No estoy seguro de si los fusibles que he seleccionado son los correctos. Estoy usando la calculadora de fusibles de engbedded.com para calcular los fusibles correctos, probé varios y ninguno funcionó. No seleccionar el fusible (dejarlo por defecto) parece no dar errores.
Cuando leo desde el cargador de arranque usando el comando
avrdude -c stk500v1 -p attiny167 -P com6 -U lfuse:r:-:i -v -C avrdude.conf -b 19200
Yo obtengo:
avrdude: Version 6.3, compiled on Dec 16 2016 at 13:33:19
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "avrdude.conf"
Using Port : com6
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATtiny167
Chip Erase delay : 1000 us
PAGEL : P00
BS2 : P00
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 4 0 no 512 4 0 4000 4500 0xff 0xff
flash 65 10 64 0 yes 16384 128 128 4500 4500 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.06s
avrdude: Device signature = 0x1e9487 (probably t167)
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FE
avrdude: reading lfuse memory:
Reading | ################################################## | 100% 0.03s
avrdude: writing output file "<stdout>"
:01000000629D
:00000001FF
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FE
avrdude: safemode: Fuses OK (E:FE, H:DF, L:62)
avrdude done. Thank you.
Cuando seleccioné Ext. Reloj – XTAL1; Tiempo de arranque PWRDWN/RESET: 6 CK/14 CK + 64 ms; Estaba recibiendo el ID de dispositivo de error 0x00000000 y ya no podía ISP un gestor de arranque. De lo contrario, lo he mantenido como Int.RC Osc. 8 MHz
Tengo un reloj externo de 16 MHz, pero como dije, seleccionar el reloj externo parecía un ladrillo.
No he desactivado el reinicio.
Cuando conecto el dispositivo a mi computadora en el puerto USB (COM6), aparece "Dispositivo USB no reconocido". El controlador (en el Administrador de dispositivos) es "Dispositivo USB desconocido (Error en la solicitud del descriptor del dispositivo)".
Intenté seleccionar el controlador: Actualizar controlador → Buscar software de controlador en mi computadora → Déjame elegir de una lista de controladores de dispositivo en mi computadora → Utilizar disco… → Explorar… y luego intenté seleccionar el archivo .inf apropiado:
“La carpeta que especificó no contiene un controlador de software compatible para su dispositivo. Si la carpeta contiene un controlador, asegúrese de que esté diseñado para funcionar con Windows para sistemas basados en x64”.
También seleccioné el archivo que contiene los controladores apropiados, pero recibo el error "Windows ha determinado que el software del controlador para su dispositivo está actualizado". Y cuando se utiliza el IDE de Arduino como lo haría con un Digispark, no se reconoce ningún dispositivo (tiempo de espera). He probado los mismos controladores en otras máquinas con Windows, con los mismos resultados.
¿Qué estoy haciendo mal y cómo puedo solucionarlo?
Creo que el problema es configurar los fusibles, pero no estoy seguro de qué configuración es correcta y cómo probarla.
Ahora uso un ATtiny167 en lugar de un ATtiny85, por lo que se parece más al Digispark pro. Sin embargo, utiliza los mismos controladores (controladores de micronúcleo). No he probado otro bootloader para USB y la gama ATtiny ( Optiboot ). No he intentado usar ISP de alto voltaje.
Después de leer su pregunta y de haber revisado el depósito de micronúcleos, su problema se reduce a fusibles/relojes.
En primer lugar, y aunque no es inmediatamente obvio (no está documentado en ninguna parte excepto en el código), el cargador de arranque de micronúcleo ATTiny167 requiere una fuente de reloj externa de 16 MHz para funcionar. Está utilizando el oscilador interno de 8 MHz que no permitirá que el cargador de arranque funcione a la frecuencia correcta y, por lo tanto, la emulación USB fallará.
En segundo lugar, cuando trató de usar su cristal externo, usó la configuración de fusible incorrecta y, de hecho, no estaba habilitando el cristal. En la calculadora de fusibles incorporados, la opción de reloj para "Ext. Clock – XTAL1" no selecciona usar un cristal externo, requiere que ingrese una señal de reloj CMOS/TTL en XTAL1. Por cierto, seleccionar esto con un cristal conectado a los pines XTAL bloqueará el chip y evitará el ISP debido a la falta de una fuente de reloj.
La solución es utilizar la configuración de fusibles correcta. Deberá seleccionar la opción de reloj para " Cristal externo - 8-16 MHz" que habilitará el circuito del oscilador de cristal interno y permitirá derivar un reloj de su cristal. Desde la calculadora, suponiendo que no esté habilitado el BOD (depende de usted si es necesario) y que la autoprogramación esté habilitada (necesaria para el gestor de arranque), se requieren las siguientes configuraciones de fusibles:
0xFF
0xDF
0xFE
Una vez que habilite la fuente de reloj de 16 MHz, su gestor de arranque debería funcionar correctamente suponiendo que no haya otros problemas de hardware.
tom carpintero
tom carpintero
tom carpintero
aidenray