Compré un programador "usbasp" de AliExpress para usar con mis dispositivos AVR ATtiny84A. Esto tiene el texto "USBASP V2.0 LC Technology" impreso en la parte superior de la PCB, y se parece mucho a esto:
TengouncableC232HM(FTDI)queheestadousandocomounprogramadordeavrdudeconéxitodurantealgúntiempo,asíqueséquemisdispositivosAVRestánfuncionandoyqueestoyusandolospinescorrectosenelATtiny84.
Lamentablementenohetenidoéxitoconestenuevoprogramador.DespuésdeconectarVCC(conelpuenteJ1configuradopara5V),GND,MOSI,MISO,SCKyRESET(¡ytriplecomprobación!),avrdude
proporcionaelsiguienteerror:
$avrdude-cusbasp-pattiny84-vvvvavrdude:Version6.3,compiledonSep172016at02:19:28Copyright(c)2000-2005BrianDean,http://www.bdmicro.com/Copyright(c)2007-2014JoergWunschSystemwideconfigurationfileis"/usr/local/Cellar/avrdude/6.3/etc/avrdude.conf"
User configuration file is "/Users/me/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : usbasp
avrdude: usbasp_open("usb")
avrdude: seen device from vendor ->www.fischl.de<-
avrdude: seen product ->USBasp<-
AVR Part : ATtiny84
Chip Erase delay : 4500 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 6 4 0 no 512 4 0 4000 4500 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
flash 65 6 32 0 yes 8192 64 128 4500 4500 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: usbasp_initialize()
avrdude: usbasp_transmit("USBASP_FUNC_GETCAPABILITIES", 0x00, 0x00, 0x00, 0x00)
avrdude: usbasp_spi_set_sck_period(0)
avrdude: auto set sck period (because given equals null)
avrdude: usbasp_transmit("USBASP_FUNC_SETISPSCK", 0x00, 0x00, 0x00, 0x00)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: usbasp_transmit("USBASP_FUNC_CONNECT", 0x00, 0x00, 0x00, 0x00)
avrdude: usbasp_program_enable()
avrdude: usbasp_transmit("USBASP_FUNC_ENABLEPROG", 0x00, 0x00, 0x00, 0x00)
<= [01]
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: usbasp_close()
avrdude: usbasp_transmit("USBASP_FUNC_DISCONNECT", 0x00, 0x00, 0x00, 0x00)
avrdude done. Thank you.
No funciona con un suministro externo de 5V (J1 eliminado), o con J1 configurado para 3.3V tampoco.
Con mi alcance, puedo ver que el reloj funciona a aproximadamente 92.6 kHz, pero las señales MISO y MOSI tienen una amplitud muy baja, aproximadamente 1.1V para MISO y 0.8V para MOSI. Estos voltajes me parecen un poco bajos:
LeíqueJ3sepuedeusarparaconfigurarelprogramadorenmodo"lento" (tenga en cuenta que el ATtiny84 que estoy intentando programar actualmente ya se está ejecutando a 8 MHz desde el oscilador interno). Sin embargo, al agregar J3, no veo ningún cambio en la frecuencia de reloj, todavía se ejecuta a aproximadamente 92.6 kHz.
Por lo que he leído, los programadores usbasp "chinos" tienden a incluir alguna versión del software que permite la detección de la velocidad del reloj. Sin embargo, no estoy seguro de si esto se traduce en soporte para la opción "-B", ya que no importa qué valor -B
ofrezco, el alcance muestra que el reloj sigue funcionando a 92.6 kHz.
Me he asegurado de que no haya otros circuitos que interfieran con el programador. También probé un segundo ATtiny84 "nuevo" (así que los fusibles aún están configurados para 1MHz) sin éxito tampoco. Sin embargo, el programador C232HM funciona bien.
Entonces, nada de lo que leí parece correlacionarse con lo que veo con mi dispositivo. Me pregunto si esos voltajes MOSI / MISO son demasiado bajos (y por qué) y también estoy sorprendido de por qué ni J3 ni -B
parecen afectar la velocidad del reloj.
¿Qué podría estar mal? ¿Qué más puedo investigar?
EDITAR: agregó más información.
El ATtiny recibe alrededor de 5.1V del programador. Esto no parece fluctuar o caer durante el proceso.
Rastros con ATtiny84 en su lugar:
- Amarillo: SCL (pin de USBasp 7 / ATtiny84 pin 9) - 5V
- Cian: MISO (pin de USBasp 9 / ATtiny84 pin 8) - ~ 1.1V
- Magenta: MOSI (pin de USBasp 1 / ATtiny84 pin 7) - ~ 3.3V
- Azul: RESET (USBasp pin 5 / ATtiny84 pin 4) - 5V
ElprogramadortiradelalíneaRESETdosveces,ylalíneaMOSIllegaaaproximadamente3.3V.Luego,despuésdeaprox.100ms,elSCLcomienzaaemitirpulsosa0-5V,aprox.94kHz,yhayactividadtantoenlalíneaMOSIcomoenlalíneaMISO,peroparecebastantehorrible:
SinelATtiny84ensulugar(SLK,RESET,MISOyMOSIflotantes),elalcanceseveasí:
LatrazamagentaesMOSIyseelevaaaproximadamente5V,perosevefea(quizásporqueestáflotando):
¿HayalgúntipodeseñalenMISOtambién,talvezinterferenciadeMOSI?
Puseunresistorde330kOhmentreMOSIyGNDyun1MOhmentreMISOyGND(todavíanohayATtinypresente)yordenéunpocolashuellas:
Lo que realmente no entiendo es por qué la señal MOSI (magenta) es tan impura y por qué hay una señal de reloj en MISO (cian).