1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラズパイ i2cクロック 50KHzに下げてみた

Last updated at Posted at 2023-06-21

農業用ビニールハウスの温度湿度管理用 ラズパイ&センサー2つ

I2Cでセンサー1つの時は問題なかったのですが、2つに増やしたところ1つのセンサーが反応しなくなりました。
かなりの高温多湿状態のタフな環境下、センサーを換えても、ラズパイを換えても始めは正常だが、数時間後にセンサーが1つおかしくなる。短いケーブルにつけたセンサーがおかしい。
最終的にI2Cのクロックを下げることで正常に動く時間が長くなっている。ただいま実験中。
I2Cのバス速度は、AC電源を抜かないとリセットされないようす。
念のため23時50分台にシャットダウン&外部タイマーを使って電源をOFF/ONしてラズパイを起こし1日に一回I2Cバス(ラズパイ)をリセットする。

HW: Raspberry Pi 3 Model B V1.2 ヒートシンク付き
   1センサー SHT31 秋月電子、 2センサー SHRT31 他社製Reland Sun


I2C基本100KHzで動いている様子
i2cのクロックはオシロスコープで確認するしかなさそう

CPUクロックは以下のコマンドで分かる
root@raspberrypi:/home/pi# vcgencmd measure_clock arm
frequency(48)=600000000


10KHz ###################################
Configを10KHz動作に変更
/boot/config.txt

dtparam=i2c_baudrate=10000  #最後に追加

AC電源 ON/OFF

I2Cはセットされている様子
pi@raspberrypi:~ $ dmesg | grep i2c
[ 5.551577] i2c /dev entries driver

(ちなみに前回はdmesgにてブロードコムのチップでタイムアウトが起こっているというエラーが見れたが
今回はそのエラーは見えていない)

しかし、i2cdetect -y 1ではアドレスが見つからない
pi@raspberrypi:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --


50KHz ######################################
/boot/config.txt

dtparam=i2c_baudrate=50000

reboot

root@raspberrypi:/home/pi# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

この実行速度があまりにも遅いので、AC抜いて再度リブート

そしたら見えた
root@raspberrypi:/home/pi# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- 45 -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

結果50KHzでは動くと思われる

i2cのBUSクロックは電源を抜いて再起動した方か確実に切り替わる

今回LCDと温度センサーSHT31の2つがつながっているので、
どちらかのクロック許容範囲に影響されるとみられる


高温多湿環境にて作動させるので、CPUの温度も測ってみた

root@raspberrypi:~# vcgencmd measure_temp
temp=46.2'C

まあまあの温度である 60℃以上がスロットリング対象になってくるのでこの温度であれば大丈夫

一応スロットリングも調べる
root@raspberrypi:~# vcgencmd get_throttled
throttled=0x0

こちらのスクリプトを実行すると詳しく表示してくれます
https://gist.github.com/aallan/0b03f5dcc65756dde6045c6e96c26459

温度の変化をログに記録
/home/pi script-temp-throttled

#!/bin/bash
date +%Y%m%d-%H:%M:%S
vcgencmd measure_temp
vcgencmd get_throttled

chmod 755 script-temp-throttled

/etc/crontab

*/10 * * * * root /home/pi/script-temp-throttled >>/home/pi/data-temp-throttled


自動でAC OFF して強制リセットする

一応ソフト電源OFFもしておく
/etc/crontab

51 23 * * * root shutdown -h now

外部タイマーセット
OFF時間 23:53 にセット
ON時間 23:56 にセット ONと同時にラズパイも起動する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?