www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Problem mit Binärübertragung - minicom dran schuld?

Autor: Günther Frings (taraquedo)
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!
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
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.
Autor: Günther Frings (taraquedo)
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!
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
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.
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
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.
Autor: Florian Haskamp (trapperjohn)
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
Autor: yalu (Gast)
Datum: 16.05.2008 20:00

Schon mal send file (^AS) im ASCII-Modus probiert?
Autor: Florian Haskamp (trapperjohn)
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" :(
Autor: Florian Haskamp (trapperjohn)
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.
Autor: Michael U. (amiga)
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





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net