Obtención de información de reloj / hora desde la PC a un STM32F4

0

Suponga que conecto una placa de microcontrolador (como un STM32F4) a una PC a través de USB. ¿Hay algo en el protocolo de comunicación USB que contenga datos del reloj del host? En otras palabras, ¿puedo sincronizar el microcontrolador con el reloj de la PC simplemente conectándolo a un USB?

Si eso no es posible, ¿podría sugerir alguna forma inteligente de esfuerzo mínimo para obtener la información del reloj desde la PC al STM32F4?

Supongo que siempre podría escribir algún software para ejecutar en la PC en segundo plano y proporcionar esa información al STM32F4, y lo haré si es necesario, pero me gustaría evitarlo.

También podría usar un escudo de red y hacer que el STM32F4 consulte la PC a través de la red, pero me gustaría mantener bajos los costos y la complejidad al no usar ningún escudo adicional.

También podría hacer que el STM32F4 ejecute su propia base de reloj, pero esa no es una opción, debe estar sincronizada con esta PC en particular hasta la segunda, incluso si la PC en sí no está sincronizada con NTP.

Por cierto, la sincronización está en el nivel de microsegundos.

EDITAR:

Encontré esto para la placa Arduino: enlace

    
pregunta Youssef Kamoun

3 respuestas

2

Creo que la precisión de microsegundos, o incluso de 10 microsegundos entre la PC host y un microcontrolador a través de USB será muy difícil.

Incluso con un programa que se ejecuta en la PC host con acceso a un reloj preciso de 1µs, no hay garantía de que su programa podrá anotar el puerto USB en el STM32F4. Fácilmente podría ser de 250 µs o más después de que el programa anfitrión reciba el tiempo antes de que el STM32F4 reciba el tiempo.

Por lo tanto, tendrá que implementar un algoritmo que resuelva los errores y los corrija.

Hay un Internet Time Protocol (NTP) de Internet que utiliza un algoritmo para sincronizar el tiempo, pero solo es preciso para milisegundos.

También existe el Precision Time Protocol (PTP) que apunta a la precisión de microsegundos, por lo que este es el que hay que entender. .

Como quiere hacer todo esto en el software, deberá encontrar una implementación que sea lo suficientemente comprensible como para poder extraer las partes que necesita.

Busqué en la web "Precision Time Protocol a través de USB" y encontré un montón de artículos y notas de aplicación potencialmente útiles. Te sugiero que los mires y vuelvas con preguntas específicas.

Me sorprendería si encuentra alguna implementación de PTP para STM32.

Un enfoque alternativo podría ser usar señales de tiempo GPS. Con un GPS conectado a la PC y otro al STM32F4, es posible que pueda medir a qué distancia del GPS de la PC anfitriona, basándose en una base de tiempo de trituración.

    
respondido por el gbulmer
1

En realidad, creo que la especificación de USB también tiene una provisión para transferencias de interrupción que tiene una latencia máxima de 1 ms. Suponiendo que su PC era el host y su STM32F4 era el dispositivo, creo que el controlador en la PC podría acceder al reloj en tiempo real, iniciar una transferencia de interrupción con la hora actual del host. Una vez recibido, el STM32F4 compararía la hora del host con la hora actual del dispositivo y respondería al host con la diferencia horaria.

Fundamentalmente, deberá realizar un seguimiento de 4 valores:

  • Host Time
  • tiempo de transporte al dispositivo
  • Tiempo de dispositivo
  • Tiempo de transporte de vuelta al host

Dependiendo de qué lado desea ser "más inteligente", el host puede hacer un seguimiento de estos y enviar la hora esperada del dispositivo al dispositivo. O el lado del dispositivo puede rastrear estos tiempos. Mi pensamiento es que el lado del host que los sigue sería el más preciso. Lo ideal sería que si los chips de la controladora USB tuvieran una marca de tiempo de hardware, podría llegar a niveles de sincronización de nanosegundos bajos. Con el software, creo que podrás lograr un microsegundo o inferior.

    
respondido por el GLB
0

Las respuestas a sus preguntas están, por supuesto, en la especificación USB. Léelo.

Brevemente, el host USB envía un mensaje de sincronización de cuadros a intervalos regulares precisos. Esto es 1 ms para USB de baja y máxima velocidad. Recuerdo vagamente que es más rápido, como 250 µs en USB de alta velocidad. Una vez más, lea la especificación.

Estos mensajes de sincronización de cuadros tienen requisitos de tiempo bastante precisos, y se pueden usar para obtener el tiempo relativo en el dispositivo. No hay nada en el USB que requiera transferir el tiempo absoluto del host a un dispositivo.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas