UARTは「Universal Asynchronous Receiver/Transmitter」の略で、主に機器間の通信に用いられる通信方式です。
[]
一般的な接続方法を下図に示します。
なお、Armadillo-640では、CON3/4のRS232C、CON9/CON11のUARTバスを使用してPCや別のデバイスと通信できます。
信号線はTX(送信)を相手のRX(受信)に接続します。
UARTの主な特徴を以下に示します。
-
各デバイスは対等
-
1対1の通信
-
信号線は送受信の2本
-
9600bpsと115200bpsが標準(最高1Mbps程度)
信頼性の高い通信のため、通信相手の受信可否に合わせて送信できる構成にすることがあります。
これをフロー制御といい、ハードウェアフロー制御では主にRTS/CTSを使用してフロー制御を行います。
簡単な回路でRS-232Cに変換しPC等と通信することもできます。
UARTではボーレート[]等に様々なバリエーションがあり、主に以下の設定を通信相手と合わせる必要があります。
よく選択される設定を強調で示します。
-
ボーレート : 4800, 9600, 19200, 38400, 115200 等
-
データビット数 : 7, 8, 9
-
ストップビット数 : 1, 1.5, 2
-
パリティビット : なし, Odd, Even
-
フロー制御 : なし, ハードウェア, ソフトウェア
UARTの波形は以下のようになっています。
I2CやSPIと異なり、LSBから送信されることに注意してください。
ハードウェアフロー制御を行う場合、送信側はCTSがHのときに送信を開始しません。
Armadillo-640は、標準状態でUART1(CON9)をコンソールとして使用します。
コンソールには、起動ログやカーネルメッセージなどが出力されるため、標準の設定ではUART1で使用しているピンに外部機器を接続して使用するといったことはできません。
ここでは、コンソールとして別のシリアルインターフェースを使用する方法について説明します。
例として、コンソールをUART3(CON3もしくはCON4)に変更します。
シリアルインターフェースとデバイスファイルの対応は、「Armadillo-640 製品マニュアル」の「Linux カーネル仕様」章「UART」項を参照してください。
「Armadillo入門編」の「起動の仕組み」でも説明したように、コンソールに文字を表示するプログラムには、ブートローダー(u-boot)、Linuxカーネル、ユーザーランドアプリケーションプログラムの3種類があります。
4.2.1. ブートローダーのコンソールに使用するUARTを変更する
ブートローダーでUART3をコンソールとして使うためにブートローダーコンフィギュレーションを変更してビルドを行います。
まず、Armadillo-640のデフォルトコンフィギュレーションを適用します。
以下のコマンドを実行してください。
次に、コンソールとしてUART3を利用するようブートローダーのコンフィギュレーションを変更します。
以下のコマンドを実行し、「ARM architecture」→「Console UART select」で「UART3」を選択してください。
コンフィギュレーションの変更後、ブートローダーをビルドしてください。
4.2.2. Linuxのコンソールに使用するUARTを変更する
u-boot-a600-v2018.03-at3以降では、環境変数 optargs に設定されたパラメータがブートパラメータとしてLinuxカーネルに渡されます。
LinuxでUART3をコンソールとして使用するには、optargsに console=ttymxc2,115200を設定します。