Hallo alle miteinander,
Ich habe:
- den Code von AVRUSB500 (geringfügig) modifiziert, so dass er auch auf
einem Arduino UNO Board (und ausserhalb des Boards auf ATmega8, 88, 168
und 328p) funktioniert.
- AVRUSB500 verwendet das STK500v2 Protokoll mit einer Baudrate von
115200
Mein Problem:
Während auf einem eigenen PCB-Layout (egal ob mit einem FTDI oder CH340G
als USB Bridge) alles gut ist (weil kein automatischer Reset ausgeführt
wird), besteht bei einem Arduino-Board das Problem, dass der MCU über
einen Kondensator mit der DTR-Leitung der USB-Bridge verbunden ist.
Da AVRDUDE beim Start ein Signal auf DTR sendet, löst dieses einen Reset
des UNO Boards aus und somit ist erst einmal der Bootloader aktiviert.
Erst nach einer Verweildauer (nachdem kein Programmupload in den UNO
erfolgt) startet das Anwenderprogramm (in diesem Fall mein AVRUSB500).
Dies führt dazu, dass nach dem Starten von AVRDUDE das UNO-Board nicht
gleich antworten kann, weil das Board sich im Bootloadermodus befindet
und löst somit einen Timeout beim AVRDUDE aus.
Nach diesem ersten Timeout findet AVRDUDE nun einen STK500v2 Programmer
und alles ist gut:
1 | avrdude -c stk500v2 -p atmega168 -P /dev/ttyUSB0 -b 115200 -V -U flash:w:tetris6_devboard.hex
|
2 | avrdude: stk500_2_ReceiveMessage(): timeout
|
3 |
|
4 | avrdude: AVR device initialized and ready to accept instructions
|
5 |
|
6 | Reading | ################################################## | 100% 0.07s
|
7 |
|
8 | avrdude: Device signature = 0x1e9406
|
9 | avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
|
10 | To disable this feature, specify the -D option.
|
11 | avrdude: erasing chip
|
12 | avrdude: reading input file "tetris6_devboard.hex"
|
13 | avrdude: input file tetris6_devboard.hex auto detected as Intel Hex
|
14 | avrdude: writing flash (6492 bytes):
|
15 |
|
16 | Writing | ################################################## | 100% 1.35s
|
17 |
|
18 | avrdude: 6492 bytes of flash written
|
19 |
|
20 | avrdude: safemode: Fuses OK
|
21 |
|
22 | avrdude done. Thank you.
|
Nun zur Frage:
Gibt es eine Möglichkeit (ohne Änderung des Quellcodes von AVRDUDE - ich
würde das sehr sehr gerne unmodifiziert lassen) das Auslösen des DTR
Signals zu verhindern oder die Abfrage des Programmers nach dem Start
von AVRDUDE zu verzögern ? (smile Jörg Wunsch weiß hier doch
sicherlich bescheid),
Gruß,
Ralph S.