La salida RS232 siempre sigue con un 0x0b adicional

1

He descargado el minsoc de los opencores y viene con un microprocesador junto con un rs232 núcleos. He configurado todas las cadenas de herramientas y descargo el diseño en mi FPGA.

Ejecuto un programa simple que agrega 1 a lo que recibe el rs232 y lo envío a la computadora. Entonces puedo ver que las letras que escribo se envían de vuelta a la computadora. Pero siempre hay un byte final 0x0b cada vez que envío algo.

por ejemplo Si envío A, obtendré A0x0b. Si envío AAAA, obtendré AAAA0x0b.

Luego escribo un programa en C para ejecutarse en el procesador como se muestra a continuación.

  while (1){  //endless looping
    //send 16 bytes from computer
    for(i = 0; i < 16; i++) {
        //save the received byte to an array of 16 bytes
        B[i] = uart_getc();

        //pass array value to the AES core
        //this is an IO module using memory map.
        REG8(AES_BASE + AES_DR) = B[i];
    }

    //send the received 16 bytes back to computer
    for(i = 0; i < 16; i++) {
        uart_putc(B[i]);
    }

Después de programar el FPGA, si envío los primeros 16 bytes, recuperaré todos los bytes. Pero cuando envío los segundos 16 bytes, insertará algunos caracteres adicionales 0x0a 0x0b. p.ej. Si envío 3333333333333333, recibiré 0xa0xb3333333333333333

Cuando envío los terceros 16 bytes (también 3333333333333333), recibiré 30xa0xb333333333333333. Y este patrón continúa mientras envío los siguientes 16 bytes, 330xa0xb333333333333333 ... y así sucesivamente. El 0x0a0x0b sigue desplazándose a los últimos bytes.

¿Cuáles son las posibles razones para esto?

    
pregunta drdot

1 respuesta

1

¿Estás seguro de que es 0x0B ? Si fuera 0x0A o 0x0D , eso solo significaría que está agregando una nueva línea / retorno de carro en algún lugar del código de la MCU (vería si el printf que está usando lo hace automáticamente).

Tal como está, 0x0B es el carácter ASCII VT (pestaña vertical). Esto realmente huele a algo que está agregando un carácter de marca final de "fin de línea" / "fin de búfer en serie" en alguna parte.

Suponiendo que esto sea confiable y predeciblemente al final de cada conjunto de escrituras en el puerto serie, es posible que solo lo trate como un indicador de "fin de paquete" adicional para su interfaz serial

Teniendo en cuenta el comportamiento que está viendo, vería cómo se implementa la interfaz serial. También es posible que sea cual sea el software que esté utilizando para enviar datos en serie a la MCU, su terminal en serie (u otro software) esté agregando el carácter final.

¿Ha puesto un analizador lógico o DSO en las líneas seriales para confirmar que 0x0B realmente proviene de la MCU en el FPGA?

Además, ¿tiene la capacidad de agregar IO digital estándar en la MCU? Si lo hace, podría escribir una pequeña rutina serial de bit bang para localizar si el 0x0b se está agregando en la sección de recepción serial o transmisión serial de la MCU.

No podremos darte muchos más consejos sin conocer los detalles de tu configuración.
¿Qué toolchain / FPGA soft-core / FPGA-type estás usando?

    
respondido por el Connor Wolf

Lea otras preguntas en las etiquetas