La implementación de transferencias USB isócronas en (al menos algunos) microcontroladores STM32 tiene una característica muy extraña.
Se llama campo EONUM (cuadro par / impar).
Básicamente, el valor del campo determina en qué fotogramas (impares o horno) las transferencias isócronas serán recibidas por el microcontrolador. Por lo tanto, si está enviando sus datos a cada fotograma, a menos que cambie el valor del campo a cada fotograma, obtendrá exactamente un 50% de "pérdida" de paquetes.
Al voltear el campo, cada cuadro parece realmente molesto, y realmente no puedo ver de qué manera es útil esta función. El manual apenas menciona la función (busque EONUM
, SODDFRM
o SEVNFRM
), pero no proporciona explicación alguna.
Esto parece algo similar a la sincronización de alternancia de datos, por ejemplo. transferencia masiva (que es obligatoria en el estándar), pero por lo que puedo decir, la especificación de USB no dice nada sobre este tipo de sincronización o similar para las transferencias iso (mi procesador STM32 admite solo la velocidad máxima, por lo que la secuenciación PID no tiene nada que ver con , tampoco).
El transmisor y el receptor de datos deben tener sus bits de secuencia sincronizados al inicio de una transacción. El mecanismo de sincronización utilizado varía según el tipo de transacción. La sincronización de conmutación de datos no es compatible con las transferencias isócronas.
Los puntos finales de alta velocidad, alto ancho de banda e interrupción de las interferencias admiten una técnica de sincronización de datos similar pero diferente llamada secuenciación de datos PID. Esa técnica se utiliza en lugar de la sincronización de conmutación de datos. La sección 5.9.1 define la secuenciación de datos PID.
Al final, simplemente establecí EONUM
de acuerdo con el número de trama actual en el controlador SOF para lograr una transferencia sin pérdidas.
¿Alguien puede explicar el propósito de la función?
Puede encontrar algunas menciones de personas que luchan con esta función en Internet, por ejemplo. Aquí: enlace