Hola
Estoy teniendo un comportamiento extraño.
El contexto es una edu-ciaa-nxp tomando caracteres por uart-usb y pasándolos a otra por uart-232. Ésta hace echo, los guarda en un buffer tras haberlos transformado y cuando se llena el buffer lo envía de a una letra.
En esta secuencia se puede ver el diálogo, primero va un patrón (
"ABCDEF0123456789") luego ese patrón transformado (
"BCDEFG123456789:") y el mensaje de inicio ("
Ready "). Al enviar la primera letra por terminal,
aparece basura.
miniterm.py /dev/ttyUSB1 9600
--- Miniterm on /dev/ttyUSB1 9600,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ABCDEF0123456789BCDEFG123456789:Ready a�␡␀␐␀␀␀␀␀�␀ �'␀␚bcdefghijklmnopqcdefghijklmnopqr
patron |transformacion | mensaje listo ^ basura | normal | devolución buffer
| | | | |
| | primera letra
(patron
+--------+ +------------+ +-------------------+
|miniterm|<---UART-USB--->|edu-ciaa-nxp| <---UART-232--->|edu-ciaa-nxp-buffer|
+--------+ +------------+ +-------------------+
lee letra | |
>--------- letra ---------> |
| >------------ letra --------------->
| | |
| <------------ letra ---------------< FALLA EN LA PRIMERA
| muestra en |
| lcd poncho plc |
<--------- letra ----------< |
muestra | |
feedback | transforma y
| | guarda en buffer[16]
al llenar buffer
| | |
| <--------- cada letra -------------<
| muestra en |
| lcd poncho plc |
<------- cada letra ---------<
muestra
Sólo ocurre con la primera letra, sea está la que sea.
La falla no está en la ida, pues no afecta el contenido del buffer. Sí se vé en el display lcd. No he podido hacer debug por otro problema extra, quizás en otro hilo luego, supongo que tengo que cambiar de versión de openocd (.undefined debug reason 7 - target needs reset)
No sé si tiene relación con la conversación en ciaa-hardware [1], relativa a problemas en el arranque, estoy compilando en el tree corregido para edu-ciaa-nxp-buffer y en master para edu-ciaa-nxp pues necesito el lcd.
Si reemplazo la
edu-ciaa-nxp-buffer que está de prueba por la placa sobre la que realmente estoy trabajando (tiene su problema pero es distinto, mencionado en [1] tambien), funciona bien.
El código del lado de edu-ciaa-nxp-buffer es este, el repo completo [2]
while(1) {
if ( uartReadByte( UART_232, &dato ) ){
// byte transformado
buffer[bufferIdx] = dato + 1;
// feedback
uartWriteByte( UART_232,dato);
++bufferIdx;
if ( bufferIdx >= BUFFER_SIZE ) {
for (bufferIdx = 0; bufferIdx < BUFFER_SIZE; ++bufferIdx) {
uartWriteByte( UART_232, buffer[bufferIdx] );
}
bufferIdx = 0;
}
}
}¿Alguna pista?
[1] [CIAA-Hardware] Problemas en arranque cuando se usa el oscilador a XT (CIAA NXP y EDU CIAA NXP)
[2]
https://github.com/cpantel/MicroTerminalAES/tree/TestUART