¿Algún ejemplo de un protocolo basado en SPI con una suma de comprobación?

5

Tengo una aplicación en mente en la que necesito comunicarme a través de SPI con un 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 existen buenos usos de ejemplo que funcionen bien.

Aquí está 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)

¿Esto es viable? ¿Hay mejores ejemplos por ahí?

EDIT1: Algunas aclaraciones sobre los requisitos:

  • El microcontrolador es para leer y escribir pequeños bloques de datos a / desde El FPGA.
  • El FPGA apoyará operaciones de lectura / escritura en los registros.
  • Los registros pueden tener muchos bytes de profundidad. (como un fifo) o autoincremento (el siguiente byte de lectura o escritura viene de el siguiente registro).
  • me gustaría el operación incluyendo la suma de control / Ack de ocurrir en una sola transmisión.
  • Me gustaría que esto tenga una sobrecarga baja, algunas operaciones se recuperarán o publicarán de 5 a 10 bytes. El más grande podría ser 127 o 64.
pregunta JeffV

2 respuestas

2

Me gustaría ver Modbus y HDLC Encuadre asíncrono para obtener ejemplos de cómo transferir Paquetes sobre un bus serie. También me gustaría ver esta pregunta Protocolo de comunicación serial punto a punto simple sobre Desbordamiento de pila .

Editar:

Ya que necesitas bajos gastos generales, solo haría lo que estás haciendo. Utilice la selección de chip para bloquear el paquete e incluya la longitud y la suma de comprobación. Probablemente me mantendría alejado de CRC8 ya que sus datos se basan en bytes y no en bits. Revisé varios dispositivos de memoria SPI y ninguno de los que miré incluía una suma de comprobación.

Un ejemplo de una suma de verificación es la suma de comprobación de UDP . Para su ejemplo que se traduciría a los complementos de la suma mod 256.

Para obtener un ack o un estado de regreso del esclavo, puede aprovechar el hecho de que SPI es dúplex completo y, en lugar de no enviar nada, el esclavo puede enviar un byte de estado y en ese byte puede usar un bit para marcar los errores de suma de comprobación . El estado también puede incluir un bit de ocupado, así que puedes usarlo para sondear al esclavo para ver cuándo está listo y listo para otro comando.

    
respondido por el Rex Logan
1

Creo que el modo SPI de la tarjeta SD tiene una suma de comprobación.

    
respondido por el Thomas O

Lea otras preguntas en las etiquetas