バリバリのSoCとSoM(3) Jetson NanoのUARTに接続

JosephHalfmoon

前回、Jetson NanoのI2Cにセンサを接続してみたので、Jetson Nanoの40ピンヘッダ(ラズパイと互換性のあるGPIOピンヘッダ)にデフォルトで出ているインタフェースでテストしていないのはUARTだけとなりました。今回は、Jetson NanoのUARTの先に、USBシリアル変換モジュールを接続し、Jetson NanoとPCの間でシリアル通信を行ってみます。

まず、通信相手の写真を掲げます。マイコンを使った実験で使わせもらっている秋月電子のAE-UM232RというUSBシリアル変換モジュールです。

FT社のFT232RLを搭載した基板です。大事なのは、前々回で調べたとおり、

Jetson NanoのGPIOヘッダに出ているUARTの信号は3.3VレベルシフタICに接続

という点であります。上記のモジュールはUSBから5V電源をもらい、IO電圧は5Vでも3.3Vでも切り替えられるようになっています。J1のジャンパをIO電圧3.3Vになるように設定しておかないとなりません。(なお、前にも書きましたが、秋月のマニュアルの説明文はJ1とJ2が入違ってます。下の表は正しいですが。)

さて、通信相手が出来たのでJetson Nanoの40ピンヘッダと接続してみます。

このとき、結線する必要があるのは、GND、TXD、RXDの3本だけです。ちょうど並んでいるので分かり易いです。

  1. Pin.6 GND
  2. Pin.8 TXD
  3. Pin.10 RXD

これをAE-UM232Rに接続すれば完了ですが、

RXDはTXDに、TXDはRXDに

クロスに接続しないとなりません。ぼーっと生きていると、私のようについ同名の信号同士を接続して痛い目にあうことになります。その後、AE-UM232Rをパソコンに接続し、仮想COMポートとして認識させてやります。今回パソコン上、COM4として認識されているので、ことさらに書き並べれば

  • パソコン上の仮想端末(Teraterm)
  • パソコン上のCOM4
  • AE-UM232R
  • RXD、TXDの結線
  • Jetson NanoのGPIOヘッダピン
  • 3.3V-1.8Vレベルシフタ
  • Jetson Nanoモジュール
  • SoCのUARTポート

という形で接続しています。Linuxなので、UARTポートは多分 tty のどれかにアサインされているのだと思いますが、Jetson Nano買う切っ掛けになったトラ技の特集に名前書いてありました。

ttyTHS1

です。念のため、初期設定をしらべてみるとこんな感じ

なお、速度は115200bpsに設定されていますが、これ以上上げるときにはちょっと注意が必要なのかもしれません。このページから1箇所引用させてもらうと

That is for speed 115200, 8 bits, one stop bit, no parity. If you want to go higher than 115200, then you would probably want to switch to two stop bits.

だそうです。それほど速い接続をさせようと今回は思っていない(古典的9600bpsでテスト)ので、8ビット、ストップ1ビット、ノーパリティで行きます。

パソコン側のTeratermの「シリアルポート」設定を上記になるように設定しました。Jetson Nano側では、別な目的(仮想端末との接続を切ってもプロセスを動かしつづける)でお世話になっている

screenコマンド

を単なる端末エミュレータとして使用しました。

$ sudo screen /dev/ttyTHS1 9600

とすれば、9600bpsで/dev/ttyTHS1に接続するセッションを開始してくれます。当然、スクリーンコマンドの持っている実行途中でデタッチしたり、アタッチしたりする機能も使えます。screenコマンドについては、Control-aがコマンド呼び出しのプリフィックスです。

Control-a ?

とすればセッション中でヘルプを見ることができます。

目出度く両端のソフトウエアが動いたので、パソコン側のCOM4に接続してある仮想端末に a などと打ってみます。Jetson Nano側に a 表示されました。逆もOK。

なお、改行コードをデフォルトの送信、受信ともCRにしておくと行送りされないのでどちらかLFつけた方が良いかもです。まあ、センサなどに接続するときは別な話ですが。

なお、実際にJetson Nano側でScreenコマンドを動かしている端末画面は私の環境の場合、Jetson Nanoにイーサー経由で接続している仮想端末なので

/dev/ttyTHS1 –> screen –> /dev/pts/0 —> LAN –> PC(そして別なteratermのインスタンス)

という具合で結局PCに戻ってきます。つまるところ見かけはPC上の2つのウインドウ間で通信しているだけ。まあ、しょぼくれていますがちゃんとUARTで外界と通信できておるぞ、と。

バリバリのSoCとSoM(2) Jetson NanoのI2Cにデバイスをつなぐ へ戻る