Armadilloフォーラム

uart2を使用してRS-485通信

k.sato

2024年2月21日 9時33分

佐藤と申します。

お世話になっております。

●シリアル通信デバッグ(Armadillo Base OS)
https://armadillo.atmark-techno.com/forum/armadillo/16219

以前uart5でRS-485通信の質問をして下記の解決方法を教えていただきました。
> 2/ ソースツリーに arch/arm/boot/dts/armadillo-640-customize.dts ファイルを新に作って、以下の内容を保存します。

/dts-v1/;
/plugin/;
 
#include <dt-bindings/gpio/gpio.h>
#include "imx6ull-pinfunc.h"
 
&uart5 {        
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart5>;
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};
 
&iomuxc {
        pinctrl_uart5: uart5grp {
                fsl,pins = <
                        MX6UL_PAD_UART5_TX_DATA__UART5_DCE_TX 0x00008
                        MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX 0x1b0b1
                        MX6UL_PAD_UART2_RTS_B__GPIO1_IO23 0x00008
                >;
        };
};

> 3/ 以下のコマンドで dtbo (device tree overlay) を生成します

# Armadillo 640 でも、IoT Gateway A6E の defconfig を使います
atde$ make ARCH=arm armadillo-iotg-a6e_defconfig
atde$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640-customize.dtbo
  DTC     arch/arm/boot/dts/armadillo-640-customize.dtbo

新たにここにuart2でもRS-485通信を行うよう追加したいのです。
at-dtwebからCON14の3、4ピンにTX、RXを配置し、
arch/arm/boot/dts/armadillo-640-customize.dtsにuart2の設定を追加しました。

/dts-v1/;
/plugin/;
 
#include <dt-bindings/gpio/gpio.h>
#include "imx6ull-pinfunc.h"
 
&uart2 {        
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart2>;
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};
 
&uart5 {        
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart5>;
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};

これでarmadillo-640-customize.dtboファイルを作成し、Armadilloをセットアップして動作確認したのですが、
uart5で設定したrtsピンしかH/Lしていません。
何か設定の違いがあるのでしょうか?

以上、よろしくお願い致します。

コメント

armadillo-640-customize.dts ファイルと、armadillo-640-expansion-interface.dtsi ファイルを添付していただくことは可能でしょうか。

佐藤です。

返信ありがとうございます。

> armadillo-640-customize.dts ファイルと、armadillo-640-expansion-interface.dtsi ファイルを添付していただくことは可能でしょうか。
可能です。ファイルを3つ添付しました。
at-dtwebでのピン配の画面も添付しました。
RTS/CTSピンを配置しないのがいけないのでしょうか?

armadillo-640-customize.dtsでuart2とuart5のrts-gpiosを入れ替えてみたのですが、
uart5の送信のタイミングでgpio1_23がH/Lしています。
uart2も送信の波形は出ています。

よろしくお願い致します。

ファイル ファイルの説明
Device Tree Editor.png at-dtweb画面キャプチャ
armadillo-640-customize.dts uart2とuart5を追加
armadillo-640-expansion-interface.zip .dtsiのままではアップロードできないので圧縮

ファイルありがとうございます。
大変申し訳ありません。armadillo-640-at-dtweb.dts ファイルも添付していただけますでしょうか。

> ファイルありがとうございます。
> 大変申し訳ありません。armadillo-640-at-dtweb.dts ファイルも添付していただけますでしょうか。
添付しました。

よろしくお願い致します。

ファイル ファイルの説明
armadillo-640-at-dtweb.dts

先にいただいた armadillo-640-customize.dts は
> armadillo-640-customize.dtsでuart2とuart5のrts-gpiosを入れ替えてみたのですが、
上記を実施した後のファイルということでよいでしょうか。

ファイルの要求ばかりで申し訳ありませんが、
実際にarmadilloに書き込まれている、/boot/armadillo-640-at-dtweb.dtboと/boot/armadillo-600-customize.dtboと、
dmesgコマンドの実行結果もいただけますでしょうか。

> 先にいただいた armadillo-640-customize.dts は
> > armadillo-640-customize.dtsでuart2とuart5のrts-gpiosを入れ替えてみたのですが、
> 上記を実施した後のファイルということでよいでしょうか。
その通りです。

> ファイルの要求ばかりで申し訳ありませんが、
> 実際にarmadilloに書き込まれている、/boot/armadillo-640-at-dtweb.dtboと/boot/armadillo-600-customize.dtboと、
> dmesgコマンドの実行結果もいただけますでしょうか。
添付しました。

ファイル ファイルの説明
dmesg.txt dmesgコマンドの実行結果
dtbo.zip armadillo-640-at-dtweb.dtboとarmadillo-640-customize.dtbo

いただいた armadillo-640-customize.dtbo を fdtdump コマンドで逆コンパイルすると、uart2 が入っていないように見えます。
armadillo-640-customize.dtbo はどのように armadillo 上へ配置しましたでしょうか。
/boot 下に cp コマンド等で配置した場合は、persist_file /boot/armadillo-640-customize.dtbo を実行しましたでしょうか。

> いただいた armadillo-640-customize.dtbo を fdtdump コマンドで逆コンパイルすると、uart2 が入っていないように見えます。
> armadillo-640-customize.dtbo はどのように armadillo 上へ配置しましたでしょうか。
> /boot 下に cp コマンド等で配置した場合は、persist_file /boot/armadillo-640-customize.dtbo を実行しましたでしょうか。
再度、armadillo-640-customize.dtboをArmadillo上へ配置し確認しました。

しかし、この 添付したarmadillo-640-customize.dtbo を配置して persit_file を行いrebootすると
正常に起動できず、再起動を繰り返して起動できるようになりました。
dmesg.zipファイルとしてログを添付します。
これが行われて、armadillo の /boot/armadillo-640-customize.dtbo が前に正常に動作していた状態?
(armadillo-640-customize.dtboにuart5のみ追加)に戻っているようでした。

以上、よろしくお願い致します。

ファイル ファイルの説明
armadillo-640-customize.zip uart2とuart5を追加した.dtboを圧縮
dmesg.zip armadillo-640-customize.zipの.dtboファイル書換後に再起動を繰り返したログファイル

ありがとうございます。

armadillo-640-customize.dtsの方を以下のようにしてみるとどうでしょうか。

/dts-v1/;
/plugin/;
 
#include <dt-bindings/gpio/gpio.h>
#include "imx6ull-pinfunc.h"
 
&uart2 {        
        pinctrl-names = "default";
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};
 
&uart5 {        
        pinctrl-names = "default";
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};

佐藤です。

> armadillo-640-customize.dtsの方を以下のようにしてみるとどうでしょうか。

/dts-v1/;
/plugin/;
 
#include <dt-bindings/gpio/gpio.h>
#include "imx6ull-pinfunc.h"
 
&uart2 {        
        pinctrl-names = "default";
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};
 
&uart5 {        
        pinctrl-names = "default";
        status = "okay";
        fsl,uart-has-rtscts;
        rs485-rts-on-send;
        rts-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
        linux,rs485-enabled-at-boot-time;
};

教えていただいた「pinctrl-0 = ...」の行を削除することで
armadillo-640-customize.dtboを書換後の再起動で無事起動できるようになり
想定通りuart2、uart5での送信タイミングでそれぞれの送受信切替ピンがH/Lするようになりました。

ありがとうございました。