15.03.2019, 14:27
Kennt sich jermand gut mit den diversen System-Takten auf den neueren Raspi Versionen aus ?
Ich habe die befremdliche Beobachtung gemacht, daß der Clock des I2C-Bus abhängig ist vom dem dynamisch gestalteten CPU-Clock (oder einem anderen System-Clock).
Default-mäßig soll der I2C Takt 100 kBaud sein. Ich messe bei niedriger CPU-Last eine Takt-Perioden-Dauer von 16 us (~ 60 kBaud). Der cpuinfo_cur_freq Befehl meldet dann 600 MHz. Wird die CPU-Last höher ( zB durch ein zu scrollendes Window oder eine per Browser betrachtete Live-Web-Cam oder ein YouTube-Video) meldet cpuinfo_cur_freq 1400 MHz und ich messe eine I2C Takt Periode von nur noch 10 us (100 kBaud). 1400/600=2.333 während 16/10=1.6, ist also nicht ganz dasselbe. Konfiguriere ich die Baudrate in /boot/config.txt auf 200000, dann messe ich 8 us (125 kBaud) bei kleiner CPU-Last und 5 us (200 kBaud) bei höherer CPU-Last. Wenn eine Baudrate von 400000 "bestellt" ist, messe ich 4 us (250 kBaud) bzw. 2.5 us (400 kBaud). Es bleibt also immer bei dem Verhältnis von 1.6 (= 8/5 bzw 4/2.5).
Man hat hier also den unerwarteten Effekt, das eine hohe CPU-Last in einem anderen Thread I2C-Transfers beschleunigt.
Gibt es einen System-Takt, der gerade um dieses Verhältnis geändert wird ?
Kann man irgendwo einstellen, daß der I2C-Takt immer gleich dem nominellen Wert ist, auch wenn der CPU-Takt dynamisch verwaltet wird ?
MfG Kai
Ich habe die befremdliche Beobachtung gemacht, daß der Clock des I2C-Bus abhängig ist vom dem dynamisch gestalteten CPU-Clock (oder einem anderen System-Clock).
Default-mäßig soll der I2C Takt 100 kBaud sein. Ich messe bei niedriger CPU-Last eine Takt-Perioden-Dauer von 16 us (~ 60 kBaud). Der cpuinfo_cur_freq Befehl meldet dann 600 MHz. Wird die CPU-Last höher ( zB durch ein zu scrollendes Window oder eine per Browser betrachtete Live-Web-Cam oder ein YouTube-Video) meldet cpuinfo_cur_freq 1400 MHz und ich messe eine I2C Takt Periode von nur noch 10 us (100 kBaud). 1400/600=2.333 während 16/10=1.6, ist also nicht ganz dasselbe. Konfiguriere ich die Baudrate in /boot/config.txt auf 200000, dann messe ich 8 us (125 kBaud) bei kleiner CPU-Last und 5 us (200 kBaud) bei höherer CPU-Last. Wenn eine Baudrate von 400000 "bestellt" ist, messe ich 4 us (250 kBaud) bzw. 2.5 us (400 kBaud). Es bleibt also immer bei dem Verhältnis von 1.6 (= 8/5 bzw 4/2.5).
Man hat hier also den unerwarteten Effekt, das eine hohe CPU-Last in einem anderen Thread I2C-Transfers beschleunigt.
Gibt es einen System-Takt, der gerade um dieses Verhältnis geändert wird ?
Kann man irgendwo einstellen, daß der I2C-Takt immer gleich dem nominellen Wert ist, auch wenn der CPU-Takt dynamisch verwaltet wird ?
MfG Kai