====== 各種ペリフェラルの使用方法 ====== ~~ODT~~ ===== スイッチ類 ===== ''GPIO class driver'' として実装。''/sys/class/gpio/[Node]/value'' を ''read()'' する。\\ 極性は **Active High** (スイッチ ON で 1)。 ^ Node ^ Switch ^ Note ^ |SW_VOLUME_UP| 音量大 | | |SW_VOLUME_DOWN| 音量小 | | |SW_EMERGENCY| 緊急通報 | | |SW_MENU| メニュー | | |SW_NEXT| 次へ | | |SW_BACK| 前へ | | |SW_OK| 決定 | | |DIN| 外部入出力 | 入力 | \\ ==== 割込 ==== v1.0.0β4 より、割込機能を追加。\\ ''/sys/class/gpio/[Node]/edge'' に ''rising'' を書き込むことで該当する入力の割込機能が有効になる。 root@plum-lcd:/sys/class/gpio/SW_OK# pwd /sys/class/gpio/SW_OK root@plum-lcd:/sys/class/gpio/SW_OK# ls -l total 0 -rw-r--r-- 1 root root 4096 Aug 2 15:24 active_low lrwxrwxrwx 1 root root 0 Aug 2 15:24 device -> ../../../gpiochip7 -rw-r--r-- 1 root root 4096 Aug 2 15:24 edge drwxr-xr-x 2 root root 0 Aug 2 15:24 power lrwxrwxrwx 1 root root 0 Aug 2 15:18 subsystem -> ../../../../../../../../class/gpio -rw-r--r-- 1 root root 4096 Aug 2 15:18 uevent -rw-r--r-- 1 root root 4096 Aug 2 15:24 value root@plum-lcd:/sys/class/gpio/SW_OK# cat edge none root@plum-lcd:/sys/class/gpio/SW_OK# echo rising > edge root@plum-lcd:/sys/class/gpio/SW_OK# cat edge rising root@plum-lcd:/sys/class/gpio/SW_OK# root@plum-lcd:/sys/class/gpio/SW_OK# cat /sys/kernel/debug/gpio ... gpiochip7: GPIOs 486-493, parent: platform/11000004.gpio, xioirq-gpio: gpio-486 ( |SW_VOLUME_UP ) in lo gpio-487 ( |SW_VOLUME_DOWN ) in lo gpio-488 ( |SW_EMERGENCY ) in lo gpio-489 ( |SW_MENU ) in lo gpio-490 ( |SW_NEXT ) in lo gpio-491 ( |SW_BACK ) in lo gpio-492 ( |SW_OK ) in lo IRQ <--- "IRQ" が有効になる gpio-493 ( |DIN ) in lo ----------------------------- XIO ENABLE: 40 XIO STATUS: 00 XIO VALUE: 00 ----------------------------- ... \\ ===== ラジオ電源 ===== ''LED class driver'' として実装。''/sys/class/leds/RADIO_POWER/brightness'' に 0(OFF) or 255(ON) を ''write()'' する。 \\ ===== 外部出力 ===== ''LED class driver'' として実装。''/sys/class/leds/DO/brightness'' に 0(OFF) or 255(ON) を ''write()'' する。 \\ ===== LCD バックライト ===== ''Backlight driver'' として実装。''/sys/class/backlight/plumLCD-Backlight/brightness'' に 0(消灯) 〜 10(最大輝度) を ''write()'' する。 root@plum-lcd:/sys/class/backlight/plumLCD-Backlight# ls -l total 0 -r--r--r-- 1 root root 4096 Jun 25 10:36 actual_brightness -rw-r--r-- 1 root root 4096 Jun 25 10:36 bl_power -rw-r--r-- 1 root root 4096 Jun 25 10:36 brightness <-------------------------- lrwxrwxrwx 1 root root 0 Jun 25 10:36 device -> ../../../11000016.gpio -r--r--r-- 1 root root 4096 Jun 25 10:36 max_brightness drwxr-xr-x 2 root root 0 Jun 25 10:36 power lrwxrwxrwx 1 root root 0 Jun 25 10:36 subsystem -> ../../../../../../../class/backlight -r--r--r-- 1 root root 4096 Jun 25 10:36 type -rw-r--r-- 1 root root 4096 Jun 25 10:36 uevent \\ ===== UART ===== ==== ラジオ ==== ''/dev/ttyO1'' に接続。 \\ ==== 無線 ==== ''/dev/ttyO0'' に接続。 \\ ===== USB ===== Dual-roleDevice として実装。初期状態では、gadget として cdc-acm x 2, cdc-ether x 1 として見せるようになっている。\\ USB typeA - microB ケーブル((Android スマートフォンを接続するケーブル)) でホスト PC と接続可能。\\ ホスト側での見え方は下記のとおり。 [2337306.688997] usb 1-4.2.2: new high-speed USB device number 53 using xhci_hcd [2337306.820140] usb 1-4.2.2: New USB device found, idVendor=1d6b, idProduct=0104 [2337306.820143] usb 1-4.2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [2337306.820145] usb 1-4.2.2: Product: Bar Gadget [2337306.820146] usb 1-4.2.2: Manufacturer: Foo Inc. [2337306.820148] usb 1-4.2.2: SerialNumber: 0123456789 [2337306.844287] cdc_acm 1-4.2.2:1.0: ttyACM0: USB ACM device [2337306.854312] cdc_acm 1-4.2.2:1.2: ttyACM1: USB ACM device [2337306.872420] cdc_ether 1-4.2.2:1.4 usb0: register 'cdc_ether' at usb-0000:03:00.0-4.2.2, CDC Ethernet Device, c2:87:0e:76:f3:5b T: Bus=01 Lev=03 Prnt=08 Port=01 Cnt=02 Dev#= 53 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0104 Rev= 0.01 S: Manufacturer=Foo Inc. S: Product=Bar Gadget S: SerialNumber=0123456789 C:* #Ifs= 6 Cfg#= 1 Atr=80 MxPwr= 2mA A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=02 Prot=01 A: FirstIf#= 2 IfCount= 2 Cls=02(comm.) Sub=02 Prot=01 A: FirstIf#= 4 IfCount= 2 Cls=02(comm.) Sub=06 Prot=00 I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=cdc_acm E: Ad=82(I) Atr=03(Int.) MxPS= 10 Ivl=32ms I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=cdc_acm E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms I:* If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 4 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether E: Ad=86(I) Atr=03(Int.) MxPS= 16 Ivl=32ms I: If#= 5 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether I:* If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms \\ ==== cdc-acm (serial) ==== 2つの ''tty'' では ''getty'' を起動しているため、ホスト側からログイン可能。 Ubuntu 16.04.4 LTS plum-lcd ttyGS0 plum-lcd login: user1 Password: Last login: Mon Jun 25 10:07:02 JST 2018 from 192.168.253.1 on pts/0 Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.14.51-PlumLCD+ armv7l) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage user1@plum-lcd:~$ \\ ==== cdc-ether (Ethernet) ==== ''usb0'' という I/F として見えるので、Ethernet(ethX) と同様に設定し、ホスト側から SSH などでログイン可能。 user1@plum-lcd:~$ ifconfig usb0 usb0 Link encap:Ethernet HWaddr 22:00:0e:1c:7a:75 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) user1@plum-lcd:~$ \\ ===== Audio ===== ALSA として実装。 user1@plum-lcd:~$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: AM335xPlumLCD [AM335x-Plum-LCD], device 0: AIC3X tlv320aic3x-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 user1@plum-lcd:~$ aplay -L null Discard all samples (playback) or generate zero samples (capture) pulse PulseAudio Sound Server default:CARD=AM335xPlumLCD AM335x-Plum-LCD, Default Audio Device sysdefault:CARD=AM335xPlumLCD AM335x-Plum-LCD, Default Audio Device dmix:CARD=AM335xPlumLCD,DEV=0 AM335x-Plum-LCD, Direct sample mixing device dsnoop:CARD=AM335xPlumLCD,DEV=0 AM335x-Plum-LCD, Direct sample snooping device hw:CARD=AM335xPlumLCD,DEV=0 AM335x-Plum-LCD, Direct hardware device without any conversions plughw:CARD=AM335xPlumLCD,DEV=0 AM335x-Plum-LCD, Hardware device with all software conversions user1@plum-lcd:~$ \\ 入出力は下記のとおり接続されている。 ^ Device ^ PIN ^ IN/OUT ^ Note | | ラジオ | LINE1L | IN | モノラル, Lch | | LINE出力 | LINE OUT(Rch) | OUT | モノラル, Rch | | 内蔵スピーカー | SPOP / SPOM | OUT | モノラル, Lch | \\ ===== AD Converter ===== ==== channel 2 ==== 電池電圧を読み取ることが可能。 root@plum-lcd:~# cat /sys/bus/iio/devices/iio\:device0/in_voltage2_raw 3583 * 1/6.11 に分圧 * 基準電圧 1.8V * 12bit ADC となっているため、電池電圧を算出するには下記計算を行う。 $$ V_{[電池]} = \frac{ADC\_DATA}{4095} \times 1.8 \times 6.11 $$ \\ ==== channel 3 ==== 電源電圧を読み取ることが可能。 root@plum-lcd:~# cat /sys/bus/iio/devices/iio\:device0/in_voltage3_raw 2541 * 1/10.77 に分圧 * 基準電圧 1.8V * 12bit ADC となっているため、電源電圧を算出するには下記計算を行う。 $$ V_{[電源]} = \frac{ADC\_DATA}{4095} \times 1.8 \times 10.77 $$