今回はOne-Wireインタフェースについて紹介します。
One-Wireインタフェースはその名の通り、
1本の信号線とGNDで通信するシリアル通信規格です。
信号線から電力を受けることができるため、
信号とGNDの2本のみで通信できます。
また、One-Wireのデバイス1つ1つに固有ID(識別番号、64bit)があるため、
1つのデータライン上の複数デバイスから特定デバイスを呼び出すことができます。
I2Cも7bitの固有アドレスがあります。
同じデバイスの場合は基本的に同じアドレスとなります。
そのため、同じデータライン上に同じデバイスは1つしか繋げることができません。
一方、One-Wireはネットワーク機器のMACアドレスの様に
完全に固有のIDのため、同じデータラインに同じデバイスを複数繋ぐことができます。
便利なOne-Wireインタフェースですが、
1つのデータラインでやり取りするため、
通信速度は期待できません。
入手性のよいOne-Wireデバイスは
他にEEPROM、NVRAMなどがOne-Wireデバイスとしてあります。
急激な温度変化のない環境で定期的に温度を監視する場合などに
1つのデータラインに複数のOne-Wire温度計を設置して
監視すると配線を減らすことができるので効果的です。
STM32マイコンでOne-Wireデバイス(One-Wireデバイス)と通信する
HALライブラリを使用したサンプルコードを作成しました。
One-Wireデバイスを呼び出す場合、
2種類の方法があります。
データライン上に1つのデバイスしかない場合は
SKIP_ROM_CMDで固有ID指定なしで呼び出します。
データライン上に複数のデバイスがある場合は
MATCH_ROM_CMDで固有IDを指定して該当するデバイスのみ呼び出します。
今回のサンプルコードの場合、
DS18B20_GetTemperature()では
SKIP_ROM_CMDで固有ID指定なしで温度を取得します。
DS18B20_GetSelectDeviceTemperature(***)では
MATCH_ROM_CMDで固有IDを指定して温度を取得します。
ICの配線を簡易化できるOne-Wireインタフェースは面白いと思いました。
2本の配線なので配線の存在感を消すことができます。
現状の課題としては温度計くらいしかデバイスがないことでしょうか。
今後のOne-Wireセンサデバイス種類の拡充に期待です。