Hallo, ich such ein Stück Assembler-Beispielcode zur Verwendung der seriellen Schnittstelle eines ATtiny (Three-Wire Mode). Im sehr guten AVR-Tutorial auf mikrocontroller.net hab ich leider nur ein UART-Beispiel gefunden.
Hi >ich such ein Stück Assembler-Beispielcode zur Verwendung der seriellen >Schnittstelle eines ATtiny (Three-Wire Mode). Schon mal ins Datenblatt gesehen? MfG Spess
spess53 schrieb: > Schon mal ins Datenblatt gesehen? Aber freilich. :-) Dabei ist mir auch aufgefallen, dass der ATtiny-25-Beispielcode im Kapitel "SPI Master Operation Example" fehlerhaft ist. Eine weitere Frage ist aufgetaucht: Wenn der Master ständig USCK taktet, kann der Slave jederzeit ein Byte senden. Empfängt der Master dann, solange der Slave nichts sendet, Bytes mit dem Wert 0xff? Also, angenommen, der Slave sendet zwischendurch ein Byte mit dem Wert 0x00, dann würde z.B. folgendes beim Master ankommen: 0xff 0xff 0xf0 0x0f 0xff Üblicherweise wird das Byte doch mit einem Startbit (0) eingeleitet. Kann das SPI des ATtiny damit umgehen?
> Wenn der Master ständig USCK taktet [...] Macht er das denn? Bei SPI wird nur dann getaktet, wenn ein Byte raus geht. Sonst bleibt die Clock Leitung im Ruhezustand - je nach Einstellung Low oder High. Die Lesefunktionen schmeissen ein Dummy Byte raus. Somit ist sichergestellt, dass das Bit 0 vom Slave gesendet auch als Bit 0 am Master ankommt, solage keine Clocks verlorengehen oder falsch erkannt werden. Edit: Habe übersehen das synchroner UART gemeint ist. Dort läuft die Clock dauernd, und die Bytes werden wie beim asynchronen UART mit Start- und Stopp- Bit umgeben. > Empfängt der Master dann, solange der Slave nichts sendet, Bytes > mit dem Wert 0xff Bei SPI: Ja, bei synchronem UART: Nein, da kein Start-Bit gesendet wird. > Kann das SPI des ATtiny damit umgehen? Vermutlich nicht; Genaueres steht hoffentlich im Datenblatt; Lies das bitte lieber selbst. Man müsste eventuell das Start- und Stopp-Bit in Software erkennen und die Bits dann zurecht schieben. Hmmm, das klingt eher häßlich.
Hallo Jim, danke für die Hilfe! Jim Meba schrieb: >> Wenn der Master ständig USCK taktet [...] > > Macht er das denn? Bei SPI wird nur dann getaktet, wenn ein Byte raus > geht. Sonst bleibt die Clock Leitung im Ruhezustand - je nach > Einstellung Low oder High. Die Lesefunktionen schmeissen ein Dummy Byte > raus. Gute Plan! Ich denk, so werd ich das auch machen. Anders ist es beim ATtiny vielleicht auch gar nicht hinzubekommen. >> Empfängt der Master dann, solange der Slave nichts sendet, Bytes >> mit dem Wert 0xff > > Bei SPI: Ja, bei synchronem UART: Nein, da kein Start-Bit gesendet wird. > >> Kann das SPI des ATtiny damit umgehen? > > Vermutlich nicht; Genaueres steht hoffentlich im Datenblatt; Lies das > bitte lieber selbst. Man müsste eventuell das Start- und Stopp-Bit in > Software erkennen und die Bits dann zurecht schieben. Hmmm, das klingt > eher häßlich. Stimmt, ist echt umständlich, aber ich hab mir einen ATtiny in den Kopf gesetzt. Also muss ich eben manches zu Fuß erledigen. :-) Denk aber trotzdem, dass das hinzubekommen ist. Ich werde einfach auf ein 0-Bit "lauern" und genau 8 Takte später das empfangene Byte aus dem USI-Datenregister USIDR fischen. Dort sollten ja die empfangenen Bits von rechts nach links reingeschoben werden, also ist das empfangene Byte nach genau 8 Takten vollständig. In den USI-Puffer USIBR werden sie automatisch immer genau dann übernommen, wenn der interne 4-Bit-Zähler des USI (USICNT3..0) auf 0 wechselt. Darauf kann ich mich natürlich nicht verlassen, weil ich nicht wissen kann, wann ein empfangenes Byte "beginnt". Nun hoffe ich, dass ich den Mechanismus begriffen habe... Danke für deine Hilfe! Markus P.S.: Es geht mir um das Beschreiben einer SD-Karte und die entsprechende Kommunikation, die dafür notwendig ist.
Hallo, ich habe jetzt den Thread durchgelesen und einmal lese ich UART senden, dann empfangen und dann wieder SPI (der Stift hat noch keinen Kaffee gekocht). Wenns um UART senden per USI geht (wird übrigens auch der Mechanismus zum empfangen klar), damit habe ich mich letztens auseinandergesetzt. Beitrag "UART per USI" Sollte ich falsch verbunden sein, einfach wieder Auflegen...
Daniel Steffen schrieb: > Sollte ich falsch verbunden sein, einfach wieder Auflegen... Nein, weitere Infos sind immer willkommen. :-) Wenn meine Nachforschungen stimmen, dann bleibt die Antwort einer SD-Karte im Byte-Raster, das vom Master (hier vom Mikrocontroller) vorgegeben wurde. Das heißt, zwischen dem Ende eines gesendeten Kommandos und dem Start einer Antwort sind immer 0, 8, 16 usw. Bits. Das vereinfacht die Sache natürlich. Außer, ich täusch mich... werd mal weiter suchen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.