El RTC tiene dos conjuntos de memoria. Uno en el que escribe cuando se dispara la interrupción del reloj, es decir, cuando es hora de actualizar los segundos / minutos / etc.
El segundo es el búfer. Cuando escriba la dirección que desea leer, inicie un comando de lectura i2c y copiará la primera memoria en el búfer.
Luego espera que leas la mayor cantidad de registros de tiempo al mismo tiempo / transacción i2c individual que quieras. si comienzas entre 0x00 y 0x1F, y intenta otra lectura, la transferencia automática pasa a 0x00, lo que desencadena otro evento de búfer.
- Cuando se inicia una lectura desde los registros RTCC (direcciones 0x00 a 0x1F)
- Durante una operación de lectura de registro RTCC, cuando la dirección del registro pasa de 0x1F a 0x00
- Los registros de hora normal deben leerse en una sola operación para utilizar los búferes a bordo y evitar problemas de transferencia.
El punto del búfer es que no lo haces:
[Inicio] [RTC ( Escribir Dirección)] [Registrar dirección]
[Reiniciar] [RTC ( Leer Dirección)] [Leer 1 byte]
[Detener]
[Inicio] [RTC ( Escribir Dirección)] [Registrar dirección + 1]
[Reiniciar] [RTC ( Leer Dirección)] [Leer 1 byte]
[Stop]
[Inicio] [RTC ( Leer Dirección)] [Leer 1 byte]
[Detener]
En su lugar, deberías estar haciendo:
[Inicio] [RTC ( Escribir Dirección)] [Registrar dirección]
[Reiniciar] [RTC ( Leer Dirección)] [Leer 7 bytes]
[Detener]
En el segundo ejemplo, acaba de leer los 7 bytes de fecha y hora, al mismo tiempo. Una vez realizado el buffer, no se preocupe de que el registro de segundos o de la hora se actualice mientras intenta leer todo el tiempo. En el primer ejemplo, se arriesga a lecturas no almacenadas (con múltiples búferes) que pueden resultar en obtener 11:59:01 pm el 5 de febrero, cuando el tiempo real es 11:59:01 pm el 4 de febrero, porque se volcó.
Leer bytes individuales y detener / reiniciar el bus es un desperdicio en las transacciones de bus y en mantener el tiempo preciso.