¿Cómo se calcula crc5 para un token usb?

3

Capturé los paquetes usb en un mouse usb1.1 usando un analizador lógico genérico de 24 mhz.

aquí está la captura sigrok para el primer token.

segúnlosdocumentosusb..secalculaunCRC5paraeltokenteniendoencuentaloscamposdedirección(7bits)ypuntofinal(4bits).

dadoquetantoeladdrcomoelendpsonceroparaestatransacción,los11bitsson-00000000000,porloqueelcrccalculadoporelpolinomiocrc5(100101)deberíadarcero,peronopuedoentenderqueelcampocrces0x2.

ahoraparaunatransaccióndiferente...despuésdequeelhosthayaasignadoladirecciónaldispositivo.

loscamposson--addr-11;endp-0;

entonces,desdelahojadedatos (pág. 173) , el campo final de 11 bits es - 11010000000. cuando crc5 se calcula en este campo ... da 4 que coinciden correctamente con el campo crc. Utilicé el método de división larga para calcular el crc.

¿Estoy calculando mal el crc para el primer token?

    
pregunta YsK

1 respuesta

2

El USB CRC5 usa un valor de registro de desplazamiento inicial de 11111b (5 unidades seguidas). La razón de esto es que sin él, el CRC no puede detectar alargar o acortar un mensaje que lleva con ceros. Esto se demuestra en su secuencia particular, donde el CRC siempre es cero para cualquier longitud de ceros iniciales si utiliza un valor inicial de 00000b.

Este es un problema bastante común en las implementaciones de CRC.

    
respondido por el Jon

Lea otras preguntas en las etiquetas