我正在使用一台工业 Linux 计算机来实现通过 RS485 总线与多个连接的设备进行通信时遇到问题。我遇到的是 RS485 USART 驱动程序使用的 IO 引脚在启动时设置为不同的电平,而不是进入 RS485 空闲/三态。结果,总线上的其他设备在设备启动时被阻塞超过 30 秒,引发各种外部问题。事件过程可以在附图中查看,我在启动期间用示波器测量了输出电压。
我的猜测是,实际驱动器在电压水平达到其三态水平之前不会启动(例如,此设备约为 2.2V)。之后,一切都按预期工作。
我试图找到任何配置文件来设置引导时引脚的默认 IO 级别(认为这可能由引导加载程序设置)无济于事。
此外,我尝试应用启动脚本来“足够早地”运行以将 DATA- 设置为高,但据我所知,有问题的设备没有提供任何接口来控制这些引脚作为常规 GPIO。
任何帮助、提示或见解将不胜感激!
编辑:我不是经验丰富的 Linux 开发人员,所以如果我遗漏了任何重要的细节,请强调。
一些规格:
- ARM920T 版本 0 (v41) CPU
- Linux 2.6 的专有发行版
- 使用 Busybox
- 爱特梅尔 USART 驱动程序
从引导日志中提取:
Linux 版本 2.6.28.10 (root@) (gcc 版本 4.1.2) #94 PREEMPT Tue Oct 29 10:22:19 CET 2013
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0003177
/...
.. ./
端口 /dev/ttyS3 的 RS485 模式已启用
/...
...(我猜这里大约需要 30 秒)
.../
atmel_usart.3: MMIO 0xfffcc000 (irq = 9) 处的 ttyS3 是 ATMEL_SERIAL
atmel_serial.3:将 RS485 RTS 引脚向下放置
/...
...
.../
完整启动日志: https ://drive.google.com/file/d/0B2XYl1mNCa8jNUZ5V0Nic1hkU0U/view
类似问题:
此处可能讨论了一个类似的问题:UART 初始化:防止 UART 拉高 RTS
但我不确定如何继续使用建议的解决方案。