Hi, ich benutze im Moment Opencore's I2C Core um von einem FPGA über I2C Daten an ein Arduino zu schicken. Als Test möchte ich folgenden Wert übertragen: (8 Bit)11111110 Wobei (7 Bit)1111111 die Adresse des Arduino's ist und (1 Bit) 0 zur Identifikation des Schreib- oder Lesezugriffs ist. Bei der Simulation werden mir aber 10 Bits angezeigt. Wenn ich es richtig verstanden habe, kann man in der Simulation die Start-Kondition sehen, dann meine Daten also 11111110 und dann die Stop-Kondition. Somit 10 Bit statt 8. Sehe ich das richtig? Wenn ja, ist es okay wenn nach 8 Bits immer die Stop-Kondition generiert wird? Z.b. Daten (10101010) an die Adresse (11111110) schicken: Wenn ich 11111110 und 10101010 senden möchte würde das so aussehen: Start, 11111110, Stop, Start, 10101010, Stop Oder muss es so aussehen? Start, 11111110, 10101010, Stop Ich habe absichtlich das Acknowledge-Signal des Empfängers weggelasen. P.s in der Simulation kann 'Z' als eine '1' gesehen werden. Lg
Isabelle schrieb: > Bei der Simulation werden mir aber 10 Bits angezeigt. > [...] > Ich habe absichtlich das Acknowledge-Signal des Empfängers weggelasen. Dein Screenshot zeigt jedoch Start-Condition, 8 Datenbits und Not-Acknowledge. Eine Stop-Condition ist nicht zu sehen, da fehlt also noch etwas.
Isabelle schrieb: > Oder muss es so aussehen? > Start, 11111110, 10101010, Stop Ja genau, die Stop-Condition gehört ans Ende der Übertragung; bereits nach der Adresse ergibt sie wenig Sinn. Siehe auch die Doku zum I2C Core (4.2).
Burkhard K. schrieb: > bereits > nach der Adresse ergibt sie wenig Sinn. nicht wenn man einfach nur überprüfen will, ob ein Device auf eine Adresse hört
tja schrieb: > Burkhard K. schrieb: >> bereits >> nach der Adresse ergibt sie wenig Sinn. > > nicht wenn man einfach nur überprüfen will, ob ein Device auf eine > Adresse hört Isabelle schrieb: > Ich habe absichtlich das Acknowledge-Signal des Empfängers weggelasen. Das ACK/NACK kannst Du nicht einfach weglassen, damit wird immer das 9. Bit belegt (entweder der Slave antwortet oder halt nicht, das Bit selbst muss immer da sein). Wenn Du nur ein "Ping" machen willst (schauen ob der Slave da ist), musst Du nach dem 9. Bit das SDA vom Master nach dem 9. SCL-Zyklus bei tiefem SCL wieder tief ziehen und erst nachdem Du den Clock hochgelassen hast auch das SDA wieder hoch lassen (was dann die Stop-Condition ist).
:
Bearbeitet durch User
Ich sehe, wir haben "I2C-Wochen". Hat wieder irgendein Prof eine
Hausaufgabe gestellt?
>Ich habe absichtlich das Acknowledge-Signal des Empfängers weggelasen.
Wozu? Das I2C Protokoll sieht das bekanntlich vor, ohne eine Antwort
kann deine Schaltung nicht laufen. Du brauchst eine Gegenstelle, die
ebenfalls I2C kann. OpenCores hat einen perfekten I2C-Core. Haben wir
hier eingebaut.
Beitrag #5084884 wurde von einem Moderator gelöscht.
P. K. schrieb: > tiefem SCL wieder tief ziehen und erst nachdem Du den Clock hochgelassen Da stimmt aber was nicht, der Takt muss high sein, wann das SDA wieder hochgezogen wird. Ist das Gegenteil vom Start. >10 Der OC-Controller hat meines Wissens einen bug, unterstüzt angeblich die 10 Bit-Geschichte nicht richtig,
Ist denn nicht der Master der, welcher eine Stop-Bedingung generieren kann? Oder zieht der Slave den Takt runter und es wird nur falsch vom TE verstanden?
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.