Forum: Mikrocontroller und Digitale Elektronik Max. Freq I2C erzwingen


von Michael Dierken (Gast)


Angehängte Dateien:

Lesenswert?

Nabend.


Ich habe mir grad einen Software I2C Master geschrieben und habe dazu 
nun eine Frage.

Die meisten Chips undterstützen nur 400kHz, wenn der Master dennen zu 
schnell ist können sie diesen Ausbremsen indem sie die SCL auf 0 ziehen.

Halten sich alle Chips daran oder hattet ihr schonmal welche die das 
Ignoriert haben.


Mein Vorhaben:
Ohne auf Timing zu achten die Daten raushauen und bevor SCL wieder auf 
Low gezogen wird warten bis SCL auf High ist.


Bild: 5V-2µs/Div
      8MHz ATmega, 10kOhm PullUp

von dunno.. (Gast)


Lesenswert?

Michael Dierken schrieb:
> und bevor SCL wieder auf
> Low gezogen wird warten bis SCL auf High ist.

wiederspricht sich das nicht irgendwie?

mfg

von Michael Dierken (Gast)


Lesenswert?

Widerspricht sich nicht.

Ich schalte den Ausgang des µC Hochohmig. Dadurch wird SCL über den 
PullUp auf High gezogen, sollte der Slave bereits fertig sein.
Ist der Slave nochnicht bereit das nächste Bit zu empfangen so zieht er 
die Datenleitung auf Masse.

Wenn ich nun zwar den Ausgang hochohmig habe aber dennoch Masse messe 
weiß ich das der Slave nochnicht so weit ist und sollte ihn hochohmig 
lassen.
Wenn ich nun einen High Pegel messe weiß ich das der Slave fertig ist 
und ich anfangen kann das nächste Bit zu senden.

von spess53 (Gast)


Lesenswert?

Hi

>10kOhm PullUp

Mach dich erst mal mit I2C vertraut.

MfG Spess

von Michael Dierken (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>10kOhm PullUp
>
> Mach dich erst mal mit I2C vertraut.
>
> MfG Spess


Da bin ich gerade bei (deswegen auch dieses Projekt).

Die Dimension des PullUp habe ich von hier:
Beitrag "Re: Benötigt der i2c-Bus einen Pull-UP"

von spess53 (Gast)


Lesenswert?

Hi

>Die Dimension des PullUp habe ich von hier:
>Beitrag "Re: Benötigt der i2c-Bus einen Pull-UP"

Was willst du mir Second Hand Informationen?

http://www.nxp.com/documents/other/39340011.pdf

MfG Spess

von XYZ (Gast)


Lesenswert?

3.9 Clock stretching

Clock stretching pauses a transaction by holding the SCL line LOW. The 
transaction cannot continue until the line is released HIGH again. Clock 
stretching is optional and in fact, most slave devices do not include an 
SCL driver so they are unable to stretch the clock.

On the byte level, a device may be able to receive bytes of data at a 
fast rate, but needs more time to store a received byte or prepare 
another byte to be transmitted. Slaves can then hold the SCL line LOW 
after reception and acknowledgment of a byte to force the master into a 
wait state until the slave is ready for the next byte transfer in a type 
of handshake procedure (see Figure7).

On the bit level, a device such as a microcontroller with or without 
limited hardware for the I2C-bus, can slow down the bus clock by 
extending each clock LOW period. The speed of any master is thereby 
adapted to the internal operating rate of this device.

In Hs-mode, this handshake feature can only be used on byte level (see 
Section5.3.2).

dat sollte doch dann klar sein oder?

von Michael Dierken (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Die Dimension des PullUp habe ich von hier:
>>Beitrag "Re: Benötigt der i2c-Bus einen Pull-UP"
>
> Was willst du mir Second Hand Informationen?

Dachte den Aussagen des falk kann man ruhig etwas vertrauen.

>
> http://www.nxp.com/documents/other/39340011.pdf
>
> MfG Spess


Muss ich morgen mal gucken wenn ich wieder am Arbeitsplatz sitze ... 
musste mein Lappi neu machen und habe noch kein Adobe drauf. Runterladen 
kann ich vergessen da dieser "Client" nun 4x gesacht hat das es ihm zu 
lange dauert und er die Daten wegwirft und abbricht.


XYZ schrieb:
> dat sollte doch dann klar sein oder?

Jupp .. einfach raushauen kann gut gehen, muss es aber in den meisten 
Fällen nicht.
Dann werde ich einfach ne 15Takte Warteschleife einbauen die das ganze 
auf 400kHz begrenzt.

von Michael D. (etzen_michi)


Lesenswert?

1
The supply voltage limits the minimum value of resistor Rp due to the specified minimum sink current of 3 mA at VOLmax = 0.4 V for the output stages.
2
VDD as a function of Rp min is shown in Fig.37. 
3
The required noise margin of 0.1VDD for the LOW level, limits the maximum value of Rs.
4
Rs max as a function of Rp is shown in Fig.38.
5
The bus capacitance is the total capacitance of wire, connections and pins. This capacitance limits the maximum  value of Rp due to the specified rise
6
time. Fig.39 shows Rp max as a function of bus capacitance.
7
8
The maximum HIGH level input current of each input/output connection has a specified maximum value of 10 mA. 
9
Due to the required noise margin of 0.2 VDD for the HIGH level, this input current limits the maximum value of Rp. 
10
This limit depends on VDD. The total HIGH level input current is shown as a function of Rp max


Wenn ich das nun richtig verstanden habe:

Rp muss ausreichend klein sein dass die RiseTime eingehalten wird.

Daher das ich zwei Geräte am Bus habe und die maxRiseTime bei 300ns 
liegt:

1/(2pi*3,33MHz*20pF) = ~2,5kOhm


Desweiteren dürfen bei einer Last von 10µA pro Gerät über Rp nicht mehr 
als 0,2V abfallen:

0,2V/20µA = 10kOhm


Was die Serienwiderstände angeht verstehe ich die Bedingungen nicht 
ganz.

Bei einem Mindeststrom von 3mA dürfen nicht mehr als 0,4V abfallen.
Der benötigte Rauschabstand für den Low Level beträgt 0,1V und begrenzt 
die größe vom Serienwiderstand.

Heißt das:

Mindestens: 5V/3mA = 1,66kOhm
Maximal: So das Low min. 0,1V unter dem Höchsten als Low erkannten Pegel 
liegt.


Habe ich da irgendwelche Fehler drinne oder habe ich das richtig 
verstanden?

Quelle: Obriges .pdf Seite 39

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.