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

0

Estoy trabajando en el diseño de un cargador de arranque para un controlador kinetis. Estoy utilizando esta aplicación de Terminal ( enlace ). Puedo enviar mensajes de texto como "Hola mundo" a través de mi puerto serie, al depurar el código utilizando el depurador de enlaces J de Segger en mi tablero.

Perocuandointentoenviarelarchivodelaaplicacióndespuésdeprogramarlaplacaconmicódigodelcargadordearranque,elterminalnoresponde.

¿SedebeaquemiConexiónenserieessemidúplex(RS485)oporquehayalgúnerrorenmicódigo?

Nosésilaconexiónhalf-duplexseríaunarazón.Queríasabersiesoseríaunarazón.Simipreguntatesuenatonta,porfavorexplícamelalógica.

Graciasporayudar

Actualizar:

Estecódigoproporcionalasalidacorrectamentecomosemuestraenlaimagen.

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] = '
      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] = '%pre%';
        i = 0;
        do {
          if (CLS1_KeyPressed()) {
            CLS1_ReadChar(&ch); /* read the character */
            if (ch!='%pre%') { /* received a character */
              buffer[i++] = ch; /* store in buffer */
              if (i>=sizeof(buffer)) { /* reached end of buffer? */
                buffer[i] = '%pre%'; /* terminate string */
                break; /* leave loop */
              }
              if (ch=='\n') { /* line end? */
                buffer[i] = '%pre%'; /* 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);
      }
    }'
'; i = 0; do { if (CLS1_KeyPressed()) { CLS1_ReadChar(&ch); /* read the character */ if (ch!='%pre%') { /* received a character */ buffer[i++] = ch; /* store in buffer */ if (i>=sizeof(buffer)) { /* reached end of buffer? */ buffer[i] = '%pre%'; /* terminate string */ break; /* leave loop */ } if (ch=='\n') { /* line end? */ buffer[i] = '%pre%'; /* 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 del terminal no hay cambios. %código% Este fragmento de código habilita y deshabilita el transmisor mientras se envía y recibe, respectivamente. ¿Estoy cometiendo algún error en el uso de este código?

    

2 respuestas

1

Para RS485 tienes que implementar el protocolo de enlace de hardware utilizando 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.

    
respondido por el Marko Buršič
1

Definitivamente es posible enviar archivos a través de enlaces half-duplex, pero necesitarás usar un protocolo half-duplex donde el remitente detiene el envío cada vez que espera una respuesta del receptor.

    
respondido por el Jasen

Lea otras preguntas en las etiquetas