mehrere Bytes über Uart empfangen + in EEPROM schreiben

Gast #100877
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
Gast #100878
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 )
Gast #100879
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.)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.