Tengo en mente una aplicación en la que necesito comunicarme vía SPI con una FPGA. Tanto el FPGA como el microcontrolador están bajo nuestro control, por lo que tengo la flexibilidad de definir el protocolo como mejor me parezca. Sin embargo, me preguntaba si hay algún buen ejemplo de uso que funcione bien.
Esto es lo que estaba pensando. (orientado a bytes)
Master: <REG><WR+LEN><MSTR_DATA><CHK>
Slave : < 0 >< 0 ><SLAV_DATA><CHK>
REG : register within FPGA to read or write
WR : read / write bit
LEN : 7 bit payload length (not including REG,WR+LEN or CHK)
MSTR: master data if write mode.
SLAV: slave data if read mode.
MCHK: 8 bit checksum of MSTR_DATA (by master), (CRC8, XOR, mod 256 etc)
SCHK: 8 bit checksum of SLAV_DATA (by slave ), (CRC8, XOR, mod 256 etc)
¿Es esto viable? ¿Hay mejores ejemplos por ahí?
EDIT1: algunas aclaraciones sobre los requisitos:
Echaría un vistazo a Modbus y HDLC Asynchronous framing para ver ejemplos de cómo transferir paquetes a través de un bus serie. También echaría un vistazo a esta pregunta Protocolo de comunicación punto a punto en serie simple en Stack Overflow .
Editar:
Dado que necesita gastos generales bajos, simplemente haría lo que está haciendo. Utilice la selección de chip para activar el paquete e incluir la longitud y la suma de comprobación. Probablemente me mantendría alejado de CRC8 ya que sus datos se basan en bytes, no en bits. Revisé varios dispositivos de memoria SPI y ninguno de los que miré incluía una suma de verificación.
Un ejemplo de una suma de verificación es la suma de verificación UDP . Para su ejemplo, eso se traduciría en el complemento de la suma mod 256.
Para el reconocimiento o la devolución del estado del esclavo, puede aprovechar el hecho de que SPI es dúplex completo y, en lugar de simplemente enviar nada, el esclavo puede enviar un byte de estado y en ese byte puede usar un bit para marcar errores de suma de comprobación. El estado también puede incluir un bit de ocupado para que pueda usar esto para sondear al esclavo para ver cuándo está listo para otro comando.
Creo que el modo SPI de la tarjeta SD tiene una suma de verificación.
jeffv
jeffv