Estoy intentando leer y escribir datos en un bus LIN, que es un bus de un solo cable. Como tal, solo un "módulo" (mi PIC es un módulo en una red) tiene permiso para hablar a la vez. Estoy usando un transceptor MCP2004 LIN y mi dispositivo es un esclavo en la red. No estoy seguro de qué hardware utilizan el maestro y otros esclavos.
El problema con el que me estoy topando es que a veces, un byte se inserta en el Bus al mismo tiempo que presiona uno, lo que resulta en un error de trama.
En mi firmware, tengo una rutina de servicio de interrupción para RX desde ese Bus, y tiene el mayor nivel de prioridad de ISR (7). El problema es que a medida que el programa continúa ejecutándose, no siempre es posible saber si se han recibido datos.
Ahora mismo, verifico el tamaño de mi búfer RX antes de la transmisión, pero a veces el byte se recibe después de ese condicional, pero justo antes de escribir los datos en el bus. También estoy verificando UxSTA, pero dudo que eso ayude, ya que si hay datos en el búfer de hardware, el programa estaría en el ISR, y no en mi código principal.
Puede ser digno de notar que no estoy transmitiendo en un ISR.
¿Cuál es la mejor manera para que yo maneje esta contención? ¿Es recomendable mantener el programa en el ISR durante la totalidad de la recepción de datos? El protocolo contiene un byte de longitud de mensaje y una suma de comprobación.