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最新版でがバグ深刻です。
raspbian-2017-04-10/ | 2017-04-10 18:51 | ||
raspbian-2017-06-23/ | 2017-06-23 07:14 | ||
raspbian-2017-07-05/ | 2017-07-05 17:43 | Jessie最終版 | |
raspbian-2017-08-17/ | 2017-08-17 09:17 | Stretch最初 | |
raspbian-2017-09-08/ | 2017-09-08 12:13 | ||
raspbian-2017-12-01/ | 2017-12-01 10:22 | ||
raspbian-2018-03-14/ | 2018-03-16 18:07 | ||
raspbian-2018-04-19/ | 2018-04-19 15:40 | ||
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から温度を読み出すか、できるだけ読み出さないかで違いがあるか調べてみます。