I2C generiert sofort Stop-Kondition?

Gast #5041591
Lesenswert?

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
Angehängte Dateien:
#5043661
Lesenswert?

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).
Angehängte Dateien:
Gast #5084772
Lesenswert?

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.
Gast #5113393
Lesenswert?

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,

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren