linux内核不应该能够自动切换RTS吗?
是的,从Linux 3.0开始就有用于此的内核框架。
在 include / uapi / asm-generic / ioctls.h中 有两个ioctl :
#define TIOCGRS485 0x542E#define TIOCSRS485 0x542F
在RS-485模式下检索和配置tty串行端口驱动程序。
这些ioctl使用
struct serial_rs485:
struct serial_rs485 { __u32 flags; #define SER_RS485_ENABLED (1 << 0) #define SER_RS485_RTS_ON_SEND(1 << 1) #define SER_RS485_RTS_AFTER_SEND (1 << 2) #define SER_RS485_RX_DURING_TX (1 << 4) __u32 delay_rts_before_send; __u32 delay_rts_after_send; __u32 padding[5]; };我已经在Atmel和Etrax SoC上使用了此RS-485功能,但是在Linux UART / USART驱动程序中,这些ioctl的实现非常稀疏。
如果您的驱动程序没有,请考虑自己实施。您可以使用 drivers / tty / serial / atmel_serial.c中的实现
作为指南。另请阅读用于RS485的Linux内核文档。



