Estoy trabajando con un dispositivo heredado que utiliza un protocolo "tipo SPI". Este dispositivo actúa como un:
- SPI "maestro", pero espera hablar con un solo dispositivo "esclavo". Eso no espera ningún intercambio de datos / salida desde el esclavo
- envía LSB primero
- pulsa la línea 'Selección de esclavo' (baja activa) para indicar el inicio de un "comando" (por lo tanto, en lugar de que esto sea una línea de selección de chip en SPI, es más un indicador de que un comando será enviado por el maestro)
- puede seguir una lista múltiple y variable de bytes de datos después de cada "comando" (siempre que la "Selección de esclavo" esté activa, los datos siguiendo el primer / primer byte de datos se interpreta como parámetros para el comando)
- un nuevo "comando" puede iniciarse solo después de que la línea de 'Selección de esclavo' se haya vuelto inactiva y se pueda activar de nuevo por pulsos
El protocolo que el maestro espera que siga el dispositivo "esclavo" se captura en el siguiente diagrama (Pg 12 de enlace ):
Voyaemulareldispositivo"esclavo" usando un PIC18F2550.
Dada esta información, ¿cómo detecto el inicio de un comando?
He escrito un código para capturar los datos del maestro y reenviarlos a través de la UART, pero no sé cómo hacerlo
- haga lo mismo cuando use el marco USB (ya que estoy utilizando el sondeo ocupado para leer datos desde el puerto SPI y una vez que todos los 8 bits están en, le envío el byte a través de UART)
- detectar cuándo la línea de 'Selección de esclavos' se activa o no (me temo que conectar una interrupción podría interferir con la biblioteca SPI integrada)
Quizás lo que pregunto es "cómo hago lo siguiente":
- detecta que la 'Selección de esclavo' está activa o no
- capture los datos entrantes del maestro sin perder ningún byte enviado (ya que el dispositivo esclavo no tiene forma de decirle al maestro que retransmita los datos)
- haga los dos anteriores mientras mantiene vivo el enlace USB y no lo agota el tiempo de espera (lo que puede suceder si el esclavo suele estar ocupado en las líneas SPI para obtener datos)
Las sugerencias y el código de muestra para al menos los dos primeros puntos serán muy apreciados