Armadilloフォーラム

[Armadillo-610] RS485 データ送受信確認方法について

masa.yamaguchi

2024年9月24日 19時46分

現在、Armadillo-610 においてRS485の半二重データ通信を確認しようとしております。
しかしながら、上記確認方法が方法が分からない状況です。
お手数をおかけしますが、LinxuコマンドでRS485におけるデータの送受信ができているか
確認する方法をご教示頂きたいです。
[備考]
・インストールイメージはリリースイメージです(baseos-600-installer-3.20.2-at.1)。
・RS485ケーブルによるAramdillo-610(拡張ボード) とPCの接続はSI-35USB-2(LINE EYE社)で実施。
・CATコマンドで確認すると、DEラインがHIGHのままとなり、受信できない状況です。

コメント

溝渕です。

> 現在、Armadillo-610 においてRS485の半二重データ通信を確認しようとしております。

Armadillo-610拡張ボードのCON13Cで通信したいという理解で合っていますか?

> お手数をおかけしますが、LinxuコマンドでRS485におけるデータの送受信ができているか
> 確認する方法をご教示頂きたいです。
> [備考]
> ・インストールイメージはリリースイメージです(baseos-600-installer-3.20.2-at.1)。
> ・RS485ケーブルによるAramdillo-610(拡張ボード) とPCの接続はSI-35USB-2(LINE EYE社)で実施。
> ・CATコマンドで確認すると、DEラインがHIGHのままとなり、受信できない状況です。

アプリケーションまたは、Device TreeからRS485設定を行なっていると思いますので、その内容を教えてください。

もし、RTS_ON_SEND(rs485-rts-on-send)とRTS_AFTER_SEND(rs485-rts-after-send)の両方を1にしている場合は、常時DEラインがHIGHになると思います。詳細については以下のドキュメントをご覧ください。

https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…

溝渕です。
masa.yamaguchiです。ご質問について回答いたします。

Armadillo-610拡張ボードのCON13Cで通信したいという理解で合っていますか?

ご指摘の通り CON13Cです。

 アプリケーションまたは、Device TreeからRS485設定を行なっていると思いますので、その内容を教えてください。
 もし、RTS_ON_SEND(rs485-rts-on-send)とRTS_AFTER_SEND(rs485-rts-after-send)の両方を1にしている場合は、
常時DEラインがHIGHになると思います。詳細については以下のドキュメントをご覧ください。
 https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_manual_ja-2.4.13/ch06.html#idm3740
 

デバイスツリーでは修正を行わず、armadillo-610-extboard-eva.dts ファイルの設定をそのまま使用しております。

&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2>;
	status = "okay";
	fsl,uart-has-rtscts;
	rts-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;
 
	rs485-enabled-at-boot-time;
	rs485-rts-on-send;
	rs485-delay-rts-before-send = <0>;
	rs485-delay-rts-after-send = <0>;
};
&iomuxc {
・・・
	pinctrl_uart2: uart2grp {
		fsl,pins = <
			MX6UL_PAD_NAND_DATA04__UART2_DCE_TX	0x00008
			MX6UL_PAD_NAND_DATA05__UART2_DCE_RX	0x1b0b1
			MX6UL_PAD_NAND_DATA06__GPIO4_IO08	0x00008
			MX6UL_PAD_NAND_DATA07__GPIO4_IO09	0x00008
		>;
	};
・・・

溝渕です。

ご回答ありがとうございます。

> デバイスツリーでは修正を行わず、armadillo-610-extboard-eva.dts ファイルの設定をそのまま使用しております。

であれば、Armadilloからのデータ送出時のみDEラインがHIGHになる設定です。

一旦対向機器(SI-35USB-2)を接続しない状態で確認していただけますか?

溝渕 様
masa.yamaguchiです。ご回答ありがとうございます。

一旦対向機器(SI-35USB-2)を接続しない状態で確認していただけますか?

上記確認方法について、以下2点ご教示ください。
①Aramadillo-610(UART2) から外部に送信する際は以下で宜しかったでしょうか。(SSHで実施)
 echo "aaaa" > /dev/ttymxc1
②対向機器を接続しない状況で、外部からAramdillo-610 の UART2に送信する方法が分かりません。
 お手数ながらご教示頂きたいです。

溝渕です。

言葉足らずですみません。確認していただきたかったのはDEラインの論理です。

> ①Aramadillo-610(UART2) から外部に送信する際は以下で宜しかったでしょうか。(SSHで実施)
>  echo "aaaa" > /dev/ttymxc1

を行った時のみDEラインがHIGHになっていれば正常です。

溝渕様
masa.yamaguchiです。

言葉足らずですみません。確認していただきたかったのはDEラインの論理です。
 
> ①Aramadillo-610(UART2) から外部に送信する際は以下で宜しかったでしょうか。(SSHで実施)
>  echo "aaaa" > /dev/ttymxc1
を行った時のみDEラインがHIGHになっていれば正常です。

ご回答ありがとうございます。
上記は確認できました。SSHで上記コマンドで"aaaa"送信を行ったときのみ 、DEラインがHIGHになっています。
(Armadillo-610から外部への送信のケース)
上記に加えて以下お伺いしたいことがございます。
外部からArmadillo-610に対してデータを送信して、Armadillo-610で受信したことを
確認する手順についてご教示頂きたいです(RS485半二重通信における受信確認方法)。

溝渕です。

> 上記は確認できました。SSHで上記コマンドで"aaaa"送信を行ったときのみ 、DEラインがHIGHになっています。

ご確認ありがとうございます。上記より、Armadillo-610としての動作は妥当と思います。

> 外部からArmadillo-610に対してデータを送信して、Armadillo-610で受信したことを
> 確認する手順についてご教示頂きたいです(RS485半二重通信における受信確認方法)。

armadillo# cat /dev/ttymxc1

した状態で、外部からArmadillo-610に対してデータを送出してください。

必要に応じて、以下のようにお使いの環境に合わせて通信設定を行ってください。

armadillo# stty -F /dev/ttymxc1 raw
armadillo# stty -F /dev/ttymxc1 speed 115200
armadillo# stty -F /dev/ttymxc1 -echo

溝渕 様
masa.yamaguchiです。
ご回答ありがとうございます。

CATコマンドで受信確認する旨承知いたしました。
1点念のためお伺いしたいことがございます。

CATコマンドで確認すると、DEラインがHIGHのまま継続します。
(CATコマンドをCTL+Cで終了するまで継続します)
この状態(DEラインがHIGHのまま継続)は期待される正常な状態でしょうか。

溝渕です。

> CATコマンドで確認すると、DEラインがHIGHのまま継続します。
> (CATコマンドをCTL+Cで終了するまで継続します)
> この状態(DEラインがHIGHのまま継続)は期待される正常な状態でしょうか。

いえ。(Armadillo-610の)DEラインがHIGHとなるのはArmadillo-610からの送出時のみです。

外部機器を接続しない状態でCATコマンドを実行しても(Armadillo-610の)DEラインがHIGHとなりますか?

溝渕 様
masa.yamaguchiです。

 外部機器を接続しない状態でCATコマンドを実行しても(Armadillo-610の)DEラインがHIGHとなりますか?

同様の状況となります。
外部機器を接続しない状態でCATコマンドを実行しても(Armadillo-610の)DEラインがHIGHとります。

溝渕 様
masa.yamaguchiです。
デバイスツリーでは以下設定となっております。
以下設定で catコマンド(データ受信)に影響を与えるような設定はございますでしょうか。

&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2>;
	status = "okay";
	fsl,uart-has-rtscts;
	rts-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;
 
	rs485-enabled-at-boot-time;
	rs485-rts-on-send;
	rs485-delay-rts-before-send = <0>;
	rs485-delay-rts-after-send = <0>;
};
&iomuxc {
・・・
	pinctrl_uart2: uart2grp {
		fsl,pins = <
			MX6UL_PAD_NAND_DATA04__UART2_DCE_TX	0x00008
			MX6UL_PAD_NAND_DATA05__UART2_DCE_RX	0x1b0b1
			MX6UL_PAD_NAND_DATA06__GPIO4_IO08	0x00008
			MX6UL_PAD_NAND_DATA07__GPIO4_IO09	0x00008
		>;
	};
・・・

溝渕です。

こちらで確認してみましたが、起動直後の状態で以下のコマンドを実行してもDEラインがHIGHになりませんでした。

armadillo# cat /dev/ttymxc1

DE信号の論理は、R95で行いました。

意図したDevice Treeが利用されているか確認したいので、以下のコマンドの出力をもらえますか?

armadillo# ls /proc/device-tree/soc/aips-bus@2100000/serial@21e8000

正しくDevice Treeが利用されている場合は、次のように表示されると思います。

clock-names          name                        rs485-delay-rts-before-send
clocks               pinctrl-0                   rs485-enabled-at-boot-time
compatible           pinctrl-names               rs485-rts-on-send
fsl,uart-has-rtscts  reg                         rts-gpios
interrupts           rs485-delay-rts-after-send  status

溝渕 様
masa.yamaguchiです。

ご質問につきまして回答いたします。
ご指摘の場所に(soc配下)にaips-bus@2100000が存在しませんでした。
(添付資料をご確認ください)

ファイル ファイルの説明
armadillo-610デバイツリー.png

溝渕 様
masa.yamaguchiです。

追加情報です。
/proc/device-tree/soc/bus@2100000/serial@21e8000
(api-busではない)
に対象と思われるファイルがありましたので報告いたします。

/proc/device-tree/soc/bus@2100000/serial@21e8000 # ls
clock-names                  fsl,uart-has-rtscts          pinctrl-names                rs485-rts-on-send
clocks                       interrupts                   reg                          rts-gpios
compatible                   name                         rs485-delay-rts-after-send   status
dma-names                    phandle                      rs485-delay-rts-before-send
dmas                         pinctrl-0                    rs485-enabled-at-boot-time
ファイル ファイルの説明
armadillo-610デバイツリー_02.png

溝渕です。

> ご指摘の場所に(soc配下)にaips-bus@2100000が存在しませんでした。

すみません。Armadillo Base OS対応版をご利用ですね。 "bus@2100000"で読み換えてください。

溝渕 様
masa.yamaguchiです。
> すみません。Armadillo Base OS対応版をご利用ですね。 "bus@2100000"で読み換えてください。
読み替えて確認しました。
添付資料の差分が存在しました。(資料左が溝渕 様ご提示分。右がこちらで確認した分)
差分としては、こちら調査分について、以下が存在しました。
・dma-names
・phandle
・dmas

ファイル ファイルの説明
デバイツリー差分.png

溝渕です。

すみません、linux-5.10-atのバグです。

Device Treeのパラメータが正しく無い為に、RS485が無効とみなされていました。添付のパッチ( 0001-arm-dts-610-extboard-Fix-RS485-parameters.patch)を適用する事で正しく動作する事を確認済みです。

変更されるのは、Device Treeのみです。適用後に再度動作確認をお願いいたします。

ファイル ファイルの説明
0001-arm-dts-610-extboard-Fix-RS485-parameters.patch

溝渕 様
masa.yamagtuchiです。

catコマンドでDEがHIGHになる事象はなくなりました。
しかしながら、cat /dev/ttymxc1 を実施し、
PCから文字を送信しても、「cat /dev/ttymxc1 」で受信待ちの状態のまま
何も文字は出力されませんでした。
お手数をおかけしますが、溝渕 様の実施されたRS485のデータ受信確認方法について
ご教示頂きたいです。

溝渕 様
masa.yamagtuchiです。

申し訳ございません。自己解決しました。
送信側と受信側でパリティありにしたところ、
受信側(armadillo-610):catコマンド、送信側:文字入力 にて、受信確認ができました。
ありがとうございました。

溝渕です。

armadilloで以下のコマンドを入力し、

armadillo# stty -F /dev/ttymxc1 speed 115200
armadillo# stty -F /dev/ttymxc1 -echo
armadillo# cat /dev/ttymxc1

PCに接続した、USB-RS485経由で文字を出力し、armadilloのコンソールに表示される事を確認しました。上記ではボーレートを115.2kbpsに設定していますが、環境に合わせて適宜指定してください。

また、半二重通信ですので、tty layerのecho(入力文字をエコー)が有効だと正常に通信できません。これは対向機器についても同様です。

溝渕 様

masa.yamaguchiです。

ご回答ありがとうございます。
溝渕 様にご教示頂いた方法で、
PCに接続した、USB-RS485経由で文字を出力し、armadilloのコンソールに表示される事を確認できました。
お手数をおかけしてすみませんでした。

溝渕です。

> PCに接続した、USB-RS485経由で文字を出力し、armadilloのコンソールに表示される事を確認できました。

期待通り動作して良かったです。

この度は弊社のLinuxカーネルの不具合によりご迷惑をお掛けして大変申し訳ございませんでした。再度リリース基準を見直し、同様の問題が発生しないよう務めて参ります。