Skip to content

IIO サブシステム

Masahiro Honda edited this page Jun 21, 2019 · 4 revisions

対応するカーネルモジュールは ad7793 です。
システムからは /dev/iio 下のデバイスとして認識されます。

IIO サブシステム

IIO サブシステムから ADPi Pro に搭載された ADC へアクセスできます。
代表的なノードの説明を次に示します。

  • in_temp0_offset
    ADC 内蔵の温度センサのオフセット値が格納されます。

  • in_temp0_raw
    ADC 内蔵の温度センサの変換結果が格納されます。

  • in_temp_scale
    ADC 内蔵の温度センサのスケール値が格納されます。

  • in_voltage0-voltage0_calibbias
    CH1 に対応したオフセット・レジスタの値が格納されます。

  • in_voltage0-voltage0_calibscale
    CH1 に対応したフルスケール・レジスタの値が格納されます。

  • in_voltage0-voltage0_offset
    CH1 に対応したオフセット値が格納されます。

  • in_voltage0-voltage0_raw
    CH1 に対応した変換結果が格納されます。

  • in_voltage1-voltage1_calibbias
    CH2 に対応したオフセット・レジスタの値が格納されます。

  • in_voltage1-voltage1_calibscale
    CH2 に対応したフルスケール・レジスタの値が格納されます。

  • in_voltage1-voltage1_offset
    CH2 に対応したオフセット値が格納されます。

  • in_voltage1-voltage1_raw
    CH2 に対応した変換結果が格納されます。

  • in_voltage2-voltage2_calibbias
    CH3 に対応したオフセット・レジスタの値が格納されます。

  • in_voltage2-voltage2_calibscale
    CH3 に対応したフルスケール・レジスタの値が格納されます。

  • in_voltage2-voltage2_offset
    CH3 に対応したオフセット値が格納されます。

  • in_voltage2-voltage2_raw
    CH3 に対応した変換結果が格納されます。

  • in_voltage3-voltage3_calibbias
    CH4 に対応したオフセット・レジスタの値が格納されます。

  • in_voltage3-voltage3_calibscale
    CH4 に対応したフルスケール・レジスタの値が格納されます。

  • in_voltage3-voltage3_offset
    CH4 に対応したオフセット値が格納されます。

  • in_voltage3-voltage3_raw
    CH4 に対応した変換結果が格納されます。

  • in_voltage-voltage_scale
    入力電圧のスケール値が格納されます。

  • in_voltage-voltage_scale_available
    選択可能な入力電圧のスケール値が格納されます。

  • sampling_frequency
    更新レートが格納されます。

  • sampling_frequency_available
    選択可能な更新レートが格納されます。

電圧値の測定例

現在の入力電圧のスケール値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat in_voltage-voltage_scale
0.000596040

CH1 のオフセット値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat in_voltage0-voltage0_offset
-8388608

CH1 の変換結果を取得します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat in_voltage0-voltage0_raw
8388593

次の式により変換結果から CH1 の入力電圧が求められます。

U = (in_voltage0_voltage0_raw + in_voltage0_voltage0_offset) * in_voltage-voltage_scale  
  = (8388593 - 8388608) * 0.000596040
  = -0.0089406 mV

スケールの設定例

選択可能な入力電圧のスケール値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat in_voltage-voltage_scale_available
0.000596040 0.000298020 0.000149010 0.000074500 0.000037250 0.000018620 0.000009310 0.000004650

現在の入力電圧のスケール値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat in_voltage-voltage_scale
0.000596040

入力電圧のスケール値を設定します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# echo 0.000298020 > in_voltage-voltage_scale

設定した入力電圧のスケール値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat in_voltage-voltage_scale
0.000298020

更新レートの設定例

選択可能な更新レートの値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat sampling_frequency_available
470 242 123 62 50 39 33 19 17 16 12 10 8 6 4

現在の更新レートの値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat sampling_frequency
470

更新レートの値を設定します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# echo 242 > sampling_frequency

設定した更新レートの値を確認します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# cat sampling_frequency
242

バッファリング動作設定例

連続変換を行うチャンネルの設定を行います。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# echo 1 > scan_elements/in_voltage0-voltage0_en

タイムスタンプを付加する設定を行います。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# echo 1 > scan_elements/in_timestamp_en

連続変換を開始します。

echo 1 > buffer/enable

データを取得します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# hexdump -C /dev/iio\:device0
00000000  7f fe 05 00 00 00 00 00  79 da 72 68 16 ba 87 15  |........y.rh....|
00000010  7f fd fa 00 00 00 00 00  4e 70 93 68 16 ba 87 15  |........Np.h....|
00000020  7f fd be 00 00 00 00 00  c1 8a a9 cd 19 ba 87 15  |................|
00000030  7f fd e4 00 00 00 00 00  fe 20 ca cd 19 ba 87 15  |......... ......|
00000040  7f fe 05 00 00 00 00 00  4c bb ea cd 19 ba 87 15  |........L.......|
^C

この設定ではデータが 16byte ごとに出力されます。
先頭 24bit に変換結果がビッグエンディアンで格納されています。
後半 64bit にタイムスタンプがリトルエンディアンで格納されています。
タイムスタンプの単位はナノ秒です。

連続変換を停止します。

root@raspberrypi:/sys/bus/iio/devices/iio:device0# echo 0 > buffer/enable
You can’t perform that action at this time.