Forum: Compiler & IDEs mehrere Bytes über Uart empfangen + in EEPROM schreiben


von Thomas (Gast)


Lesenswert?

Halli hallo,

nachdem ich es geschafft habe meinen EEPROM beim Flashen zu füllen, so
möchte ich mich jetzt der neuen Aufgabe zuwenden ca. 200 Bytes von der
UART zu empfangen, diese wenn nötig zwischenzuspeichern und dann in den
EEPROM zu schreiben. Dabei sind jetzt folgende Probleme bzw. Fragen
aufgetreten. Ich denke mal für Jörg sind das kinderleichte Sachen ;-)

1.meine Uart geht. ich kann damit problemlos ein Zeichen Empfangen und
auch Senden. Wenn ich jetzt aber gleich eine Folge von Bytes senden
möchte, wie muss man da vorgehen? Ich habe Peters Bibliothek
ausprobiert, aber da passiert bei mir gar nichts.Bin mir nicht so
sicher was ich da falsch gemacht habe. In anderen Beiträgen habe ich
gelesen, dass man ein Protokoll braucht, um die Daten richtig zu
empfangen. Muss ich mir das selbst ausdenken? Was hat es mit den sachen
y-modem,x,modem,z-modem, kirmit etc. auf sich? Wo findet man diese und
was kann man damit anfangen?

2.habe in einem anderen Thread erfahren, dass man die Daten von der
Uart empfangen und auch gleichzeitig noch in den EEPROM schreiben
kann,wenn man unter 800 baud bleibt. Macht das Sinn oder sollte man in
jedem Falle einen Buffer verwenden?

3.In meinem Terminalprogramm kann man gleich Files versenden, wenn man
eben so wie ich mehrere Zeichen verschicken möchte. Gibt es da ein
bestimmtes Format an das ich mich halten muss, oder kann ich die
Zeichen einfach hintereinander schreiben und fertig?

Vielen Dank, ich hoffe Ihr könnt mir weiterhelfen...

Ciao Thomas

von mthomas (Gast)


Lesenswert?

wuerde Puffer und Protokoll empfehlen. schnell und zuverlaessig. ein
kleines programm auf dem PC sollte reichen. XYZ-Modem muss nicht.

prinzip:
- sende startzeichen "eeprom schreiben" (PC->AVR)
- sende startadresse im eeprom als byte/word (PC->AVR)
- sende anzahl der nutzdaten-bytes (<= puffergroesse) (PC->AVR)
- sende 1-n bytes nutzdaten fuer eeprom (PC->AVR), avr legt diese
erstmal in den buffer ab.
- AVR beginnt mit eeprom-schreibvorgang sobald letztes byte da. also
alle bytes n aus dem buffer in eeprom-schreiben, beginnend mit der
gegebenen startadresse.
- PC wartet auf bestaetigung durch AVR (definiertes zeichen AVR->PC)

solange wiederholen bis alle bytes uebertragen sind geschrieben

wird im prinzip auch so bei bootloader-programmen gemacht (AVR910 und
STK500 protokoll), da diese meist neben flash- auch eeprom-read/write
unterstuetzen. vielleicht kann fuer die aufgabe etwas code aus meinem
"avrprog-kompatiblen" bootloader "recycled" werden.
( http://www.siwawi.arubi.uni-kl.de/avr_projects/#avrprog_boot )

von Jörg Wunsch (Gast)


Lesenswert?

Xmodem + CRC ist auch nicht so schwierig (gibt's garantiert
hinreichend Beispiele im Internet), hat halt den Vorteil, daß man eine
simple Fehlererkennung dabei hat.

Zusammen mit Xon/Xoff-Flußsteuerung kann man auch beliebig lange
Datenströme verwalten, ohne daß man den kompletten Puffer für alle
Bytes im RAM vorhalten muß.  (Flußsteuerung ist im Wiki erklärt.)

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.