uart sd-Karte xon/xoff

OP #1190377
Hallo Leute,
ich möchte eine sd-Karte mit mehr als 512-Byte Daten über uart "RAW" 
beschreiben.
Situation:
- Hardware ATMEGA32 mit 14,7456 MHz Quarz
- uart funktioniert
- schreiben/lesen der sd-Karte funktioniert

Problem:
Ich habe keinen PORT mehr für eine Hardware-Flußkontrolle frei, die ich 
aber
benötige, da immer 512 Byte große Blocks auf die Karte geschrieben 
werden
müssen.

Mein Lösungsansatz:
Software-Flußkontrolle via XON/XOFF.

Ergebniss:
Der PC sendet immer noch eine bestimmte Anzahl von Daten nachdem
XOFF vom µC gesendet wurde. Das führt beim Empfang des nächsten
512-Byte großen Blocks immer zu einem "Data Over Run" der uart-
Schnittstelle und zu Datenverlust der vorher zu viel gesendeten
Bytes.

Frage:
Wieso sendet der PC nach XOFF immer noch ein paar Daten?
(Dieser Fehler tritt bei allen Terminalprogrammen auf minicom, 
wxterm...)
Persönliche Seite
Die UART-Hardware des PCs verwendet einen Hardware-Sendepuffer. Der wird 
automatisch geleert, d.h. alle in ihm gespeicherten Daten werden 
übertragen. Empfängt der PC nun ein XOFF, so hört er zwar auf, diesen 
Sendepuffer zu befüllen, die UART-Hardware aber leert diesen Puffer 
weiterhin, da sie selbst sich für Software-Handshake nicht interessiert.

Zusätzlich zum UART-Hardware-Sendepuffer ("Fifo", je nach Ausführung der 
UART zwischen 16 und 128 Bytes) kommt dann noch ein 
UART-Hardware-Empfangspuffer ins Spiel. Dieser wird vom PC unter zwei 
Umständen ausgelesen - wenn er voll ist oder wenn Daten darin enthalten 
sind und eine gewisse Wartezeit verstrichen ist. Die Auswertung eines an 
den PC gesandten XOFF kann sich also auch noch durch diesen 
UART-Hardware-Empfangspuffer verzögern.

Abhilfe: Einen ausreichend großen Empfangspuffer vorhalten. Oder Deine 
Portbelegung nochmal genau ansehen, um doch einen Hardwarehandshake zu 
implementieren. Eine Leitung genügt ja.
OP
Danke, für die schnelle Hilfe.
Ich habe schon befürchtet das es so etwas ist.
Die Hardware ändere ich nur sehr ungern, da die Platine
schon geätzt und gelötet ist.
Vielleicht kann man das Problem mit einem Ringpuffer lösen.
Ich werde mich mal einlesen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.