Forum: Mikrocontroller und Digitale Elektronik ATMEGA über RS232 programmieren


von Manni (Gast)


Lesenswert?

Hallo Zusammen,

kurze Frage hat jemand erfahrung wie schnell man es schafft ein .bin 
File über die RS232 schnitstelle im ATMEGA32 zu flashen?

Status ist:

Atmega mit Testsoftware ausgestattet (Bootloader)
 Nun würde ich gerne versuchen die richtige Software per RS232 zu 
senden.
Gelingt mir auch nur dauert es ca. 15sec. ein File mit 20Kb zu senden...

Hat da jemand Erfahrung wie schnell man es denn theoretisch schaffen 
könnte?

VG
Manni

von Wolfgang (Gast)


Lesenswert?

Manni schrieb:
> Hat da jemand Erfahrung wie schnell man es denn theoretisch schaffen
> könnte?

Das hängt u.a. davon ab, wie für DEINEN Bootloader die Daten aus dem 
Bin-File für die Übertragung kodiert werden (Intel Hex Format?), wie die 
Übertragungsrate auf DEINER RS232-Schnittstelle eingestellt ist und ob 
die Übertragung durch Händshake zwischendurch  pausiert.
Der Rest ist Einmaleins

von Manni (Gast)


Lesenswert?

Hallo,

danke fuer deine Antwort.

Kodiert wird per Intel Hex Format.

Hast du denn Erfahrungen wie schnell man 20kb uebertragen kann?
Mir gehts eg. drumm ob wir bei der Seriellen uebertragung bleiben oder 
ob es besserer bzw. einfachere Methoden gibt.

VG

von S. Landolt (Gast)


Lesenswert?

> ein File mit 20Kb

Wenn das File 20 kByte hat, dann werden 200000 bits übertragen, bei z.B. 
115200 Baud dauert das knapp 2 s. Hat hingegen der Code 20 kByte, wird 
man mit einem Faktor von etwas über 2 multiplizieren müssen.

> Einmaleins!

von S. Landolt (Gast)


Lesenswert?

PS:

> ... Händshake ...

wäre nur bei schlechtem Bootloader nötig - der ATmega32 hat eine 
Pagesize von 64 Worten.

von Ralph S. (jjflash)


Lesenswert?

Das Intel-Hexformat beinhaltet außer den reinen Datenbytes in einer 
Zeile noch Startcode, Byteanzahl, Adresse, Datentyp und Prüfsumme.

Diese zusätzlichen Informationen werden, wie die Hexdaten selbst, im 
Asciiformat übertragen.

Das heißt: für eine typische Datenzeile die aus 32 zu sendenden Bytes 
besteht sieht das wie folgt aus:

- 32 Bytes als AsciiHex =  64 Bytes
- Zusatzinformationen   =  10 Bytes

Bedeutet: für die Übertragung von 32 Datenbytes werden 74 Asciibytes 
gesendet.

Vernachlässigt man bei dieser Betrachtung das Senden von 
Segmentierungsinformation und das einmalige Senden von EOF ein 
Multiplikationsfaktor von 2,31 per zu sendendem Datenbyte.

Bei einer RS232 Übertragung werden beim Protokoll 8N1 10 Datenbits per 
Byte gesendet (8 Datenbits + Startbit + Stopbit).

D.h.:

20 kByte = 20*1024 Bytes = 20480

zu übertragende Datenbytes.

Im Hexformat zu sendende Bits:
20480 * 2,31 * 10 (Bits per Byte) = 473088 Datenbits

Das macht bei einer Baudrate von 115200

470388 / 115200 = 4,1 Sekunden !

Wenn es (wie hier) um das Flashen eines Chips geht, ist die Frage nach 
dem Brennalgorithmus von Bedeutung und wie mit den Daten "umgegangen" 
wird.  Bspw. kann nach einem Empfang eines Datenpakets dieses geflasht 
werden, deren Speicherzellen geprüft und hieraus eine Checksumme 
berechnet werden, die an den Host zurückgeschickt wird. Stimmt diese mit 
dem überein, wird mit dem nächsten Datenpaket fortgefahren.

Dieses benötigt ebenfalls Zeit (wahlscheinlich mehr, als das reine 
übertragen der Datenbytes).

Die Frage nach der Flashdauer richtet sich demnach nicht nur nach der 
Übertragungsart, sondern auch nach dem Brennalgorithmus (bspw. darin, ob 
der Bootloader die komplette Pagesize beim Flashen verwendet oder 
nicht).

Eine Aussage hier kann also nur nur derart getroffen werden, dass das 
Upöoad MINDESTENS 4,1 Sekunden beträgt.

----------------------------------------------------------------

Btw.: 15 Sekunden für 20 kByte mit seriell finde ich sooooo schlecht 
nicht (auch wenn es vllt. etwas nervig ist)

zu

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.