I2C generiert sofort Stop-Kondition?

Gast #5041591
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
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
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
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,
Gast #5115282
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.