Forum: Mikrocontroller und Digitale Elektronik I2C Glitch-Filter beeinflusst Baudrate?


von Alexander I. (daedalus)


Lesenswert?

Hallo,

ich habe ein Array aus 24 Kinetis (Cortex M0+) die über I2C mit 100kbit 
kommunizieren sollen. Einer ist der Master, 23 sind immer Slave. 
Buslänge ist ungefähr 20cm auf einer Platine, Pullups sind 1,8k. Jeder 
Kinetis belastet den Bus mit 7pF => Summe 168pF.

Die Kommunikation läuft soweit fehlerfrei, bei der Nachkontrolle der 
Signale mit dem Oszi ist mir aber aufgefallen, dass ich keine 100kbit, 
sondern nur 83kbit habe!

Zunächst hatte ich die Timebase, schwache PullUps, falscher Prescaler, 
Clockstretching, usw. im Verdacht, aber das kann ich alles ausschließen 
- ist korrekt eingestellt und passiert auch wenn nur der Master auf der 
Leitung funkt.

Ich habe dann ein wenig mit dem Glitch Filter des I2C-Moduls 
herumgespielt. Hier kann ich bei gegebenem I2C-Modultakt (24 MHz) in 16 
Schritten zwischen 0 und 625ns einstellen. Ich habe festgestellt, dass 
der Glitch-Filter sich direkt auf die Baudrate auswirkt. Wenn ich z.B. 
auf 625ns einstelle, messe ich nur noch besagte 83kbit. Je weiter ich 
den Glitch Filter runter drehe, desto näher komme ich an die 100kbit 
heran. Deaktiviere ich ihn ganz, habe ich 99,4kbit rausgemessen.

Wenn ich das Clocksignal ganz aufdrehe, dann sehe ich nach der negativen 
Flanke auch einen klitzekleinen Spannungsversatz (ca 0,2V) der ungefähr 
700ns lang ist (bei eingestellten 625ns) bevor der "normale" Low Pegel 
erreicht wird.

Ich dachte der Glitchfilter verwirft nur Pulse von <625ns aber lässt 
längere Pulse verzugsfrei durch. Tatsächlich sieht es aber so aus, wie 
wenn jeder Puls (also kein Glitch) um diese Zeit verlängert würde.

Gehört das so? Wenn nicht, was könnte diesen Effekt verursachen?

Ich dachte eigentlich:
Bei 100kbit ist der kürzeste Puls 10µs, da bekommt man mit 625ns eine 
gute Störsicherheit hin, ohne dass die Baudrate dadurch beeinflusst 
wird.

Vielen Dank vorab.

von Pepe (Gast)


Lesenswert?

Ich hab zwar keine Erfahrung mit Kinetis, aber beim STM32 verlängert der 
"Noise Filter" beim I2C Modul die Hold Zeiten um den eingestellten Wert. 
Dies würde dann auch bedeuten, dass der Takt effektiv langsamer wird.

Würde ich bei Dir auch tippen: 100kHz -> 1us + 3 x 625ns -> 84kHz
Könnte hinkommen?

Was sagt das Reference Manual?

von Alexander I. (daedalus)


Lesenswert?

Ich schätze Noise und Glitch Filter ist dasselbe... deine Aussage klingt 
plausibel und deckt sich mit meinen Messungen.

Im RM steht leider fast gar nichts dazu:

"An I2C glitch filter has been added outside legacy I2C modules but 
within the I2C package. This filter can absorb glitches on the I2C clock 
and data lines for the I2C module. The width of the glitch to absorb can 
be specified in terms of the number of (half) I2C module clock cycles. A 
single Programmable Input Glitch Filter control register is provided. 
Effectively, any down-up-down or up-down-up transition on the data line 
that occurs within the number of clock cycles programmed in this 
register is ignored by the I2C module. The programmer must specify the 
size of the glitch (in terms of I2C module clock cycles) for the filter 
to absorb and not pass."

Was bringt dieser Filter dann? Schaltet man den für gewöhnlich überhaupt 
ein oder nur in stark verseuchten Umgebungen?

von Pepe (Gast)


Lesenswert?

Der Filter schneidet die Flanke ab und sorgt dafür, dass Spikes, die 
durch die Flanke entstehen, nicht als "Signal" interpretiert werden.

Braucht man den Filter? Tja, schwierig zu sagen.

Wenn du nur z.B. ein "dummes" EEPROM dran hättest, würde ich sagen: Ja. 
(Wenn das EEPROM den Bus wegen eines Glitches nicht mehr frei gibt, 
hängt nämlich sonst der Bus.)
Bei Prozessoren kannst Du ja selber dafür sorgen,dass die den Bus nicht 
klemmen, wenn was schief ( z.B. mit TimeOut)

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.