Armadilloフォーラム

UART2 シリアル通信

inuneko

2023年11月14日 15時25分

いつもお世話になっております。

UARTシリアル通信の件でご相談させて下さい。

armadillo-640のCON14コネクタのUART2(3,4pin)を使用してwindows10とシリアル通信しようとしています。

armadilloで[echo "TEST" > /dev/ttymxc1]を実行したところWindowsPCには表示されませんでした。
armadillo内で設定は必要でしょうか?

armadillo-640側 uart2の設定は下記の通りです。
sttyのレスポンスです。

root@armadillo:~# stty -a < /dev/ttymxc1
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc

念のためオシロで確認しましが送信データが出ていませんでした。
dtbファイルではuart2を有効にしています。

よろしくお願いします。

コメント

佐藤です。

こちらでもUART2を有効にしたdtbを作成し試してみたところ、
WindowsPC側で正常に受信できました(TeraTermを使用)

TeraTerm側のボーレート設定はarmardillo側と合ってますでしょうか。(今回の場合は9600)
また、TX/RX/GNDの配線等に間違いはないでしょうか。

以下のフォーラムも参考になるかもしれません。
https://armadillo.atmark-techno.com/forum/armadillo/10208

> TeraTerm側のボーレート設定はarmardillo側と合ってますでしょうか。(今回の場合は9600)
stty -a < /dev/ttymxc1の実行した時、パリティやストップビットの表示はどれになるのでしょうか?

> また、TX/RX/GNDの配線等に間違いはないでしょうか。
配線はcon14の2ピンにGND、3ピンにRx、4ピンにTxを配線しました。

正しく配線されていないと信号は送信されませんか?

> 佐藤です。
>
> 差し支えなければ、/boot/a640.dtb と /boot/uImage を添付していただけますでしょうか。
dtbファイルとuImageを添付します。
ご確認よろしくお願いします。

ファイル ファイルの説明
armadillo-640-at-dtweb.dtb
uImage.zip

佐藤です。

こちらでは、いただいたdtbとuImageでもWindowsPC側で受信することができました。
こちらでの手順は以下のとおりです。
* uImage を /boot/uImageへ上書き保存
* armadillo-640-at-dtweb.dtb を /boot/a640.dtb へ上書き保存
* con14の2ピンをGND、3ピンをWindows側のRx、4ピンをWindows側のTxに接続
* teratermの設定を添付のように設定
* armadilloから "echo "TEST" > /dev/ttymxc1" を実行

ファイル ファイルの説明
teraterm.png

> こちらでは、いただいたdtbとuImageでもWindowsPC側で受信することができました。
> こちらでの手順は以下のとおりです。
> * uImage を /boot/uImageへ上書き保存
> * armadillo-640-at-dtweb.dtb を /boot/a640.dtb へ上書き保存
> * con14の2ピンをGND、3ピンをWindows側のRx、4ピンをWindows側のTxに接続
> * teratermの設定を添付のように設定
> * armadilloから "echo "TEST" > /dev/ttymxc1" を実行

con14のピンとWindowsを接続したら送信できました。
ありがとうございました。

cat /dev/ttymxc1 < log.txtと受信コマンドをしたら受信ポートはopen状態でコマンドが終了しないです。
設定で変更できますか?
受信時のエコーをOFFにしても再起動するとエコーがONになっています。設定の維持はどうすればいいですか?
よろしくお願いします。

佐藤です。

> cat /dev/ttymxc1 < log.txtと受信コマンドをしたら受信ポートはopen状態でコマンドが終了しないです。
> 設定で変更できますか?
キーボードから Ctrl + C の入力で終了できませんでしょうか。

> 受信時のエコーをOFFにしても再起動するとエコーがONになっています。設定の維持はどうすればいいですか?
> よろしくお願いします。
設定保存はできません。起動時に毎回設定コマンドを実行する必要があります。
以下の手順で試してみてください。

root@armadillo:~# vi /etc/systemd/system/ttymxc1_init.service
[Unit]                                                                          
Description = ttymxc1_init                                                      
 
[Service]                                                                       
ExecStart = <ここに設定コマンドを書く>                                     
Type = simple                                                                   
 
[Install]                                                                       
WantedBy = multi-user.target

上記ファイルを保存した後に以下を実行

root@armadillo:~# systemctl enable ttymxc1_init.service

これで再起動時も反映されると思います。

> > cat /dev/ttymxc1 > log.txtと受信コマンドをしたら受信ポートはopen状態でコマンドが終了しないです。
> > 設定で変更できますか?
> キーボードから Ctrl + C の入力で終了できませんでしょうか。
Ctrl + Cの入力で終了はできました。

> > 受信時のエコーをOFFにしても再起動するとエコーがONになっています。設定の維持はどうすればいいですか?
> > よろしくお願いします。
> 設定保存はできません。起動時に毎回設定コマンドを実行する必要があります。
> 以下の手順で試してみてください。
>

> root@armadillo:~# vi /etc/systemd/system/ttymxc1_init.service
> [Unit]                                                                          
> Description = ttymxc1_init                                                      
>                                                                                 
> [Service]                                                                       
> ExecStart = <ここに設定コマンドを書く>                                     
> Type = simple                                                                   
>                                                                                 
> [Install]                                                                       
> WantedBy = multi-user.target
> 

> 上記ファイルを保存した後に以下を実行
>

> root@armadillo:~# systemctl enable ttymxc1_init.service
> 

> これで再起動時も反映されると思います。
再起動時に設定が反映されていました。

cat /dev/ttymxc1 > log.txtは以前実行した時受信の有無に関わらず時間経過でコマンドが終了していました。
エコーは初期はエコーなしの設定でした。

初期設定に戻すやり方はありますか?

佐藤です。

> 初期設定に戻すやり方はありますか?
sttyで行った設定を初期に戻すのであれば
"stty -F /dev/ttymxc1 sane"
とすれば戻ると思います。

minの値とtimeの値を変更をしようと思ってます。
ボーレートの変更と同じようなコマンドで”stty time 30”とコマンド入力しましたが、変化はありませんでした。
minとtimeの変更はどういったコマンドでしょうか?

よろしくお願いします。

佐藤です。

> minの値とtimeの値を変更をしようと思ってます。
> ボーレートの変更と同じようなコマンドで”stty time 30”とコマンド入力しましたが、変化はありませんでした。
> minとtimeの変更はどういったコマンドでしょうか?
"stty -F /dev/ttymxc1 time 30"
とするとどうでしょうか。

> "stty -F /dev/ttymxc1 time 30"
> とするとどうでしょうか。

上記のコマンドを実行しましたら変更は確認できました。
起動時にdev/ttymxc1の設定と文字列の送受信をシェルスクリプトで実行しました。

結果として、windowsからの信号はRxのピンまで来てますが、テキストに出力されてないのでarmadilloが受信できてないです。
armadillo → windows10  送信できてる
windows10 → armadillo  con14のRxまで信号は来ているが受信はできてない。 (オシロで確認しました。)

ttymxcの設定は反映されていました。
log.txtには受信した文字列が出力されませんでした。
armadilloは3秒間受信待ち状態にしています。その間にwindowsからの信号は確認しました。
armadilloのまで信号は来ていますが受信ができていないので他に設定とかはありますか?

ファイル ファイルの説明
シェルスクリプトプログラム.txt

佐藤です。

> ttymxcの設定は反映されていました。
> log.txtには受信した文字列が出力されませんでした。
ルートディレクトリ直下にlog.txtが作成されてませんでしょうか。

root@armadillo:~# ls /log.txt                                                   
/log.txt

> > ttymxcの設定は反映されていました。
> > log.txtには受信した文字列が出力されませんでした。
> ルートディレクトリ直下にlog.txtが作成されてませんでしょうか。
>

> root@armadillo:~# ls /log.txt                                                   
> /log.txt
> 

こちらではrootディレクトリ直下にはlog.txtはありませんでしたが、そちらでは作成されたということですか?

佐藤です。

> こちらではrootディレクトリ直下にはlog.txtはありませんでしたが、そちらでは作成されたということですか?
はい、いただいたシェルスクリプトをarmadillo起動時に実行するようにしてみたところ作成されました。
* armadilloを起動
* windowsのteraterm上に"TEST\n"と表示されたら適当にキーボードで文字を入力
* 入力終了後、3秒以上待った後 /log.txt に入力した文字が出力されていることを確認

> * armadilloを起動
> * windowsのteraterm上に"TEST\n"と表示されたら適当にキーボードで文字を入力
> * 入力終了後、3秒以上待った後 /log.txt に入力した文字が出力されていることを確認
amadilo起動後root直下にlog.txtが作成されているのを確認をしました。
ただ受信データが書き込まれていませんでした。
手動でコマンド入力のときですが、

1.armadillo起動後に送受信コマンドをします。
2.時間待ちの設定していないのでCtrl+Cで停止します。
3.ttymxc1の設定をします。
4.再度送受信コマンドをするとlog.txtに書き込まれていました。

ttymxc1のポートが有効化になっていないとかありますか?

佐藤です。

> ttymxc1のポートが有効化になっていないとかありますか?
有効化はされていると思います。

armadilloとwindowsはどのようなシリアルケーブルをお使いでしょうか、
メーカー名や型番など分かりますでしょうか。