Estoy trabajando en un proyecto que utiliza el módulo USB integrado en el MSP430F5529, específicamente usando la placa de desarrollo MSP-EXP430F5529LP de TI. Estoy usando la API USB provista en MSPWare.
El host se comunica con mi dispositivo a través de MODBUS, y estoy guardando la velocidad de transmisión actual en NVM. Generalmente, para cambiar la velocidad en baudios, escribo un valor en un registro MODBUS. El dispositivo lee este valor y configura sus UART en consecuencia, para que pueda actuar como un puente entre el USB y un dispositivo TTL.
El problema es que no todas las implementaciones de MODBUS utilizarán este registro MODBUS como configuración de velocidad en baudios, por lo que escribir en esa dirección puede no tener la intención de cambiar la velocidad en baudios. Por lo tanto, este método tiene que ir.
Esperaba poder detectar la velocidad en baudios que se utiliza para comunicarse a través de la señal USB. El primer pensamiento fue utilizar un temporizador para medir el ancho del bit de inicio y usarlo para calcular la velocidad en baudios. El problema con esto es que 1) necesito enviar un byte ficticio completo a través de USB a mi dispositivo para detectar la velocidad en baudios, antes de iniciar la comunicación normal. El otro problema es que la forma en que se construye la API de MSP430 USB, no parece que tenga acceso a los bits individuales a medida que entran, sino que el mensaje se almacena en un búfer que se proporciona una vez que se completa el mensaje. No podría cronometrar el bit de inicio en este evento.
No creo que haya una manera de simplemente "saber" cuál es la velocidad en baudios del host sin enviar datos, ya que esa información (que yo sepa) no se comunica a través del bus. Por favor, corrígeme si me equivoco.
¿Cómo se puede hacer para determinar la velocidad en baudios de una conexión USB, preferiblemente sin enviar primero un byte ficticio? No estoy completamente convencido de que esto sea posible, parece estar pidiendo lo imposible, pero pensé que alguien aquí podría darme una respuesta definitiva.
He revisado los documentos de TI que describen el módulo USB, la API y su aplicación y aún no he encontrado una solución a este problema.