忍者ブログ

晴時々曇一時雨

高気密高断熱住宅に関する話題。 時事ネタなど。

CCS811の件(先頭ビットが立ってしまう)の続き
CCS811の件の続き
結論
Raspberry Pi3(Python-SMBus)がクロックストレッチに対応できないのが原因。
解決法1
/boot/config.txt
dtparam=i2c_baudrate=######
を追加して、I2Cの通信速度をデフォルトの100kHzから遅くする。
(#####には、適当に数字を入れる)
自分の環境の場合「10000」で安定しました。
要するに、クロックストレッチに対応できないので
それが誤差になってしまうくらいまで通信速度を落とすという
なんとも冴えない対応をすることでかろうじて通信できる模様。
このRaspberryPi のI2Cクロックストレッチ非対応問題は、
かなり以前から知られている現象のようですが
未だに解消されないんですね・・・。
ハマったわさ!!
よくわからないですが、このクロックストレッチにRaspberry Pi3側が
対応しないために、通信結果にノイズが混じるようです。
酷い場合は、通信自体が成立しません。
以下、メモ的リンク。

I2Cクロックストレッチの話題1
https://www.element14.com/community/thread/49698/l/i2c-clock-stretching-feature-in-raspberry-pi-3?displayFullThread=true
I2Cクロックストレッチの話題2
https://www.raspberrypi.org/forums/viewtopic.php?f=44&start=50&t=13771
I2Cクロックストレッチの話題3
http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html
http://www.microchip.com/forums/m810443.aspx
BCM2708ドライバー
https://github.com/raspberrypi/linux/blob/rpi-4.1.y/drivers/i2c/busses/i2c-bcm2708.c
RaspberryPi ハードウェア
https://www.raspberrypi.org/documentation/hardware/raspberrypi/README.md
BCM2837
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2837/README.md
解決策2
I2C通信をGPIOを使って行う。

I2Cクロックストレッチの話題2のスレの最後にCで書かれたものへのリンクがあります。
・・・C・・・苦手w
Perlでも同様のことをしている人がいるっぽい。
Perl知らないw
PR

コメント

コメントを書く