www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PeDa's Baudratenerkennung


Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Peter Danegger hat in seinem Fastboot-Bootloader eine automatische 
Baudraten-Erkennung verbaut, die ich gerne verstehen möchte.

Der Assemblerfetzen ist allerdings, gelinde gesagt, ein undurchsichtiges 
Massaker... Ich wäre dem Autor unheimlich dankbar, wenn er die 
Funktionsweise etwas näher erläutern könnte :-)

Vielen Dank und Frohes Fest.
Kama



PS: Quelltext gibt es z.B. hier:
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644"

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun,

nach längerem Nachdenken habe ich das Prinzip verstanden. Lediglich 
diese Korrektur ist mir noch schleierhaft:
;------------------------------ correction for USB dongle !!! ------------
  mov  r0, zh
_aba5:
  asr  yl      ; shift signed !
  lsr  r0
  brne  _aba5

Was hat es mit den USB-Dongles auf sich?
In meiner Implementierung habe ich eine solche Korrektur nämlich nicht 
und bemerke, dass die Erkennung sporadisch nicht funktioniert, was 
vermutlich am USB-Dongle liegt :-)


Danke und Gruß!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Baudratenerkennung versucht 2 low-Impulse auszumessen, deren 
Verhältnis etwa 1:4 beträgt. Dadurch verringere ich die Gefahr einer 
Fehlerkennung.
Damit das auch auf AVRs ohne 16Bit-Timer funktioniert, erfolgt das 
Messen durch Zählschleifen.

Zieht man nun ein Toleranzfenster ab, ist dieses absolut. D.h. bei 
kleinen Counts kann die Tolelanz zu groß sein bzw. bei großen Counts zu 
klein. Daher wird bei großen Counts der Wert solange halbiert, bis der 
Countwert unter 8 Bit ist. Damit spart man sich eine Division zur 
Ermittlung der relativen Toleranz.

Insbesondere bei USB-Dongle ist mir eine deutlich höherer Fehler 
aufgefallen im Vergleich zu einer echten UART.
Vermutlich liegt das daran, daß USB glatte MHz-Quarze benötigt, d.h. 
keine Baudratenquarze und dadurch ergibt sich ein Rechenfehler bei der 
Biterzeugung.


Peter

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte also auch sagen, diese Korrektur ist für lahme Taktraten 
gedacht? Denn dort entstünden ja hohe Zählwerte --

Ich versuchs mal zu verstehen:
; Prolog...
; Y hält die Länge des vorigen SPACE
; Z zählt die Länge des aktuellen SPACE vierfach
; --> bei 1:4 landet Y idealerweise bei Null
  sbiw  yl, 1    ;2
  adiw  zl, 4    ;2  count bit time
  brcs  timeout      ;1  time to long
  SKIP_RXD_1      ;1   wait until RXD = 1
  rjmp  _aba4      ;2 = 8


; Z sichern, wird später noch gebraucht für die ermittelte Baudrate
  mov  r0, zh

; Warum jetzt Y und Z vermischt?
; Und warum arithmetisch schieben, es sollte doch halbiert werden?
_aba5:
  asr  yl      ; shift signed !
  lsr  r0
  brne  _aba5


; Kurzform für:
; Wenn der Übertrag erscheint, lagen wir nahe bei Null
  sbiw  yl, TOLERANCE
  adiw  yl, 2 * TOLERANCE

Danke!

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.