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.