06 January 2013

Raspberry Pi シリアル通信の初期設定

Raspberry PiのGPIOポートのTxd/Rxdピンは、初期状態では外部機器と通信できるような設定になっていない。

■ Linux設定の変更

GPIOのシリアルポート(Txd/Rxd)を通信用に使えるようにするため、次の設定ファイルを書き換えてから再起動する。

参考資料
Arduino and Raspberry Pi Serial Communication
Raspberry Pi and the Serial Port
Raspberry PiとAruduinoでシリアル通信

/boot/cmdline.txt
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait

もとの設定は ”dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait” なので、太字にした部分が削除されている。

/etc/inittab
#Spawn a getty on Raspberry Pi serial line #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 ← コメントアウトする

inittab最下行のttyAMA0に関する部分をコメントアウトするか削除する。

■ テスト回路で実験

20130106-rpi-serial-cir.png
回路図

20130106-rpi-serial-brd.jpg
実験中写真

pic側のボードには、別の目的用に付けたピンが大量に並んでいます…。

Raspberry pi上でminicomを起動してシリアル送受信のテストを行う。

$ sudo minicom -b 2400 -o -D /dev/ttyAMA0

オシロスコープで波形を観察してみる

20130106-rpi-serial-tx.jpg
Raspberry piからのシリアル出力

1目盛が2Vなので、シリアル出力は3.3Vではなく3.5V程度あるようだ。


20130106-rpi-serial-rx.jpg
picからのシリアル出力


pic側に3.3Vを給電しなくても、Raspberry piのTxd/Rxd/GNGと相互結線すれば、それらの線から送られてくる電力でpicが稼動してしまう。

20130106-rpi-serial-rx_wop.jpg
シリアル回路からの給電のみで動作するpicからのシリアル出力

さすがに、picの消費電力により電圧降下を起こしているのか、出力信号は2V程度しか無い。この出力でもRaspberry pi側ではキッチリと通信を読み取っている。ただし、Raspberry pi側からpicに向かってシリアル出力を行うと、その波形電圧が3.5Vあるためにpic側の処理におかしなことが生じるようで、picからの出力が乱れる。