Datum: 10.05.2007 14:13
Hallo! Ich habe eine serielle Konsole als Befehlskonsole gestaltet. Die funktioniert prima. Es müssen jedoch auch binäre Daten zum Atmel übertragen werden. Dazu entwarf ich ein Kommando, welches auf diese binären Daten wartet. Die Schnittstelle arbeitet mit 9600 Baud, 8N1 (Takt ist extern). Nun schreibe ich in minicom das Kommando und drücke CTRL+A Y zum "Paste file". Wähle eine nur 57 Byte Textdatei aus. Diese wird nicht vollständig übertragen. Mitten drin fehlen mal ein paar Byte. Dadurch wartet dann der Atmel immernoch auf Eingaben, minicom ist aber schon fertig. Was mache ich falsch? Stimmt irgendein Timing nicht? Hier mal ein Auszug aus dem Code, um mal zu veranschaulichen, was ich meine:
for (uint32_t i=0; i<length; i++) { if (i%16 == 0) { // Adressen alle 16Byte anzeigen uart_puts_p(PSTR("\n")); uart_putdw_hex(i); uart_puts_p(PSTR(": ")); } // Zeichen einlesen uint8_t c = uart_getc(); // Ausgeben, wenn druckbar if (c > 0x1F && c < 0x7F) uart_putc(c); else uart_putc('.'); // TODO: Mit den Daten was machen } |
Grüße!
Datum: 10.05.2007 14:28
> Was mache ich falsch? Stimmt irgendein Timing nicht?
Ich wette du hast kein Handshaking implementiert.
Dadurch 'überrent' der Sender den Empfänger.
Datum: 10.05.2007 14:42
Karl heinz Buchegger wrote:
> Ich wette du hast kein Handshaking implementiert.
Wette gewonnen.
Also werde ich wohl XON/XOFF implementieren müssen. Da stellt sich mir
jetzt die Frage, welchen ASCII-Code hat XON bzw. XOFF und wie übertrage
ich diese ASCII-Zeichen dann, wenn diese damit belegt sind? Dafür muss
es doch schon einen Standard geben, den minicom und alle anderen
Terminals nutzen. Wie heißt der und wo kann ich den nachschlagen?
Grüße und vielen Dank!
Datum: 10.05.2007 14:50
Günther Frings wrote: > Karl heinz Buchegger wrote: >> Ich wette du hast kein Handshaking implementiert. > > Wette gewonnen. > > Also werde ich wohl XON/XOFF implementieren müssen. Da stellt sich mir > jetzt die Frage, welchen ASCII-Code hat XON bzw. XOFF XON 17 = 0x11 (Ctrl-Q) XOFF 19 = 0x13 (Ctrl-S) Siehe eine ASCII tabelle deiner Wahl, zb. http://www.tcp-ip-info.de/tcp_ip_und_internet/ascii.htm > und wie übertrage > ich diese ASCII-Zeichen dann, wenn diese damit belegt sind? Gar nicht. XON/XOFF ist keine gute Wahl, wenn * du einen der Kommunikationspartner nicht verändern kannst. * du unbedingt eine Binäre Übertragung brauchst > Dafür muss > es doch schon einen Standard geben, den minicom > und alle anderen Terminals nutzen. Wie heißt der und wo kann > ich den nachschlagen? Manchmal können Terminalemulationen Dinge wie 'Kermit' oder 'X-Modem' oder 'Z-Modem'. Das sind einfach nur Protokolle wie eine Binärdatei über eine 'Text-Leitung' übertragen werden soll. Wenns den unbedingt binäre Übertragung sein soll, ist das Einfachste du rüstest ein RTS/CTS Hardware-Handshake nach.
Datum: 10.05.2007 14:53
Sorry: Mit XModem kannst du keine Binärdaten bei XON/XOFF Handshake übertragen. Die anderen beiden Protokolle müssten das können.
Datum: 16.05.2008 19:35
Dank Google bin ich zufällig über dieses alte Thema gestolpert, da ich das gleiche "Problem" habe. Es scheint aber nicht am "Überrennen" des Empfängers zu liegen, sondern daran, dass Minicom eine 0 (also binär, nicht das ASCII Zeichen) als Ende der Übertragung ansieht. Gibt es eine Möglichkeit, mit Minicom kleine Binärdateien 1:1 zu übertragen, ohne dass die Software sich für die gesendeten Daten "interessiert"? (Alternativ gerne auch Empfehlungen für andere Linux-Terminalprogramme ..) Danke und Gruß, Florian
Datum: 16.05.2008 20:00
Schon mal send file (^AS) im ASCII-Modus probiert?
Datum: 16.05.2008 20:05
yalu wrote:
> Schon mal send file (^AS) im ASCII-Modus probiert?
Ja, leider das gleiche Verhalten wie bei "Paste File" :(
Datum: 17.05.2008 12:26
Okay, falls jemand mal das gleiche Problem hat, so gehts mit Linux Bordmitteln: Konfiguration der Schnittstelle ttyS0 auf Übertragung von "Rohdaten" ohne Echo und 9600 Baud: stty -F /dev/ttyS0 9600 raw -echo Jetzt kann man einfach per 'cat /dev/ttyS0 > antwort.dat' die Meldungen des Controllers entgegennehmen und per 'cat meinkommando.dat > /dev/ttyS0' beliebige Daten (im Beispiel den Inhalt der Datei meinkommando.dat) an den Mikrocontroller schicken.
Datum: 17.05.2008 12:53
Hallo, ich habe mich gerade wegen binär-Daten zum AVR für XModem entschieden in der alten Originalversion. Vorteil: kein Hardware-Handshake nötig und auf große Bufferverwaltungen auf dem AVR kann man auch verzichten. Ein 128-Byte Buffer, dann in Ruhe verarbeiten und dann das ACK schicken, damit die nächsten 128 Byte kommen. SOH und Blocknummer bearbeite ich gleich beim Empfang, die Prüfsumme, wenn sie am Ende ankommt. "In Ruhe verarbeiten" heißt natürlich, daß es in der TimeOut-Zeit von XModem passieren muß, die ist aber normalerweise so lang, daß der AVR noch nebenbei Karten spielen könnte. Nachteil im Moment ist, daß der AVR die Übertragung mit NAK starten muß. Da ich das nur nehme, um selten Daten in einen SPI-Flash am AVR zu tragen, stört mich das nicht weiter. Ich benutze TeraTerm unter Windows, da ist mein Ablauf zur Zeit: AVR Reset mit festgehaltener Taste -> AVR geht in Flash-Routine und meldet über UART beim Loslassen der Taste, daß er Daten will. In TeraTerm XModen->Send und Datei auswählen. Dann startet XMODEM und wartet. Taste am AVR drücken, der sendet NAK und es geht los. Hat für mich den Vorteil, daß es sich überall benutzen läßt und im AVR wenig Aufwand erfordert. Gruß aus Berlin Michael
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel