Forum: Mikrocontroller und Digitale Elektronik Fastboot Bootloader: Timeout


von Chris R. (mrgreen)


Lesenswert?

Hallo,

ich versuche, den Bootloader von Peter Dannegger auf einem 644P über 
Bluetooth zum Laufen zu bringen.
Auf dem PC verwende ich den Loader von FBoot von Bernhard Michler / 
Andreas Butti.

Über USB via FTDI funktioniert er, dort kann ich meine Hex-Files 
übertragen.

Wenn ich jetzt den FTDI durch einen UART-Bluetooth-Adapter ersetze, dann 
bricht der Vorgang bei 22% (und zwar immer bei 22%) ab.

Die Verbindung über Bluetooth klappt, ich kann mich mit einem 
Terminal-Programm mit meinem Atmega unterhalten.

Ich habe auch shcon mit den Optionen herumgespielt (Baudrate, Blocksize, 
TCDrain), und ich habe das Timeout im Sourcecode hochgedreht. Aber auch 
wenn ich lange warte, bricht er immer bei 22% ab.

Ich habe beobachtet, dass er auch beim Flashen via FTDI bei 22% jurz 
stehenbleibt, aber dann gleich weiterläuft.

Hat jemand einen Tipp? Irgendwelche Sendepuffer, Flush(), ...?
Warum kann ich über USB flashen aber über Bluetooth nicht?

Zwischen Atmega und meinem PC-Bluetooth-Dongle ist 1m Distanz, daran 
sollte es nicht scheitern.


Gruß
Chris

von Bernhard M. (boregard)


Lesenswert?

Chris R. schrieb:
> Ich habe beobachtet, dass er auch beim Flashen via FTDI bei 22% jurz
> stehenbleibt, aber dann gleich weiterläuft.

Hi,

dann sind die 22% wahrscheinlich die Buffergröße (also das, was unter 
"Buffer :" angegeben ist), danach erwartet der Bootloader eine Antwort 
des Controllers.
Hast Du schon mal (mit source Änderung) die Daten, die vom Controller 
kommen, ausgeben lassen? Kommt da die Antwort nach den 22% (also hex 
0xA9)?

Gruß,
Bernhard

P.S.: welche version des bootloaders verwendest Du? Die aktuelle aus 
github: https://github.com/Boregard/FBoot-Linux

von Chris R. (mrgreen)


Lesenswert?

Hallo,

ich habe den Master aus deinem github-Repo geladen.

Per USB geflasht sieht es so aus:
1
christian@christian:~/Basteln/Atmega/Himmel$ ./bootloader -b 38400 Release/Himmel.hex -d /dev/ttyUSB0 -p -v
2
3
=================================================
4
|           BOOTLOADER, Target: V2.1            |
5
|            (Jan  6 2013 15:23:36)             |
6
=================================================
7
Now program, verify device.
8
Port          : /dev/ttyUSB0
9
Baudrate      : 38400
10
File          : Release/Himmel.hex
11
Reading       : Release/Himmel.hex... File read.
12
Size          : 15842 Bytes
13
-------------------------------------------------
14
Waiting for device... /Rx: 166 (0xA6)
15
connectedRx: 166 (0xA6)
16
Rx: 170 (0xAA)
17
!
18
Rx: 171 (0xAB)
19
Rx: 168 (0xA8)
20
Rx: 3 (0x3)
21
Rx: 2 (0x2)
22
Rx: 1 (0x1)
23
Rx: 170 (0xAA)
24
Bootloader    : V2.1
25
Rx: 168 (0xA8)
26
Rx: 4 (0x4)
27
Rx: 30 (0x1E)
28
Rx: 150 (0x96)
29
Rx: 10 (0xA)
30
Rx: 170 (0xAA)
31
Target        : 1E960A ATmega644P
32
Rx: 168 (0xA8)
33
Rx: 3 (0x3)
34
Rx: 14 (0xE)
35
Rx: 0 (0x0)
36
Rx: 170 (0xAA)
37
Buffer        : 3584 Byte
38
Rx: 168 (0xA8)
39
Rx: 4 (0x4)
40
Rx: 0 (0x0)
41
Rx: 252 (0xFC)
42
Rx: 0 (0x0)
43
Rx: 170 (0xAA)
44
Size available: 64512 Byte
45
Rx: 170 (0xAA)
46
CRC enabled and OK.
47
Programming   : 0x00000 - 0x03DE1
48
Rx: 169 (0xA9)##############                                                                  ]  22%
49
Rx: 169 (0xA9)#################################                                               ]  45%
50
Rx: 169 (0xA9)####################################################                            ]  67%
51
Rx: 169 (0xA9)#######################################################################         ]  90%
52
Writing [#####################################################################################] 100%
53
Elapsed time  : 4.61 seconds, 3436 Bytes/sec.
54
Rx: 170 (0xAA)
55
Rx: 170 (0xAA)
56
57
 ++++++++++ Device successfully programmed! ++++++++++
58
59
Verify        : 0x00000 - 0x03DE1
60
Verifying [###################################################################################] 100%
61
Elapsed time  : 4.40 seconds, 3600 Bytes/sec.
62
Rx: 170 (0xAA)
63
Rx: 170 (0xAA)
64
65
 ++++++++++ Device successfully verified! ++++++++++
66
67
...starting application

Wenn ich deinen Loader ohne mein Debug-printf() betreibe, dann hängt er 
wie gesagt bei den 22%.
Wenn ich aber das printf() einbaue, dann stirbt er lange vorher:

Bluetooth und Debug-printf():
1
christian@christian:~/Basteln/Atmega/Himmel$ ./bootloader -b 38400 Release/Himmel.hex -d /dev/rfcomm0 -p -v
2
3
=================================================
4
|           BOOTLOADER, Target: V2.1            |
5
|            (Jan  6 2013 15:23:36)             |
6
=================================================
7
Now program, verify device.
8
Port          : /dev/rfcomm0
9
Baudrate      : 38400
10
File          : Release/Himmel.hex
11
Reading       : Release/Himmel.hex... File read.
12
Size          : 15842 Bytes
13
-------------------------------------------------
14
Waiting for device... |Rx: 166 (0xA6)
15
connectedRx: 166 (0xA6)
16
Rx: 166 (0xA6)
17
Rx: 166 (0xA6)
18
Rx: 166 (0xA6)
19
Rx: 166 (0xA6)
20
Rx: 166 (0xA6)
21
Rx: 166 (0xA6)
22
Rx: 166 (0xA6)
23
Rx: 166 (0xA6)
24
Rx: 166 (0xA6)
25
Rx: 166 (0xA6)
26
Rx: 166 (0xA6)
27
Rx: 166 (0xA6)
28
Rx: 166 (0xA6)
29
Rx: 166 (0xA6)
30
Rx: 166 (0xA6)
31
Rx: 166 (0xA6)
32
Rx: 166 (0xA6)
33
Rx: 170 (0xAA)
34
!
35
Rx: 171 (0xAB)
36
Rx: 168 (0xA8)
37
Rx: 3 (0x3)
38
Rx: 2 (0x2)
39
Rx: 1 (0x1)
40
Rx: 170 (0xAA)
41
Bootloader    : V2.1
42
Rx: 168 (0xA8)
43
Rx: 4 (0x4)
44
Rx: 30 (0x1E)
45
Rx: 150 (0x96)
46
Rx: 10 (0xA)
47
Rx: 170 (0xAA)
48
Target        : 1E960A ATmega644P
49
Rx: 168 (0xA8)
50
Rx: 3 (0x3)
51
Rx: 14 (0xE)
52
Rx: 0 (0x0)
53
Rx: 170 (0xAA)
54
Buffer        : 3584 Byte
55
Rx: 168 (0xA8)
56
Rx: 4 (0x4)
57
Rx: 0 (0x0)
58
Rx: 252 (0xFC)
59
Rx: 0 (0x0)
60
readval: ...Device does not answer!
61
Reading FLASHSIZE failed!

Bluetooth OHNE printf
1
christian@christian:~/Basteln/Atmega/Himmel$ ./bootloader -b 38400 Release/Himmel.hex -d /dev/rfcomm0 -p -v
2
3
=================================================
4
|           BOOTLOADER, Target: V2.1            |
5
|            (Jan  6 2013 15:23:36)             |
6
=================================================
7
Now program, verify device.
8
Port          : /dev/rfcomm0
9
Baudrate      : 38400
10
File          : Release/Himmel.hex
11
Reading       : Release/Himmel.hex... File read.
12
Size          : 15842 Bytes
13
-------------------------------------------------
14
Waiting for device... connected!
15
Bootloader    : V2.1
16
Target        : 1E960A ATmega644P
17
Buffer        : 3584 Byte
18
Size available: 64512 Byte
19
CRC enabled and OK.
20
Programming   : 0x00000 - 0x03DE1
21
Writing [###################                                                                  ]  22%
22
 ---------- Failed! ----------
23
24
 ---------- Programming failed! ----------


Gibt es da evtl. ein Timing-Problem? Ich verstehe aber grade nicht, 
wieso.
Das printf() habe ich in die com_getc eingebaut (Z.313). Das sollte aber 
keinen großen Einfluss auf den weiteren Programmablauf haben.



Interessanterweise ist der Puffer in beiden Fällen gleich groß, bei der 
Verbindung per USB bekommt dein Loader aber ein Antwort vom Chip.
Wenn ich mich mit einem Terminalprogramm mit meinem Baustein verbinde, 
erhalte ich aber auch Antworten über Bluetooth.

Der Bootlader von Peter Dannegger merkt doch aber überhaupt nicht, 
welches Übertragungsmedium ihn mit Daten versorgt...?

Gruß
Mr.Green

von Bernhard M. (boregard)


Lesenswert?

Chris R. schrieb:
> Interessanterweise ist der Puffer in beiden Fällen gleich groß

die Buffer größe kommt ja von Peters Code vom ATMega, das ist der 
verfügbare Pufferspeicher.

Mein Verdacht ist auch ein Timingproblem, und daß sich der Bluetooth 
Adapter anders verhält bzgl. der IOCTLs.

Probiere das mal mit den Extremwerten: -t 1 -w 64 -r

Gruß,
Bernhard

von Chris R. (mrgreen)


Lesenswert?

Er läuft dann zwar bis 100% durch, aber es einen CRC Fehler, das Verify 
schlägt fehl und das Programm startet nicht :(

von Chris R. (mrgreen)


Lesenswert?

Hallo Bernhard,

muss ich davon ausgehen, dass du keine Idee mehr hast...?

Gruß
Chris

von Kille H. (kille)


Lesenswert?

Hi,

sitze grade vor dem selben Problem.
Schön eine Lösung gefunden?

Grüße,
Kille

von Kille H. (kille)


Lesenswert?

So hab jetzt einen client gefunden mit dem es geht. Zwar langsam aber es 
geht:
Der ist hier zu finden:
http://www.mikrocontroller.net/articles/Diskussion:Word_Clock_Variante_1

Wäre aber schön wenn es FBoot-Linux auch geht...

Grüße

von Bernhard M. (boregard)


Lesenswert?

Hallo,

sorry, ich habe die letzten Postings hier übersehen...

Das Problem scheint immer das gleiche zu sein. Es geht, wenn die Bytes 
einzeln über Bluetooth geschickt werden, also kein Puffer benutzt wird.
Damitwird die maximale Übertragungsgeschwindikeit natürlich sehr 
langsam.

Man könnte die Wartezeit noch hochsetzen, z.B. -w 128...

Ich muß mir jetzt mal bluetooth adapter besorgen, um es zu testen, was 
verwendet ihrdenn so?

Gruß,
Bernhard

von Kille H. (kille)


Lesenswert?

Hi Bernhard,

danke für das Feadback.
Also ich verwende den HC-05.
Z.B.
http://www.aliexpress.com/item/2-4G-GHz-Serial-Port-Bluetooth-Module-HC-05-Master-Slave-For-GPS-Receiver-MCU-Free/689579631.html

Ich werde das mit der Wartezeit testen!

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.