cookies.txt      .scr

ただのテキストファイルのようだ

CPU実験でLinuxでコマンドラインからUART通信する話

タイトルのまんまです。


adventar.org
枠が余ってたのでアドベントカレンダー7日に入れました。

ArchLinux on VMware on Windows without GUIでUSB使ってUARTするやつです。

UART通信、Linuxだとcutecom*1WindowsだとTeraTermを使うのがよくあるようですが、
僕の基本の開発環境はVMGUIなしLinuxで、そこからやりたいじゃないですか。送りたい機械語データもこっちのPCにあるし。

やり方

  1. FPGA名+UART driverとかでググるここがヒットします。書いてある通りホストOSのWindowsにドライバ入れます。
  2. 再起動したかもしれません。
  3. USBケーブルをFPGAとPCに指すと、Windowsがこれを認識します。
  4. あとはVMwareのデバイス設定をいじって、これをゲストOS側に持ってきます。
  5. これによって、Linux側に/dev/ttyUSBxが生えました。dmesg等も確認してください。
  6. baud rateを、sudo stty -F /dev/ttyUSBx 115200のようにして設定してください。

これによって、sudo cat hoge > /dev/ttyUSBx sudo cat /dev/ttyUSBxなどで通信ができるようになります。

なるんですが、罠があります。
LF(\x0a)が、CRLF(\x0d\x0a)にすべて置換されることになります。CPU実験では、機械語を送りつけるわけですが、そのなかにたまたまLFが含まれていると、すべてずれることになります。
ソフトウェアの挙動かと思ってpicocom nanocomとか試したんですが、どうも治らず、結局raw modeというのでした。

Configuring Linux’s serial port to raw modeacassis.wordpress.com

sudo stty -F /dev/ttyUSBx raw

これで終わりです。

sudoつけまくりましたが、ユーザをdialoutグループに所属させた方がいいかもしれませんね。(僕は全部sudo -s上でやりましたが)

*1:他にもいろいろ。シリアルコンソール - ArchWiki ArchWikiはいいぞ