LoginSignup
20
18

More than 3 years have passed since last update.

Linuxで高速なUARTを使ってみた

Last updated at Posted at 2016-10-18

Linuxで2MbpsなUARTを使ってみたら、ハマりましましたが解決できました。

組み込みARMな環境で2MbpsのUARTを使ってバイナリデータの連続受信をしてみました。

プログラムを何も書かなくて、1.1Mbps程度のストリームデータを処理できることがすばらしいです。

2Mbpsが設定できない

  • busyboxのsttyだと2000000が設定できない
  • GNU coreutilsのsttyを使うと設定できる。
  • コマンド例
# stty -F /dev/ttySC8 2000000

データが受信できない。データが化ける。

  • テキストデータなら、想定したデータが受信できるのに、バイナリデータだと受信できなかったり、データが抜けたりした。
  • Linuxではttyはcookedと呼ばれる 状態になっており、テキスト転送用の設定になっている。 改行を受信しないと受信バッファからデータが取り出せないことがあります。
  • raw モードにしたら解決しました。
  • コマンド例
# stty -F /dev/ttySC8 raw

データが化ける

  • ジャンパケーブルみたいなので配線をするとデータが化けます。
  • ケーブルを短くして、良い感じのケーブルを使いましょう。

動作確認

  • バイナリデータの受信を確認する場合はodを使って16進ダンプを表示させると良い。
# od -x /dev/ttySC8

結果

上記の対応をしたら、2MbpsのUARTで安定してバイナリデータを安定して受信できるようになりました。
こんな感じでTSの再生ができました。  (ただし、エラーフリーにはなっていないと思います。エラーフリーが不要な案件だったので。。。)

# cat /dev/ttySC8 | mplayer - 

その他

  • FDTIのUSB UART(FT232RQなど)は3Mbpsまで対応しています。Windowsでは3Mbpsは動作していました。 (FT232Hは12Mbpsまで対応とあるが、持っていないので試したことはないです。)
  • UARTのデータ抜けが無い事をチェックするのは、https://github.com/geertu/fifotesthttps://github.com/geertu/sertest でテストするのが良いみたいです。
20
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18