Arduino comunicación serie RX alta

Estoy tratando de interactuar con un dispositivo a través de una serie asíncrona. Aquí está el requisito de encendido de la hoja de datos del dispositivo:

Requisitos de reinicio de encendido Al aplicar energía al DNT900, el pin 39 /RESET y el pin 31 RADIO_TXD deben mantenerse bajos inicialmente. El pin /RESET debe mantenerse bajo hasta que el voltaje de la fuente de alimentación alcance los 3,3 voltios durante 100 ms y luego establecerse en alto. El RADIO_TXD debe mantenerse bajo 10 ms adicionales después de que el pin /RESET pase a nivel alto. RADIO_TXD se reduce débilmente con una resistencia de 100 K ohmios para cumplir con el requisito de reinicio de encendido, a menos que esta línea esté alta por una señal externa.

La serie de hardware en mi arduino (pines 1 y 2) está elevando RX, por lo que no cumple con el requisito de encendido del dispositivo. El dispositivo entra en modo cargador de arranque y no se puede utilizar.

La única solución que he encontrado es usar SoftwareSerial y comentar dos líneas de código en la rutina de inicio de RX:

void SoftwareSerial::setRX(uint8_t rx)
{
  pinMode(rx, INPUT);
  //if (!_inverse_logic)
  //  digitalWrite(rx, HIGH);  // pullup for normal logic!
  _receivePin = rx;
  _receiveBitMask = digitalPinToBitMask(rx);
  uint8_t port = digitalPinToPort(rx);
  _receivePortRegister = portInputRegister(port);
}

Esto parece funcionar, pero ¿hay una mejor manera? ¿Hay una solución en hardware en lugar de software? Estoy buscando la solución más robusta y confiable para que el dispositivo no entre en modo de cargador de arranque y deje de funcionar como se esperaba.

Gracias.

¿Puede tal vez configurar el pin como una salida gpio, reducirlo, luego presionar el reinicio un tiempo extra, y solo luego configurar el pin como una salida UART?
puede usar if Serial.end() para este propósito. pruébelo, la documentación sugiere que puede usar los pines 0 y 1, el UART de hardware, como io de propósito general, si llama a end primero.

Respuestas (1)

debería poder manipular el pin con DigitalWrite, ANTES de iniciar la instancia de SoftwareSerial en ese pin. Si desea utilizar el puerto serial del hardware, es posible que deba agregar una lógica externa Y el pin serial del hardware con otro de los pines digitales de Arduino y luego puede anular los primeros 100 ms más o menos, con una escritura digital en el pin de anulación. ¿tener sentido?

Sí, suena a sentido común. Estaba muy confundido porque mi dispositivo requería un requisito de encendido que no es compatible con UART, pero usa UART.
@sinaptik. suena como un caso clásico de una línea de señal de doble propósito. en realidad, las comunicaciones en serie deberían tener poco que ver con si el dispositivo se inicia en el cargador de arranque o no. en realidad, probablemente debería haber un pin diferente para eso, ya que es posible que muchos controladores seriales no puedan controlar tan finamente las señales en sus UART de hardware. ver si arduino puede, según el comentario de Chris S. o usar software serial. o use una lógica externa para ayudar a interactuar con esta línea de doble propósito algo no estándar.