Forum: FPGA, VHDL & Co. I2C generiert sofort Stop-Kondition?


von Isabelle (Gast)


Angehängte Dateien:

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

von Pat A. (patamat)


Lesenswert?

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.

von Burkhard K. (buks)


Lesenswert?

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).

von tja (Gast)


Lesenswert?

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

von P. K. (pek)


Angehängte Dateien:

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).

: Bearbeitet durch User
von P. K. (pek)


Angehängte Dateien:

Lesenswert?

Hier der entsprechende Spec-Part.

von shanwar (Gast)


Lesenswert?


von Chefkritiker (Gast)


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.
von Edi M. (Gast)


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,

von Michael W. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.