Help us understand the problem. What is going on with this article?

Linuxにおけるシリアルポートのトラブルシューティング

More than 5 years have passed since last update.

■Linuxにおけるシリアルポートのトラブルシューティング

マニュアルやチュートリアル通りにすんなりいけば問題ないが、ソフトウェアでハードウェアに繋がっているシリアルポートを触っていると、
ちょっとおかしな挙動をしているっぽいなという時などにソフトウェア側とハードウェア側と環境設定のどこで問題が生じているのかわかりにくくなる。
いろいろ試行錯誤した中でこれだけ押さえておけばトラブル時になんとかなるという要点をまとめたので公開しておく。

■シリアルポートの初期設定

デバイスとして認識されているか確認 ここに出てこない場合もある。。

dmesg | grep tty

ボーレート、パリティなどの現在の設定項目を表示して確認する。
この設定がハードウェア側と合っていなければ、当然おかしなことになる。

stty -F /dev/tty.iap -a

設定を変更する(元に戻す必要がある)(lockされていると変更適用できない)

stty -F /dev/tty.iap 19200 cs8 -parenb -cstopb

stty -F /dev/tty.iap 19200

■シリアルポートまわりで問題が起きたら試すこと

送られてきているデータを、直接コンソールで表示してみる

そもそも何が送られてきているのか表示と確認。sttyによる設定がうまくいってないとこの時点で文字化けする
catは受信(read)専用で使える

cat /dev/tty.iap
while true; do cat /dev/tty.iap; done;

逆に、任意の文字列を送り付けてみる

echo hello > /dev/tty.iap

catechoをつかったやりとりをいちいち切断せずたくさん試したくなったら、
minicom, screenなどのシリアルポートに対応したターミナルエミュレーションコマンドで接続する。

minicomは設定画面で一時的にtty端末、ボーレート、パリティなどを設定して通信できるので便利。

minicom -s -c on

minicomctrl+a→qで切断&終了できる


screenが入っているマシンは多いと思う。screenでも、tty端末、ボーレート、パリティを指定して接続できる。
なんかエラーがでたら、rootでの実行を試してみる

screen /dev/tty.iap 19200,cs8

screenctrl+a→shift+kで切断&終了できる


cuコマンドは入ってないことも多い

cu -l /dev/tty.iap -s 12000

pythonが使える環境ならpyserialを使うこともできる。
pure pythonなのでpythonさえ動けば使える。windows環境やjythonだと若干面倒っぽい。

rubyが使えて、cがmakeできる環境ならruby-serialportを使うこともできる

スマートフォンのような組み込みLinux端末上でのソフトウェア開発だと、どの方法も厳しかったりする。
最悪sttyとcatでなんとか動作確認はできる。
自分のLinuxマシンに接続して試せるという場合、minicomぐらいは入れておくと色々楽。

■シリアルポートのコーディングで調べること

  • Arduino系でよくあるシリアルポート出力メソッドの挙動を把握しておく

    • Serial.print
      • ASCIIテキストでデータをシリアルポートへ出力する
      • 区切り文字などは特にないため自分で出力する必要がある
    • Serial.println
      • ASCIIテキストのデータの末尾に\r\nを付けてシリアルポートへ出力する
      • screen, miniconなどでも改行されるのでデバッグしやすい
      • データを受け取る際も改行区切りで処理すればOK
      • 1バイトづつ受け取って、\r=0x0D=改行文字と比較すると区切りがわかる
    • Serial.write
      • バイナリデータの転送
    • 区切り文字などのメタ文字と受取りたい文字が混ざっているとバグの原因になる

■まったく何も送られてきていないとき、明らかに仕様と違った値が送られてくるとき

・ケーブルの接続を確認

・ハードウェアの故障を確認

■さらに他の情報を見てみる

この記事は以下のページの内容をまとめたものです

http://b.hatena.ne.jp/yuiseki/serialport

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした