Armadilloフォーラム

RS485のDE/REのGPIO制御

yamaie

2025年7月4日 12時36分

==========
製品型番:
Debian/ABOSバージョン:3.21.3-at9
カーネルバージョン:5.10.236-2-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
お世話になっております。

LPUART5にて、RS485通信を行うことを考えております。
LPUART5の場合、RTSにアサイン可能なピンでArmadilloから出力されているものがない(PTE5はSDHC2で使用予定)ようですので、RS485レシーバーのRE/DEの制御について、ドライバ側で送信時にGPIOを駆動してこれらを制御することを考えています。

デバイスツリーからLPUARTのドライバはfsl_lpuart.cを使用しているようなのですが、実装を確認したところ、このドライバはrts-gpiosプロパティをサポートしていないようにみえております。こちらの理解が誤っていないか、確認させていただけませんでしょうか。他、代替手段などご存知であれば、ご教示いただきたくお願いいたします。

コメント

溝渕です。

> デバイスツリーからLPUARTのドライバはfsl_lpuart.cを使用しているようなのですが、実装を確認したところ、このドライバはrts-gpiosプロパティをサポートしていないようにみえております。こちらの理解が誤っていないか、確認させていただけませんでしょうか。他、代替手段などご存知であれば、ご教示いただきたくお願いいたします。

恐らく、LPUARTのRTS機能に割り当てると、DE信号として適宜制御されるように見えます。
# 実際に動かしたわけではなく、ソースの確認だけをしました。

該当箇所は次の通りです。

drivers/tty/serial/fsl_lpuart.c:
static int lpuart_config_rs485(struct uart_port *port,
			struct serial_rs485 *rs485)
{
 :snip
	if (rs485->flags & SER_RS485_ENABLED) {
 :snip
		if (!(rs485->flags & (SER_RS485_RTS_ON_SEND |
				SER_RS485_RTS_AFTER_SEND)))
			rs485->flags |= SER_RS485_RTS_ON_SEND;
 
		if (rs485->flags & SER_RS485_RTS_ON_SEND &&
				rs485->flags & SER_RS485_RTS_AFTER_SEND)
			rs485->flags &= ~SER_RS485_RTS_AFTER_SEND;

溝渕です。

> 恐らく、LPUARTのRTS機能に割り当てると、DE信号として適宜制御されるように見えます。

LPUART5_RTSに割り合てる事が可能なピンは、以下3ピンですが、

PTE5 : SD I/Fに利用(armadillo-a9e/900開発セット)
PTE21: ethernet phyに接続(armadillo-900)
PTF13: ethernet phyに接続(armadillo-900)

と、armadillo-900を搭載した基板を作成しない限りは使えません。期待させて申し訳ございません。

LPUART5でrs485を利用する場合は、gpioでdeを制御できるようにlpuart dirverをカスタマイズするのが現実的かと思います。

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

いただいた内容から、LPUARTのRTSで制御する必要があると理解いたしました。
(GPIOによるDE駆動にはドライバが対応しておらず、デバイスツリーにおいて、
rts-gpiosプロパティでRTS制御に割り当てるGPIOを指定しても解釈されない。)

さきに記載したとおり、LPUART5はRTS割り付け可で未使用になっているピンがArmadillo-900の外に
出力されていないため、RS485用途としては難しいと判断し、別のUARTを使用する方向で検討してみます。