I am having problems with the industrial Linux computer I am working with to provide RS485 communication with several connected devices. I was faced with the fact that the IO contacts used by the USART RS485 driver are set to different levels at startup, and not in the RS485 standby / tri-state. As a result, other devices on the bus are blocked for more than 30 seconds while the device boots up, causing all kinds of external problems. The course of events can be viewed in the attached image, where I measured the output voltage with an oscilloscope during startup.
I assume that the actual driver does not start until the voltage levels reach the levels of three states (for example, ~ 2.2 V for this device). After that, everything works as expected.
I tried to find any configuration files to set the default I / O level at boot (assuming that this could be set by the loader), to no avail.
In addition, I tried to use a startup script to run “early enough” to install DATA-high, but the device in question does not provide any interface for managing these contacts like regular GPIOs, as far as I can tell.
Any help, advice or ideas would be greatly appreciated!
EDIT: I am not an experienced Linux developer, so please note if I have left any important details.
Some specifications:
- ARM920T rev 0 (v41) CPU
- Linux 2.6
- Busybox
- Atmel USART
:
Linux 2.6.28.10 (root @) ( gcc 4.1.2) # 94 PREEMPT 29 10:22:19 CET 2013
CPU: ARM920T [41129200] 0 (ARMv4T), cr = c0003177
/...
... /
RS485 /dev/ttyS 3
/...
... ( , 30 )
... /
atmel_usart.3: ttyS3 MMIO 0xfffcc000 (irq = 9) - ATMEL_SERIAL
atmel_serial.3: RS485 RTS
/...
...
... /
: https://drive.google.com/file/d/0B2XYl1mNCa8jNUZ5V0Nic1hkU0U/view
:
, : UART: UART RTS
, .
