Hallo,
wenn ich eine SPI Schnittstelle per Software realisieren möchte, wie
gehe ich da vor?
Ein paar Gedanken habe ich mir schon gemacht, hier die Fragen die mir
gerade im Kopf herumkreisen:
Ich müsste ja eine Clock erzeugen sagen wir mal 1kHz für das Clock
Signal.
Dann muss ich einen weiteren Pin als MOSI toggeln. Benötigt der Pin dann
1kHz Frequenz für die Bits, oder muss ich die Bits mit 8kHz toggeln,
Sprich: muss ich pro Clockflankenwechsel einen Bitflankenwechsel
realisieren, oder muss der MISO ein Byte innerhalb eines Clockzyklus
reinschieben und damit 8x so schnell sein, wie das Clocksignal?
Und noch eine Frage:
Da die Frequenz ja von dem Master vorgegeben wird, müsste es doch egal
sein, ob die Taktrate stets gleichbleibend ist oder das eine oder andere
Bit länger dauert als das andere, ist das richtig?
mfg
BUS schrieb:> Benötigt der Pin dann> 1kHz Frequenz für die Bits, oder muss ich die Bits mit 8kHz toggeln,> Sprich: muss ich pro Clockflankenwechsel einen Bitflankenwechsel> realisieren, oder muss der MISO ein Byte innerhalb eines Clockzyklus> reinschieben und damit 8x so schnell sein, wie das Clocksignal?
Warum guckst du nicht einfach in das Datenblatt eines IC mit SPI
Interface? Da findest du die tollsten Zeitdiagramme zu den Signalen. Und
lass dich nicht davon ins Boxhorn jagen, dass die mitunter
unterschiedlich aussehen - es gibt verschiedene SPI Modi.
Du legst das 1. Bit, üblicherweise das Highbit, an deinen Mosi-Pin, dann
wackelst du einmal am Clock, nächstes Bit, Clock wackeln usw..
Nach 8 Bits und 8 Clocks ist dein Byte drüben.
Teste das mit einem 595er Schieberegister, einmal Latch Up und du hast
dein erstes Erfolgserlebnis.
Wie schon gesagt: SPI geht von 0Hz bis xMHz, solange der Empfänger
mitkommt. Auch muss der Takt nicht konstant sein: wichtig ist nur, dass
man bei der passenden Flanke des Taktes das richtige Level an Data hast.
Hier ein Schnipsel eines Masters ohne etwas zu empfangen.
Thomas E. schrieb:> wackelst du einmal am Clock, nächstes Bit, Clock wackeln usw..> Nach 8 Bits und 8 Clocks ist dein Byte drüben.
Hähhh? An der Uhr wackeln und nach 8 runtergefallenen Uhren ist mein
Byte drüben? Oder am Takt wackeln? Ist so ein Takt nicht eher was
regelmäßiges und nicht von Wackelkontakten bestimmt.
Man kann ja nur hoffen, daß der TE son verquasten und Takflankenfreien
Beitrag ignoriert.
BUS schrieb:> Leute, so unkonkret waren meine Fragen nun wirklich nicht, dass hier> dieser Ton angeschlagen werden müsste.
Deine Frage zeigt, daß Du schlicht und einfach unhöflich bist weil Du
andere das machen lassen willst was Deine eigene Aufgabe ist: sich erst
einmal selber schlau machen:
Denn in defakto jedem Datenblatt eines SPI-tauglichen Teils ist auf den
ersten Blick ersichtlich wie das Timing vom SPI aussieht. Und wenn Du
zufälligerweise im www das eine Datenblatt gefunden hast in dem das
nicht drinnensteht schaust Du dir das in der Wikipedia an.
Daher - selbst wenn die Frage im ersten Moment sehr konkret war - sie
ist auf den 2. Blick ziemlich unhöflich.
MiWi
Ich finde die Frage nicht unhöflich: es zwingt niemanden, sich diesen
Thread anzusehen oder gar zu antworten.
Es ist eben eine Anfängerfrage. Da kann man einen entsprechenden Hinweis
geben oder einfach der Geschichte seinen Lauf lassen ...
falscherFuß schrieb:> Hähhh? An der Uhr wackeln und nach 8 runtergefallenen Uhren ist mein> Byte drüben? Oder am Takt wackeln? Ist so ein Takt nicht eher was> regelmäßiges und nicht von Wackelkontakten bestimmt.
Nein, beim Software-SPI nicht.
Du kannst mit 8MHz anfangen und mit 8Hz beenden, es macht absolut
keinen Unterschied, ausser in der Übertragungszeit, natürlich.
falscherFuß schrieb:> Man kann ja nur hoffen, daß der TE son verquasten und Takflankenfreien> Beitrag ignoriert.
Nein, man kann nur hoffen, dass der TO deinen Beitrag ignoriert.
Wilhelm M. schrieb:> Es ist eben eine Anfängerfrage. Da kann man einen entsprechenden Hinweis> geben oder einfach der Geschichte seinen Lauf lassen ...
Eher eine Hausaufgabe, wenn man den Nachbarthread berücksichtigt.
Thomas E. schrieb:> Du legst das 1. Bit, üblicherweise das Highbit, an deinen Mosi-Pin, dann> wackelst du einmal am Clock, nächstes Bit, Clock wackeln usw..> Nach 8 Bits und 8 Clocks ist dein Byte drüben.
Thomas, das ist ja wohl die allergeilste Beschreibung die ich je las.
MiWi schrieb:> Deine Frage zeigt, daß Du schlicht und einfach unhöflich bist weil Du> andere das machen lassen willst was Deine eigene Aufgabe ist: sich erst> einmal selber schlau machen:
Grundsätzlich sollte man sich schlau machen. Aber deine Aussage zeigt
nur, dass du entweder noch sehr unreif und jung bist oder dein Weitblick
nicht so sehr weit reicht.
Gerade ein Anfänger braucht doch einmal einen richtigen Impuls zum
suchen der richtigen Dokumente. Es gibt so unendlich viel, über jede
Sache zu lesen, da weiß ein Anfänger doch oft gar nicht wo er gucken
soll.
F. F. schrieb:> MiWi schrieb:>> Deine Frage zeigt, daß Du schlicht und einfach unhöflich bist weil Du>> andere das machen lassen willst was Deine eigene Aufgabe ist: sich erst>> einmal selber schlau machen:>> Grundsätzlich sollte man sich schlau machen. Aber deine Aussage zeigt> nur, dass du entweder noch sehr unreif und jung
Aha.
> bist oder dein Weitblick nicht so sehr weit reicht.
Aha.
>> Gerade ein Anfänger braucht doch einmal einen richtigen Impuls zum> suchen der richtigen Dokumente. Es gibt so unendlich viel, über jede> Sache zu lesen, da weiß ein Anfänger doch oft gar nicht wo er gucken> soll.
Findest Du es wirklcih schwierig mit Google nach SPI zu suchen, den Link
der Wikipedia zu öffnen und dann die in den Commons gezeigten
Timingdiagramme anzuschauen und darüber nachzudenken, wie das gemeint
ist?
Ich erwarte von meinen Schülern, daß sie sich vorher mit den Fragen erst
einmal selber beschäftigt haben und die techn Resource Internet
entsprechend genutzt haben.
Mag sein, daß das für Dich schon zu sehr fordernd ist den TO
aufzufordern zu zeigen was er schon hat, für mich ist es eine (durchaus
grantige) Hilfe zu Selbsthilfe.
Für mich sind solche Fragen "Mama ich will" und dann rennt die Meute und
der TO schaut entspannt auf seinem PC zu .... funktioniert auch wie man
an dem Thread sieht.
BUS hat sich bis dato mit keinerlei Rückfrage wieder gemeldet...
MiWi
Marc V. schrieb:> falscherFuß schrieb:>> Hähhh? An der Uhr wackeln und nach 8 runtergefallenen Uhren ist mein>> Byte drüben? Oder am Takt wackeln? Ist so ein Takt nicht eher was>> regelmäßiges und nicht von Wackelkontakten bestimmt.>> Nein, beim Software-SPI nicht.> Du kannst mit 8MHz anfangen und mit 8Hz beenden, es macht absolut> keinen Unterschied, ausser in der Übertragungszeit, natürlich.
Du bist auch eher von übersichtlichem Verständnis geplagt oder?
falscherFuß schrieb:> Du bist auch eher von übersichtlichem Verständnis geplagt oder?
Was verstehst du an der Aussage nicht?
Wer im Glaushaus sitzt ...
Nochmals, es braucht keine verlinkten Seiten, oder so'n quatsch.
CS=0;
Clock=0;
Data=(Daten and $01);
clock=1;
Daten=shiftleft(Daten);
clock=0;
Data=(Daten and $01);
clock=1;
Daten=shiftleft(Daten);
clock=0;
..
fertig. Kannst mit dem Timingdiagramm im Datenblatt vergleichen.
Noch nicht Rentner schrieb:> Nochmals, es braucht keine verlinkten Seiten, oder so'n quatsch.>> CS=0;> Clock=0;> Data=(Daten and $01);> clock=1;> Daten=shiftleft(Daten);> clock=0;> Data=(Daten and $01);> clock=1;> Daten=shiftleft(Daten);> clock=0;> ..
Wär nicht schlecht, wenn du für unsere Anfänger noch dazuschreiben
würdest, welcher der vier Moden das sein soll und ob LSB oder MSB
zuerst.
> fertig. Kannst mit dem Timingdiagramm im Datenblatt vergleichen.
Welches Datenblatt? Wurde vom TE schon ein Datenblatt erwähnt?
falscher Fuß schrieb:> Noch nicht Rentner schrieb:>> Nochmals, es braucht keine verlinkten Seiten, oder so'n quatsch.>> Wär nicht schlecht, wenn du für unsere Anfänger noch dazuschreiben> würdest, welcher der vier Moden das sein soll und ob LSB oder MSB> zuerst.
Wär nicht schlecht, wenn man nur über Sachen reden würde, von
denen man wenigstens ein bisschen Ahnung hat.
Und das gilt für euch beide.
Für dich:
Wenn man nach links schiebt, ist das MSB zuerst.
Für Noch nicht Rentner:
Aber, wenn man nach links schiebt, wird kein AND mit 0x01 ausgeführt.
In Assembler wird überhaupt kein AND benötigt, in C wird das dann mit
0x80 und bestimmt nicht mit 0x01 gemacht.
Marc V. schrieb:> Für dich: (ich glaube er meint mich)> Wenn man nach links schiebt, ist das MSB zuerst.>> Für Noch nicht Rentner:> Aber, wenn man nach links schiebt, wird kein AND mit 0x01 ausgeführt.> In Assembler wird überhaupt kein AND benötigt, in C wird das dann mit> 0x80 und bestimmt nicht mit 0x01 gemacht.
Wenn man nach rechts schiebt ist das dann LSB zuerst? und würde dann
mit 0x01 in C verknüpft?
Ich kann mir beim UP nicht vorstellen, dass es hier jemals um eine
Realisierung gegangen ist. Es kann nur eine Hausaufgabe sein. Das jemand
einen SPI in Software implementieren will und fragt, ob 8Bit während
einer Clock rausgehauen werden, halte ich für unwahrscheinlich.
Die Antworten sind daher:
> Dann muss ich einen weiteren Pin als MOSI toggeln. Benötigt der Pin dann> 1kHz Frequenz für die Bits, oder muss ich die Bits mit 8kHz toggeln
weder noch. Für das nächste Bit wird nur getoggelt, wenn es anders ist.
Und Clock wird je Bit 2 Mal getoggelt. Maximal hat der MOSI damit die
halbe Frequenz des Clock-Signals.
> Sprich: muss ich pro Clockflankenwechsel einen Bitflankenwechsel> realisieren, oder muss der MISO ein Byte innerhalb eines Clockzyklus> reinschieben und damit 8x so schnell sein, wie das Clocksignal?
beides nicht. Für jedes Bit brauchst Du 2 Clockflankenwechsel, während
ein Bit 0 oder 1 Flankenwechsel hat.
> Und noch eine Frage:> Da die Frequenz ja von dem Master vorgegeben wird, müsste es doch egal> sein, ob die Taktrate stets gleichbleibend ist oder das eine oder andere> Bit länger dauert als das andere, ist das richtig?
Ja.
falscherFuß schrieb:> An welcher Aussage?Marc V. schrieb:> Du kannst mit 8MHz anfangen und mit 8Hz beenden, es macht absolut> keinen Unterschied, ausser in der Übertragungszeit, natürlich.