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/fifotest と https://github.com/geertu/sertest でテストするのが良いみたいです。