Estamos utilizando un Beaglebone Black con el cabo Osso ( enlace ) para comunicarnos con otros equipos mediante una conexión 485 y Modbus RTU .
El pin de habilitación del conductor (DE) del chip DS485 de la capa está vinculado al GPIO 2_24, mientras que los pines RO y DI se conectaron al RX y TX UART1 respectivamente.
No hemos escrito ningún código para actuar en el GPIO2_24, excepto una capa superpuesta que lo establece como salida y modo GPIO en modo pin.
Estábamos solucionando algunos problemas de comunicación cuando notamos algo extraño: utilizando un osciloscopio, vimos que el pin de habilitación del controlador (DE) siempre era alto, pero de alguna manera el Beaglebone podía enviar solicitudes normalmente y recibir las respuestas correctas de los demás equipo.
Normalmente, esperaría que las 485 comunicaciones solo funcionaran con el pin DE ALTO cuando se transmitía y BAJA cuando se terminara, para evitar conducir el autobús cuando otros equipos responden.
En otras capas que usamos, esto se controló mediante UART4 RTS, pero no pude explicar por qué parece funcionar en este caso.
¿Hay alguna explicación sobre por qué funciona siempre con el DE?
EDITAR: La hoja de datos ( enlace ) dice:
Debido a la naturaleza multipunto del bus, puede producirse una contención entre los conductores. Esto no causará daño a la Los conductores, ya que cuentan con protección contra cortocircuitos y también con protección térmica de apagado. Apagado térmico detecta la temperatura de la matriz y coloca las salidas del controlador en TRI-ESTADO si ocurre una condición de falla que causa Disipación excesiva de energía que puede elevar la temperatura de la unión a + 150 ° C.
¿Quizás el chip detecta la contención y pasa al estado de alta impedancia, para luego recibir la respuesta del otro equipo?