mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uart sd-Karte xon/xoff


Autor: Andi S. (laserandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andi S. (laserandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.