¿Podemos enviar un archivo a través de una conexión Half Duplex?

Estoy trabajando en un diseño de cargador de arranque para un controlador Kinetis. Estoy usando esta aplicación Terminal ( https://sites.google.com/site/terminalbpp/ ). Puedo enviar textos como "Hola mundo" a través de mi puerto serie, depurando el código usando el depurador de enlaces J de Segger en mi placa.Envío de mensajes de texto

Pero cuando trato de enviar el archivo de la aplicación después de programar la placa con mi código de cargador de arranque, la terminal no responde.

¿Es porque mi conexión en serie es semidúplex (RS 485) o porque hay algún error en mi código?

No sé si la conexión semidúplex sería una razón. Quería saber si ese sería el motivo. Si mi pregunta te suena tonta, por favor explícame la lógica.

Gracias por ayudar

Actualizar:

Este código proporciona la salida con éxito como se muestra en la imagen.

for(;;) { GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21); CLS1_SendStr("Hello World!\r\n", CLS1_GetStdio()->stdOut); WAIT1_Waitms(1000); CLS1_SendStr("Welcome Ganesh!\r\n", CLS1_GetStdio()->stdOut); }Pero este código

` static void ReadText(void) { uint8_t buffer[32], ch, i;

      for(;;) {
        GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
        CLS1_SendStr("Enter some text: ", CLS1_GetStdio()->stdOut);
        GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
        buffer[0] = '\0';
        i = 0;
        do {
          if (CLS1_KeyPressed()) {
            CLS1_ReadChar(&ch); /* read the character */
            if (ch!='\0') { /* received a character */
              buffer[i++] = ch; /* store in buffer */
              if (i>=sizeof(buffer)) { /* reached end of buffer? */
                buffer[i] = '\0'; /* terminate string */
                break; /* leave loop */
              }
              if (ch=='\n') { /* line end? */
                buffer[i] = '\0'; /* terminate string */
                break; /* leave loop */
              }
            }
          }
        } while(1);
        GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
        CLS1_SendStr("You entered: ", CLS1_GetStdio()->stdOut);
        CLS1_SendStr(buffer, CLS1_GetStdio()->stdOut);
        CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut);
      }
    }`

Se depura en la placa sin ningún error, pero en la aplicación de terminal no hay cambios. GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21); Este fragmento de código habilita y deshabilita el transmisor mientras envía y recibe respectivamente. ¿Estoy cometiendo algún error al usar este fragmento de código?

Respuestas (2)

Para RS485, debe implementar el protocolo de enlace de hardware mediante RTS. Cuando desea enviar caracteres a través de UART, el RTS habilita el transmisor, mientras que recibir el RTS desactiva el transmisor y cambia al modo de recepción. RS485 se usa generalmente en comunicaciones maestro/esclavo. donde el maestro envía una consulta: RTS ON->TX->RTS OFF->RX y el esclavo responde: RX->¿El maestro me consulta?->RTS ON->TX (respuesta)->RTS OFF->RX.

Gracias por la info. Ahora entiendo claramente lo que sucede.
Oye, ¿puedes volver a revisar mi consulta y ayudarme? lo he actualizado Gracias
¿Ha intentado encontrar primero el código listo para su plataforma? El error es que envía el texto al búfer de UART, pero no espera que se emitan todos los caracteres (los caracteres aún se emiten desde UART cuando ejecuta las siguientes líneas); necesitaría ISR para establecer/restablecer RTS. O algunas MCU ya tienen UART con capacidad de protocolo de enlace automático, solo necesita iniciar correctamente la UART, primero busque las posibilidades que admite su MCU. Entonces tendría que usar un pin MCU que está predefinido como señal RTS.

Definitivamente, es posible enviar archivos a través de enlaces semidúplex, pero deberá usar un protocolo semidúplex en el que el remitente detiene el envío cada vez que espera una respuesta del receptor.

Gracias por la info. Sí, investigaré lo del protocolo.
Oye, ¿puedes volver a revisar mi consulta y ayudarme? lo he actualizado Gracias