Hallo,
ich möchte selbst etwas mit dem auslesen der Register oder schreiben der
Fuses mit UDPI basteln. Im Datenblatt steht auch alles sehr schön
beschrieben und ich habe mir das recht einfach vorgestellt (Vielleicht
auch zu einfach)..
Die Hardware Beschaltung funktioniert. Ich konnte mit pyudpi.py den
Controller Problemlos beschreiben. Habe mir das Programm mal angesehen
bin aber noch nicht dahinter gekommen wie das ganze funktioniert.
Habe mir in C unter in Linux etwas gebastelt welches eine erste
Instruktion sendet und auf die Rückgabe wartet nur mal um zu testen ob
überhaupt was geht. Empfangen habe ich nur das was ich gesendet habe
aber nichts vom Controller.
Eingestellt habe ich den UART so wie im Bild im Punkt Data Frame.
Gesendet habe ich dann hintereinander: (SYNC)85,(LDS)0,(ADDR)0
Habe auch rumprobiert mit das ich ein Wort empfange und oder sende, auch
einen anderen Befehl wie STS welcher ja ein ACK zurück geben sollte
welches ich nicht erhalten habe.
Was vielleicht hier noch wichtig wäre, wäre das senden eines Breaks, was
ich aber in C nicht weiß, wie sowas zu realisieren ist..
Hat das jemand von euch schon mal gemacht? Habt ihr da Ideen dazu?
Vielen dank.
Mfg
BesorgterBürger
> Hat das jemand von euch schon mal gemacht?
Ja. Allerdings auf einem ATmega1284P bzw. AVR128DA28 in Assembler.
> ich habe mir das recht einfach vorgestellt
Nun ja, wenn man sich sehr genau an das Datenblatt hält, dann klappt das
auch - nach vielen Fehlversuchen, 'serial programming' der älteren AVR8
ist dagegen ein Kinderspiel.
> Habt ihr da Ideen dazu?
Was genau ist nun die Frage?
> senden eines Breaks ... wie sowas zu realisieren
Ist schon eine Weile her - man muss dafür auf 300 Bd heruntergehen;
müsste ich erst nachschauen.
S. Landolt schrieb:>> Hat das jemand von euch schon mal gemacht?> Ja. Allerdings auf einem ATmega1284P bzw. AVR128DA28 in Assembler.
Primär bezog sich die frage auf das Auslesen des Flashs Register
Fuses oder das beschreiben dieser. Da hilft mir der Assembler recht
wenig ^^
S. Landolt schrieb:> Nun ja, wenn man sich sehr genau an das Datenblatt hält, dann klappt das> auch - nach vielen Fehlversuchen, 'serial programming' der älteren AVR8> ist dagegen ein Kinderspiel.
Ich weiß, klappte sogar auf anhieb.. Hilft mir aber bei UDPI nicht viel.
S. Landolt schrieb:> Was genau ist nun die Frage?
Ich bekomme keine Rückantwort vom Controller. Warum? Hab ich irgendwas
überlesen? Fehlt ein Byte? In meiner Übertragung ist 9600B eingestellt,
sollte ja nicht zu schnell sein.
S. Landolt schrieb:> Ist schon eine Weile her - man muss dafür auf 300 Bd heruntergehen;> müsste ich erst nachschauen
Hab ich in dem Python Skript auch irgendwas gesehen aber habe nicht
verstanden was da dann gesendet oder gemacht wurde..
> 9600B eingestellt, sollte ja nicht zu schnell sein
Ich arbeite mit 200 kBd.
> habe nicht verstanden was da dann gesendet oder gemacht wurde..
'even parity, 2 stop-bits, 8 bits', Null-Character bei 300 Bd, ergibt
ein Low von 30 ms, verlangt wird "Recommended BREAK Character Duration
... 24.60 ms".
> Empfangen habe ich ... nichts vom Controller> Gesendet habe ich dann hintereinander: (SYNC)85,(LDS)0,(ADDR)0
Ohne vorangestelltes BREAK, wie in 30.3.2.1 UPDI Enable beschrieben,
wird das wohl nicht klappen.
S. Landolt schrieb:> 'even parity, 2 stop-bits, 8 bits', Null-Character bei 300 Bd, ergibt> ein Low von 30 ms, verlangt wird "Recommended BREAK Character Duration> ... 24.60 ms".
Kein Erfolg leider..
Veit D. schrieb:> übrigens kannst dir auch gern den Code hier anschauen, falls das> leichter lesbar sein sollte.>> https://github.com/ElTangas/jtag2updi
Danke, schaue ich mir an.
S. Landolt schrieb:> Beispiel: lesen der Fuses SYSCFG0 und SYSCFG1, liefert C0 und 07:> alle Werte in hex, '/' bedeutet BREAK
Hab nun mal eine andere Sprache (Autoit) getestet falls ich evtl.
Programmierfehler gemacht habe. Allerdings auch kein Erfolg.. Ich poste
den Primitiven Code mal da die Sprache doch sehr offensichtlich ist,
vielleicht entdeckt ja jemand der Erfahrung mit updi hat etwas..
Habe die Ausgabe mal angefügt, als Eingabe habe die von dir Angegebenen
Fuses mal probiert. Keine Spur vom Controller. Mittels pyupdi habe ich
kurz vorhin nochmal getestet ob die Hardware noch stimmt, keine
Probleme, konnte etwas Auslesen..
Im Anhang ist noch zu sehen das ich versucht habe die zweite Fuse direkt
danach anzusprechen. Die letzten zwei Zeilen mit den '00000000' sind
nicht vom Controller.
Soweit ich es in pyupdi und https://github.com/ElTangas/jtag2updi
verstanden habe, machen sie es sehr ähnlich, nur anders, da es bei mir
nicht geht ^^
Was zeigt denn Ihr Protokoll-Programm, wenn Sie mit diesem pyupdi die
Fuses lesen?
Notfalls muss man mit Logic-Analyzer oder Speicheroszilloskop
protokollieren, auch wenn das etwas langwierig & mühsam wird.