私はAcme SystemsのAria G25ボードを使用しています。 Terraボードブレイクアウトがあります。私も彼らのGoogleグループにこの質問をしましたが、それがより一般的な質問かもしれないと思ってここに投稿しました。このガイドに従って、ADCをモジュールではなくカーネルに構築しました。
http://www.at91.com/linux4sam/bin/view/Linux4SAM/IioAdcDriver
起動時にiioをgrepすることで、次のようになります。
root@acmeboard:~# dmesg | grep iio
iio iio:device0: Resolution used: 10 bits
iio iio:device0: ADC Touch screen is disabled.
起動後、適切なsysfs構造が作成されました。
root@acmeboard:~# ls -l /sys/bus/iio/devices/iio\:device0/
total 0
drwxr-xr-x 2 root root 0 Jan 1 01:06 buffer
-r--r--r-- 1 root root 4096 Jan 1 01:06 dev
-rw-r--r-- 1 root root 4096 Jan 1 01:01 in_voltage0_raw
-rw-r--r-- 1 root root 4096 Jan 1 01:01 in_voltage1_raw
-rw-r--r-- 1 root root 4096 Jan 1 01:01 in_voltage2_raw
-rw-r--r-- 1 root root 4096 Jan 1 01:01 in_voltage3_raw
-rw-r--r-- 1 root root 4096 Jan 1 01:06 in_voltage_scale
-r--r--r-- 1 root root 4096 Jan 1 01:06 name
drwxr-xr-x 2 root root 0 Jan 1 01:06 power
drwxr-xr-x 2 root root 0 Jan 1 01:06 scan_elements
lrwxrwxrwx 1 root root 0 Jan 1 01:06 subsystem -> ../../../../../bus/iio
drwxr-xr-x 2 root root 0 Jan 1 01:06 trigger
-rw-r--r-- 1 root root 4096 Jan 1 01:06 uevent
ただし、ADC値を読み取ろうとすると常に1023が表示されます(ブレークアウトボードの1つにポテンショメータが接続されているため、最大値を読み取らないようにしてください)。
root@acmeboard:~# cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
1023
私はLinuxとsysfsに初めて触れたので、単純な内容がありません。その他の関心ポイント。デジタルGPIOと同じピン(AriaのW20)を読むと動作するようです。鍋を振り返ると0が出て、その逆の1が出ましたね。このピンのGPIO機能をディスエーブルする必要がありますか?
最後に、DTSファイルの関連行は次のとおりです(私が変更した唯一の内容)。
adc0: adc@f804c000 {
status = "okay";
atmel,adc-channels-used = <0xf>;
atmel,adc-num-channels = <4>;
compatible = "atmel,at91sam9x5-adc";
atmel,adc-startup-time = <40>;
atmel,adc-status-register = <0x1c>;
atmel,adc-trigger-register = <0x08>;
atmel,adc-use-external;
atmel,adc-vref = <3250>;
atmel,adc-res = <8 10>;
atmel,adc-res-names = "lowres", "highres";
atmel,adc-use-res = "highres";
trigger@0 {
trigger-name = "continuous";
trigger-value = <0x6>;
};
};