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