RPIの1-Wireバグ

2018年9月17日 - 未分類

Raspberry Pi Stretch (4.14.52-v7+ 〜 4.14.69-v7+)では、1-WireでDS18B20を使っていると、/sys/bus/w1/devices/にあるはずの28-021491776b37のようなDS18B20のファイルが消失してしまうバグがあるようです。一度、消失してしまうと、Raspberry Pi をrebootしても復活しません。電源をOFFにしてから入れ直すと復活するのですが、数時間で消えてしまいます。

電源ラインのノイズ対策をしても、プルアップ抵抗値や1-Wireへの供給電圧を変えても同じです。/boot/config.txtの1Wの部分を変えても同じです。どうも、メモリー領域の管理に問題がありそうです。どのバージョンから混入したバグなのかも分かりませんが、多分、Stretchになってからのバグのような気がします。

Raspberry Pi Stretchの前のバージョンのJessie(4.9.35-v7)では、このようなことは起こりません。Stretchも、バージョンが上がるほど、バグが増えているような気がします。4.9.35-v7+では、rebootでDS18B20が復活するんのですが、4.14.69-v7+では、電源を入れ直さないと復活しません。

Raspbianのイメージは、2017年8月17日からStretchに切り替わっています。Stretch最新版でがバグ深刻です。

 

[DIR] raspbian-2017-04-10/ 2017-04-10 18:51
[DIR] raspbian-2017-06-23/ 2017-06-23 07:14
[DIR] raspbian-2017-07-05/ 2017-07-05 17:43 Jessie最終版
[DIR] raspbian-2017-08-17/ 2017-08-17 09:17 Stretch最初
[DIR] raspbian-2017-09-08/ 2017-09-08 12:13
[DIR] raspbian-2017-12-01/ 2017-12-01 10:22
[DIR] raspbian-2018-03-14/ 2018-03-16 18:07
[DIR] raspbian-2018-04-19/ 2018-04-19 15:40
[DIR] raspbian-2018-06-29/ 2018-06-29 03:28  Stretch最新版

 

BitBangingDS18B20を使うと、DS18B20の読み出しが、12bit固定から、9bit, 10bit,11bit,12bitのいずれかに変更できます。12bitから11bitにするだけで読出速度は2倍になります。これは、C言語で、/dev/memを読んでいますが、これでも、/dev/memから、DS18B20にアクセスできなくなることがあるようです。DS18B20を使いたいならば、Stretchを諦めて、2017-07-05-raspbian-jessie.imgに乗り換えたほうがいいのでしょうか。しかし、その後、jessieでも、DS18B20にアクセスできなくなることがありました。

結局、BitBangingDS18を使って9bitで読み出すようにしました。BitBangingDS18には、1-Wireバスをリセットする機能もあるようで、読めなくなっていたDS18B20を回復させることができるようです。/sys/bus/w1/devicesにDS18B20が出ていなくても、アクセスできることがあるようです。Raspberry Piの問題は、/sys/bus/w1/devicesにDS18B20がでなくなることですから、これは大きな戦力になります。

 

/sys/bus/w1/devicesから温度を読み出した場合、読出の平均時間は4.613215秒でした12bitモードでしか読みだせません。一方で、BitBangingDS18で読み出した場合、12bitモードでは、平均時間は1.03480秒でした。9bitモードでは1.028912でした。4倍も早く、読出ビット数も変えられます。9bitモードで読み出した場合、±0.5℃の誤差が出ます。12bitモードなら、±0.06℃の誤差です。

後は、頻繁にDS18B20から温度を読み出すか、できるだけ読み出さないかで違いがあるか調べてみます。

 

 

 

Translate »