¿Cómo funciona el almacenamiento en búfer en el RTC MCP79410?

1

De la MCP79410 hoja de datos , p.16:

¿No significa esto que los datos se almacenan en búfer cuando leo el registro de segundos, luego otra vez cuando leo el registro de minutos, y así sucesivamente? Esto significaría que no hay ningún búfer en absoluto. Espero que los datos se almacenen en búfer, por ejemplo. cuando leí el registro de los segundos y cuando leí el registro de los minutos, leería desde el búfer (que permanecería sin cambios).

¿Puede alguien arrojar una luz sobre esto?

    
pregunta Joris Groosman

1 respuesta

1

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.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas