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...)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.