2019年1月
    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    

Amazonウィジェット

  • お気に入り
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« Arduinoのイーサネットシールドを使う | トップページ | C言語 厄介なバグ第一位 不定値のリード »

2018年8月 7日 (火)

Linuxでシリアル通信 (cygwinでもできる) cuコマンド活用

ubuntuを使っていればcuは普通にapt-getでインストールできる。
コマンドの詳細はこれ
COMポートに接続できたら必ず"Connected"が表示される。
出てこなければ何かが間違っているので失敗している。
下記を参考にされたい。
cu -s 115200 -l /dev/ttyS0
ブログでよくコマンドが書いてあるが、-lと-Iの見分けが必ずわからなくなる。
これは小文字のエルが正解。

エルと大文字のアイの区別がつかないフォントを使っているのなら、プログラミング用のフォントであるVLgothicやmonoに変えてみればすぐわかる。


Permission denied
というエラーは、デバイスファイルのパーミッションが設定されてないときに出る。
これを忘れていると全くconnectedが出てこない。
COM3に接続したいときはこんな風に打ち込む。
chmod o+rw /dev/ttyS2



No such device or address
これはパーミッションを設定しようとしてエラーになったとき。
対象としているデバイス(ttyS0など)が存在していないときもこれが出るので、ちょっとはまることがある。
ls /dev
を使って、接続しようとしているデバイスが存在しているか確認する。



通信が止まらない!
終了するときはチルダとドットを打ち込んでからEnterを押す。
~.(ENTER)
このプログラムはCtrl+Cでは終了しない。シリアル端末でログインした時のために、このシグナルは受け取らないようになっているみたい。
<<もっと簡単な方法>>
stty -F /dev/ttyUSB0 460800
というコマンドで設定しさえすれば、それ以降は
cat /dev/ttyUSB0
というやり方でもシリアルは受信できる。受信だけなのだったらこっちのほうが断然簡単。終了がCtrl+Cで済むから。
<<cygwinでやる場合>>
cygwinにcuをインストールするには、uucpのソースをダウンロードして、cygwinでビルドする。uucpはほかのサイトにもあるので、下記リンクが切れていたら適当に検索して探すしかない。
uucp.tar.gz
というファイルを落として、解凍ツールでcygwinのhomeに入れる。


インストールの仕方
パッケージはないのでgccコンパイラでビルドしなければいけない。
なのでcygwinにgccとmakeコマンドが入っている必要がある。まだの人はcygwin installerで入れることができる。
解凍したフォルダにsrcフォルダがあるのでそこに入って、
./configure
してから
make
make install
この手順はほかのlinuxツールを入れるときのビルドでも同じで、特別なことはなにもない。

2019.1.2追記
もっと大きなボーレートを設定できるか試してみたときのやりかた。
参考ページ

”The one of the defined baud rates in include/asm-generic/termbits.h”の中に、使えるボーレートが書き込んであるらしい。3MHzでdsPICと通信させてみたところ受信はできてもデータ化けで使い物にならず。2MHzならピッタリ使えることがわかった。

sttyで設定を確認できる。

$ stty < /dev/ttyS4
speed 2000000 baud; line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
swtch = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>;
lnext = <undef>; discard = <undef>; min = 0; time = 0;
-cread
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

ボーレートを変更するには

$ stty -F /dev/ttyS4 2000000

cuからでもオプションで設定できるが、こちらはエラーが出る。sttyならエラーは出ない。

$ cu -l /dev/ttyS4 -s 2000000
cu: Unsupported baud rate 2000000

« Arduinoのイーサネットシールドを使う | トップページ | C言語 厄介なバグ第一位 不定値のリード »

Linux」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: Linuxでシリアル通信 (cygwinでもできる) cuコマンド活用:

« Arduinoのイーサネットシールドを使う | トップページ | C言語 厄介なバグ第一位 不定値のリード »