Administrar el tiempo del sistema y el RTC en aplicaciones de alto nivel

El RTC (reloj en tiempo real) se usa para mantener el tiempo en un dispositivo Azure Sphere cuando el dispositivo pierde energía y no tiene acceso a una conexión de red después de reiniciar el dispositivo. Esto permite al dispositivo mantener el tiempo durante una pérdida de energía incluso si no tiene acceso a un servidor NTP.

Si estableces la hora del sistema, no se conservará cuando el dispositivo pierda energía. Para conservar el tiempo durante la pérdida de energía, debe llamar a la función Applibs clock_systohc. Cuando se llama a clock_systohc, la hora del sistema se empuja al RTC.

Requisitos rtc

Las aplicaciones que usan rtc deben incluir los archivos de encabezado adecuados y agregar la configuración RTC al manifiesto de la aplicación.

Archivos de encabezado

Incluya el encabezado rtc en el proyecto:

 #include <applibs\rtc.h>

Configuración de manifiesto de la aplicación

Para usar las API rtc y de reloj estándar, debe agregar la capacidad de aplicación SystemTime al manifiesto de la aplicación y, a continuación, establecer el valor en true. El manifiesto de la aplicación Azure Sphere tiene más detalles sobre el manifiesto de la aplicación.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3_RTC",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "HardwareAddressConfig": true,
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": true,
    "TimeSyncConfig": true
  }
}

Obtener la hora del sistema

Para obtener la hora del sistema, llame a la función estándar clock_gettime .

Establecer la hora del sistema

Para establecer la hora del sistema, llame a la función estándar clock_settime .

Sincronizar la hora del sistema con rtc

Cuando se establece la hora del sistema, no se conserva cuando el dispositivo pierde energía. Para conservar el tiempo durante la pérdida de energía, llame a la función applibs clock_systohc . Cuando se llama a clock_systohc el tiempo del sistema se empuja al RTC.

Configurar el servicio de cliente NTP

El servicio de cliente NTP está habilitado de forma predeterminada. Si usted establece la hora del sistema mientras el servicio del cliente NTP está habilitado, sobrescribirá la hora UTC cuando el dispositivo tenga conectividad a Internet. Usted puede inhabilitar el servicio del cliente NTP; sin embargo, esto puede hacer que las actualizaciones de la nube en el dispositivo fallen si la diferencia entre el tiempo del sistema y el tiempo del servidor NTP es demasiado grande.

Establecer la zona horaria

La hora del sistema y la hora RTC se almacenan en GMT/UTC. Puede cambiar la zona horaria que usa la aplicación llamando a la setenv función para actualizar la variable de entorno TZ y llamando a la tzset función.

En el proyecto SetTimeFromLocation se muestra cómo usar la búsqueda IP inversa para obtener información de ubicación, obtener la hora de la ubicación y establecer la hora del dispositivo. Este proyecto forma parte de la Galería Azure Sphere, una colección de scripts, utilidades y funciones sin utilizar.

Azure Sphere OS admite algunos, pero no todos, formatos posibles para la variable de entorno TZ:

  • Puede establecer la zona horaria actual con o sin horario de verano (DST). Ejemplos: "EST+5", "EST+5EDT". Este valor es positivo si la zona horaria local está al oeste del Prime Meridian y negativo si está al este.
  • No puede especificar la fecha y hora en que debe entrar en vigor el horario de verano.
  • No puede especificar un archivo o base de datos de zona horaria.

Para mantener la configuración de zona horaria durante una pérdida de energía, puedes usar almacenamiento mutable para almacenar la zona horaria en almacenamiento persistente y, a continuación, recuperar la configuración cuando se reinicie el dispositivo.

Especificar un servidor NTP

El servicio del cliente NTP se puede configurar para obtener el tiempo de las fuentes múltiples. El origen de tiempo predeterminado es prod.time.sphere.azure.net, como se indica en los requisitos de red de Azure Sphere OS.

El cliente NTP intenta sincronizar el tiempo cada 15 segundos hasta que haya ocurrido una sincronización satisfactoria. Después de sincronizar correctamente el tiempo, intenta volver a sincronizar el tiempo una vez cada 24 horas. Cuando Azure Sphere realiza la sincronización de tiempo, primero usa un puerto de origen de cliente UDP aleatorio entre 32678-61000. Si se produce un error en este puerto, Azure Sphere intenta utilizar el puerto 124 como puerto de origen del cliente UDP.

Puede especificar que el sistema obtenga la hora de un servidor DHCP o puede especificar el origen de tiempo en la aplicación a través de Networking_TimeSync_EnableCustomNTP o Networking_TimeSync_EnableDefaultNtp Function.

Si se configura para utilizar DHCP para las fuentes del servidor horario, Azure Sphere procesará la opción DHCP 042 y el cliente NTP procesará solamente las dos primeras entradas enviadas en la opción DHCP, que deben aparecer en orden de preferencia. Estos se considerarán un servidor principal y un servidor secundario.

También puede configurar un servidor horario a través de Networking_TimeSync_EnableCustomNTP si desea especificar el servidor horario principal y secundario a través de la aplicación. La longitud máxima de cada nombre de dominio completo (FQDN) de cada servidor de tiempo es de 255 caracteres.

Reserva

  • Si el cliente NTP se configura para obtener los servidores de tiempo vía DHCP o API, se requiere un parámetro adicional para especificar el comportamiento de reserva.

  • El cliente intentará ponerse en contacto primero con el servidor horario principal. Si el cliente no puede obtener una respuesta válida del servidor horario, intentará el servidor horario secundario (si se especifica).

  • Si se especifica un servidor de hora secundario y falla, o si se produce un error en la opción de volver a los valores predeterminados Networking_NtpOption_FallbackServerEnabled del sistema operativo mediante errores, el sistema se pondrá en contacto con el prod.time.sphere.azure.net de origen de tiempo del sistema operativo predeterminado.

    • En el siguiente intervalo de sincronización de tiempo de 24 horas, el sistema operativo volverá atrás e intentará consultar el servidor horario principal.
  • Si ha especificado Networking_NtpOption_FallbackServerDisabled, el sistema operativo seguirá consultando el servidor principal y secundario cada 15 segundos hasta que se haya sincronizado correctamente con uno de los servidores de tiempo.

Dispositivos multihomed

La configuración del servidor de tiempo es una configuración global, no una configuración por interfaz. Si el dispositivo Azure Sphere es multihomed y ambas interfaces obtienen información del servidor NTP a través de DHCP, el último conjunto de opciones DHCP DHCP gana.

Muestra de tiempo del sistema

El ejemplo de tiempo del sistema muestra cómo administrar el tiempo del sistema y usar el RTC hardware. La aplicación de ejemplo establece la hora del sistema y, a continuación, usa la clock_systohc función para sincronizar la hora del sistema con rtc.

En el proyecto SetTimeFromLocation se muestra cómo usar la búsqueda IP inversa para obtener información de ubicación, obtener la hora de la ubicación y establecer la hora del dispositivo. Este proyecto forma parte de la Galería Azure Sphere, una colección de scripts, utilidades y funciones sin utilizar.

Ejemplo de NTP personalizado

El ejemplo DE NTP personalizado muestra cómo configurar el servicio del cliente NTP para obtener el tiempo de las fuentes múltiples.