フォト
2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
無料ブログはココログ

« Propeller始めました(15) 温度センサーSTTS751を試してみる | トップページ | Raspberry Pi 2でLEDドットマトリックスを制御してみました »

2016年1月 5日 (火)

Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う

Raspberry Pi 2のOSをRaspbian Jessieにアプグレードしました。

2016/04/18 追記
/boot/cmdline.txtの修正について追記しました。

01

ボード上のGPIOのシリアルピンを使う場合、
デフォルトでは1)システムコンソール出力(printk()の出力)と、2)コンソールログイン(getty)に
利用されており、それらに利用されないように設定する必要があります。

1)の対応は、/boot/cmdline.txt の定義を修正します。
具体的には "console=ttyAMA0,115200 kgdboc=ttyAMA0,115200" を削除し、
  dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
  elevator=deadline rootwait

となります。

ただし、これでもシャットダウンとリブート時等に若干メッセージが出力されるみたいです。
一時的なら/proc/sys/kernel/printk の設定変更でも良いかもしれません(未確認)。

2)は/etc/inittabを開いて修正しようとすると、ファイルがありません。
JESSIEではシステムまわりがsystemdに移行しため、無くなったんですね。

色々と調べ、次のような感じでコンソール(getty)の利用設定が出来るようです。

停止/開始
$sudo systemctl stop serial-getty@ttyAMA0.service
$sudo systemctl start serial-getty@ttyAMA0.service

自動起動の有効/無効
$sudo systemctl enable serial-getty@ttyAMA0.service
$sudo systemctl disable serial-getty@ttyAMA0.service

参考情報
  adafruit RASPBERRY PI - Using UART instead of USB
  Raspberry PIのGPIO上シリアルとArduinoの通信

コンソール(getty)の利用を停止したのち、
シェルプロから直接/dev/ttyAMA0をいじって入出力をする場合、
通信速度や制御コードを送らない設定は従来と同じでsttyコマンドを使います。

$sudo systemctl stop serial-getty@ttyAMA0.service
$sudo chmod o+rw /dev/ttyAMA0
$sudo stty -F /dev/ttyAMA0 115200 \
-iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr \
-onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig \
-icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase \
-tostop -echoprt -echoctl -echoke

確認として
$cal 2016 > /dev/ttyAMA0

でカレンダーのテキスト文字をTeraTermに送信出来ました。

シェルプロから/dev/ttyAMA0を使う場合は状況に応じて環境変数IFSの設定も必要ですね。
このあたりの話は、以前まとめた下記の記事が参考になると思います。
 ・参考記事 「Linuxで直接シリアルデバイスを利用する際の注意点等」

試しにラズパイにIchigoJamをシリアル接続してIchigoJamのファームウェアの更新を
行ってみたところ、問題なく更新出来ました。
接続
   ラズパイ ピン番号08:GPIO14/TXD(UART0) -> IchigoJam RxD
   ラズパイ ピン番号10:GPIO15/RXD(UART0) -> IchigoJam TxD
   ラズパイ ピン番号06:GND                         -> IchigoJam GND

Dscn4666

更新にはlpc21ispを使いました。
$sudo systemctl stop serial-getty@ttyAMA0.service
$sudo lpc21isp -control -bin ichigojam-xtal.bin /dev/ttyAMA0 115200 12000


USB-UARTモジュール不要なのでこれはこれでお手軽かもしれません。

からソースをダウンロードしてコンパイルしました。
$unzip lpc21isp_197.zip
$cd lpc21isp_197
$make
$sudo cp lpc21isp /usr/local/bin

systemdについては、まだ理解出来ていませんが、下記のサイトのスライドを見て概要は理解出来ました。
  「Linux女子部 systemd徹底入門」  http://www.slideshare.net/enakai/linux-27872553

systemdまわりが理解出来たら、自宅のCenOSサーバーも6から7にアップグレードしようと思います。

« Propeller始めました(15) 温度センサーSTTS751を試してみる | トップページ | Raspberry Pi 2でLEDドットマトリックスを制御してみました »

Raspberry Pi」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/63009621

この記事へのトラックバック一覧です: Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う:

« Propeller始めました(15) 温度センサーSTTS751を試してみる | トップページ | Raspberry Pi 2でLEDドットマトリックスを制御してみました »