目次

各種ペリフェラルの使用方法

~~ODT~~

スイッチ類

GPIO class driver として実装。/sys/class/gpio/[Node]/valueread() する。
極性は 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]/edgerising を書き込むことで該当する入力の割込機能が有効になる。

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 ケーブル1) でホスト 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

となっているため、電池電圧を算出するには下記計算を行う。

$$ 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

となっているため、電源電圧を算出するには下記計算を行う。

$$ V_{[電源]} = \frac{ADC\_DATA}{4095} \times 1.8 \times 10.77 $$

1)
Android スマートフォンを接続するケーブル