18 de diciembre de 2011

Nota de aplicación 5268 Firmware para las transiciones de poder de modo seguro

 

 

Resumen: En este documento se describen dos mejoras de firmware que se aplica a la versión de demostración 4.8p Código de Teridian Maxim ™ 71M6521 familia de la energía ICs metros. Estas mejoras hacen las transiciones entre los modos de alimentación de la corrección 71M6521 más confiable y el apoyo adecuado del reloj de tiempo real (RTC), después de volver al modo de la misión. En este documento se aísla de los cambios y se describen los detalles para que las actualizaciones se pueden adaptar en el firmware de los clientes, si es necesario.

Introducción

Fusibles Trim

Fusibles de corte son una forma de no volátil (NV) de memoria utilizadas en la producción de circuitos integrados de la máxima Teridian medición de energía para ajustar las características analógicas y digitales de los circuitos integrados. Después de la etapa de producción, el contenido de los fusibles de corte no se puede cambiar. Algunos ejemplos son los fusibles utilizados para cortar la V REFde tensión de ± 1 mV de 1.195 VDC y los fusibles utilizados para cortar la V BIAS tensión interna con el valor objetivo.

Durante la operación de la IC, el contenido de los fusibles de corte se leen y se actualiza el hardware de la IC a intervalos regulares, y los valores obtenidos por el fusible de ajuste leer se proporcionan tanto al hardware controlado por los valores del fusible y el fusible de registro lugares de E / S de memoria RAM (ver Figura 1 ). En el 71M6521 familia, un total de siete valores individuales fusible corte puede ser leído por primera escritura de cualquier número del 1 al 7 a E / S RAM registrar 0x20FD ( TRIMSEL ) y luego leer el valor del fusible correspondiente de E / S RAM registrar 0x20FF ( TRIM ).

Figura 1.  Trim mecanismo de fusible.
Figura 1. Trim mecanismo de fusible.

Malinterpretado de los fusibles de Trim

Los circuitos integrados 71M6521 apoyo de tres modos de bajo consumo (modo de espera, LCD sólo en el modo y la caída de tensión el modo). En los modos de bajo consumo de energía, las corrientes regulares de operación no están disponibles para la IC.

Extrema de interferencia electromagnética (EMI) o interrupciones graves y repetidas de la tensión de alimentación a veces puede afectar el ajuste de lectura / ciclo de actualización, lo que resulta en la mala interpretación IC uno de sus fusibles de corte. Si esto ocurre, una serie de fallas puede resultar. La probabilidad de fallas potenciales se incrementa cuando la fuente de alimentación rápida "oscila" entre la misión de la 71M6521 y modos de caída de tensión, que puede ocurrir cuando la tensión de alimentación de CA esté rampa arriba o hacia abajo poco a poco junto con una fuente de poder "blando". Esta oscilación provoca la 71M6521 para cambiar rápida y repetidamente entre el consumo regular actual (modo de misión) y bajo consumo de corriente (modo de caída de tensión). Fallos sobre la base de una lectura errónea de fusibles corte son extremadamente raros y sólo se puede ver cuando un gran número de medidores de energía de ciclo durante días o semanas.

IC fallas causadas por un malinterpretado de los fusibles de corte puede causar diversos síntomas, dependiendo de la lectura fusible corte se ve afectada. Los síntomas incluyen los siguientes:

  • Inesperado MPU ejecución del software. Dependiendo del firmware, la ejecución de software impredecible en algunos casos puede hacer que el reloj interno para detener, prevenir el temporizador de vigilancia de restablecer el medidor.
  • Cambios inesperados en los internos de las tensiones de red y los umbrales de detección. Esta falla podría causar que la tensión de alimentación externa aplicada al pin de V1 a ser malinterpretado, haciendo una transición inesperada en modo de suspensión cuando el despertador no ha sido establecida. En algunos casos, operando con una fuente de alimentación correctamente inicializado interno durante un período prolongado de tiempo puede dañar el RTC .

La eliminación de todas las EMI en un metro no es práctico, pero el firmware se puede detectar y evitar los problemas por encima de los fusibles de las pruebas de corte de la IC cuando se entra en modo de caída de tensión.

Otra cuestión abordada en esta versión de demostración nuevo código de corrección de deriva defectuosa RTC. Mayores códigos que contiene el código que RTC integrada a largo plazo jitter en la corrección de la deriva RTC después de reiniciar.

Casos de aplicación para la Mejora de Code

El código descrito en esta nota de aplicación se debe utilizar para todas las versiones de la 71M6521, incluyendo el 71M6521BE ,71M6521DE y 71M6521FE . Maxim recomienda incluir la corrección de firmware en todos los diseños existentes que contienen las baterías, y en todos los nuevos diseños.

Eventos posible fracaso en la transición Modo

Fusibles de corte son leídos por la lógica de fusibles en el 71M6521 en un bucle. Amplia repetidas transiciones de modo de poder y en ocasiones graves EMI podría afectar el funcionamiento apropiado de la lectura del fusible de corte. El mecanismo de fallo es el siguiente:

  1. El medidor se somete a múltiples transiciones de poder o eventos EMI en rápida sucesión.
  2. Un fusible de corte malinterpretado puede ocurrir en una transición de modo misión a caídas de tensión en metros, con una nuevade litio de la batería. El hecho de que el voltaje de la batería (generalmente 3.6 VDC) es diferente de la tensión de funcionamiento regular de la 71M6521 (típicamente de 3,3 V) contribuye al fracaso.
  3. Medidores equipados con baterías tienden a ser afectados en mayor medida. Esto se debe a un metro sin la batería se apaga cuando no hay tensión de red está presente y experimenta una energía limpia-on-reset ( POR ), cuando vuelve la tensión de red.
  4. Después de la transición de modo de poder, los síntomas de la insuficiencia anterior puede ocurrir. La forma exacta de un fracaso es impredecible e intermitente, ya que depende de la naturaleza de los trastornos de alimentación o EMI, el firmware del metro, la selección de la batería, el diseño de la fuente de alimentación, y en el fusible exacto del ajuste que se ve afectada por la malinterpretado. La mayoría de los diseños de metro no presentan síntomas, incluso en la calificación extensa.
  5. Cuando el medidor vuelve al modo de la misión, el aumento de las corrientes de funcionamiento están disponibles, y los valores de auto-ajuste correcto de la mecha de refresco. Sin embargo, el estado de metro puede estar dañado.

El evento de fallo de RTC

El código de RTC se ajusta el tiempo para compensar la deriva, mientras que el metro estaba en modo de bajo consumo. Sin embargo, el ajuste no está sincronizada con el inicio de un segundo, y por lo tanto se acumula en la fluctuación a la deriva.

Detalles de la demo Código 4.8p revisiones

Pruebas del Código

Una prueba práctica consiste en conectar las baterías nuevas en el medidor de placa de demostración, establezca los valores predeterminados de la pantalla para mostrar un valor de reloj de la RTC, entonces el ciclo de alimentación de CA cada 10 segundos durante ocho metros de semana. Los medidores pueden ser probados por una breve estabilización de la fuente de alimentación a la tensión nominal de CA. Código de éxito reanudará la operación y mostrar un reloj de tiempo razonable. El código que pasa ocho metros semanas es poco probable que falle en la calificación total. El nuevo código debe ser revisado a intervalos cada vez, comenzando con un metro y medio-hora.

Efectos secundarios de código

Demostración de revisión del Código 4.8p permite la interrupción PLL_OK muy temprano, antes de ejecutar main (). Esto asegura que una transición de modo bajada de tensión durante la inicialización del firmware se pondrá a prueba y se maneja. Otras interrupciones deben ser manejados cuidadosamente para evitar crear falsas fallas.

Demostración de revisión del Código 4.8p también mantiene un valor distinto de cero en el despertador en todo momento. En el modo misión, el valor de despertador no cuenta o causar un evento a menos que el IC inesperadamente entra en modo de suspensión o LCD.En ese caso, el despertador disparará, despertar el medidor, y recuperar la IC a partir del error. Este método puede afectar al código que depende del uso de un valor de puesta a cero del despertador.

Código de Ubicación

El vinculador debe ser ordenado para poner el código de corrección en los primeros 8 KB de memoria flash. En el IDE Keil ®, el comando de enlace se puede cambiar pasando el ratón sobre el espacio de trabajo, y para entonces seleccionar derecha> click> opciones BL_51 Busque Tab espacio de código. En el código de demostración, este comando pone los segmentos tan bajo en la memoria como sea posible:

? C_C51STARTUP,? PR? _? PLL_ISR? BATMODES_20,? PR? _? BATMODE_CHANGE? BATMODES_20 <rest, de los comandos de enlace para el código <Espacio Manual>

? C_C51STARTUP es el segmento que contiene el código de inicio del código de demostración.

? PR? _? PLL_ISR? BATMODES_20SAFE,? PR? _? BATMODE_CHANGE? BATMODES_20SAFE son los segmentos necesarios para ejecutar la rutina de código de demostración de PLL_OK interrupción.

PLL_OK interrupción

El siguiente código debe ser colocado en la rutina de interrupción PLL_OK, que se ejecuta cuando el modo de caída de tensión se detecta. Una copia de la prueba el código está en 4.8p en los principales \ batmodes_20.c

    extern void trim_test (void) pequeño de reentrada;

EA = 0;
CONFIG0 = 0; / / Nos aseguramos de que están corriendo tan rápido como nos sea posible.
IFlags = (~ IE_PLLFALL_) y (~ IE_PLLRISE_); / / fuerza una ventaja que se produzca

WAKE = 0x81; / / fuerza de una llamada despertador si el sueño se ve obligado

trim_test (); / / Desde la puesta en marcha del código.

Código de inicio

El código de inicio siguientes se debe utilizar en lugar de startup.a51. Una copia del código de prueba está disponible en Maxim (en el código de la versión 4.8p construcción, el código de inicio se pueden encontrar en util \ startup_n_safe.a51). La lista de código se proporciona en las páginas siguientes.

Cuando este código se ejecuta por primera vez en la fábrica, copia de los registros recortar a un lugar en la memoria flash. Después de eso, las pruebas de los registros de corte. Cuando falla la prueba, que obliga a leer de los valores de corte con una breve poner el IC al modo de suspensión. Después de la estela se produce, los fusibles de corte se leen automáticamente de nuevo. Llamando a la prueba durante el restablecimiento de fusibles asegura que, incluso en situaciones de grave EMI, los fusibles de corte se volverá a leer hasta que son correctos.

;/************************************************ ***************************
; * Este código y la información se proporciona "tal cual" sin garantía de ningún *
, * Tipo, ya sea expresa o implícita, incluyendo pero no limitado a la *
; * Garantías implícitas de comercialización y / o idoneidad para un determinado *
; * Propósito. *
, * *
; * Copyright (C) 2011 Maxim Integrated Products, Inc. Todos los derechos reservados. *
; ************************************************* **************************/
;//*********************************************** ***************************
/ /
/ / Descripción: METER 71M652x POWER - el código de inicio.
/ /
;//*********************************************** ***************************
/ /
/ / Archivo: STARTUP_N_SAFE.A51.
/ /
$ NOMOD51
;------------------------------------------------- -----------------------------
; Este archivo es parte del paquete del compilador C51
, Copyright (c) 1988-2002 Keil Elektronik GmbH y Keil Software Inc.,
;------------------------------------------------- -----------------------------
; Startup.a51: Este código se ejecuta después de un reinicio del procesador.
;
; Para traducir este archivo con el uso A51 la siguiente invocación:
;
, A51 STARTUP_N_SAFE.A51
;
; Para vincular el archivo STARTUP_N_SAFE.OBJ modificado para utilizar la aplicación los siguientes
; BL51 invocación:
;
; BL51 <su objeto de archivo list>, STARTUP_N_SAFE.OBJ <controls>
;
;------------------------------------------------- -----------------------------
;
, Definidos por el usuario de encendido de inicialización de la memoria
, Con las siguientes instrucciones EQU la inicialización de la memoria
; A restablecer el procesador se puede definir:
;
;; La absoluta puesta en la dirección de la memoria idata es siempre 0
IDATALEN EQU 100H, la longitud de la memoria idata en bytes.
;
XDATASTART EQU 0H; la absoluta puesta en la dirección de la memoria XDATA
XDATALEN EQU 000H, la longitud de la memoria XDATA en bytes.
;
PDATASTART EQU 0H; la absoluta puesta en la dirección de la memoria PDATA
PDATALEN EQU 0H; la longitud de la memoria PDATA en bytes.
;
; Notas: El espacio se superpone idata físicamente los datos y las áreas de la BIT
; 8051 CPU. Como mínimo el espacio de memoria ocupado desde el C51
, Tiempo de ejecución de las rutinas deben ser puestos a cero.
;------------------------------------------------- -----------------------------
;
; De inicialización de la pila reentrada
;
; Los siguientes declaraciones EQU definir el puntero de pila de reentrada
; Funciones y inicializa:
;
; Espacio de pila para funciones de reentrada en el modelo pequeño.
IBPSTACK EQU 1; pone a 1 si es pequeño de reentrada se utiliza.
IBPSTACKTOP EQU 0FFH 1, set top de la pila a la ubicación de un mayor.
;
; Espacio de pila para funciones de reentrada en el modelo grande.
XBPSTACK EQU 0; el valor 1 si se utiliza gran reentrada.
XBPSTACKTOP EQU 07FFH 1, set top de la pila a la ubicación de un mayor.
;
; Espacio de pila para funciones de reentrada en el modelo compacto.
PBPSTACK EQU 0; el valor 1 si se utiliza compacto de reentrada.
PBPSTACKTOP EQU 07FFH 1, set top de la pila a la ubicación de un mayor.
;
;------------------------------------------------- -----------------------------
; Página de definición para el uso del modelo compacto con memoria RAM de 64 KByte xdata
;
; Los siguientes declaraciones EQU definir la página de xdata utiliza para pdata
; Variables. El PPAGE EQU debe cumplir con el control PPAGE utilizados
, En la invocación del enlazador.
;
PPAGEENABLE EQU 1; pone a 1 si pdata objetos se utilizan.
;
PPAGE EQU 7; definir el número PPAGE.
PÚBLICO PPAGE_SFR
PPAGE_SFR DATOS 0BFH,
SFR que los suministros de más alta dirección de byte
, (La mayoría de los 8.051 variantes de uso P2 como byte superior de dirección)
;------------------------------------------------- -----------------------------

; Cambiar a M6520 cuando el chip está disponible.

; Símbolos estándar SFR
ACC 0E0H DATOS
B DATOS 0F0H
SP DATOS 81H
DPL DATOS 82H
Departamento de Salud Pública DATOS 83H
USUARIO1 DATOS 90H
DIR1 DATOS 91H
FCTRL DATOS 0B2H
IPH DATOS 0B9H
IPL DATOS 0A9H
IRCON DATOS 0C0H
IEN0 DATOS 0A8H
IEN1 DATOS 0B8H

NOMBRE? C_STARTUP

? CÓDIGO C_C51STARTUP SEGMENTO
? STACK SEGMENTO idata

RSEG? STACK
DS 1

EXTRN CODE (? C_START)
PÚBLICO? C_STARTUP
_ PÚBLICO? TRIM_TEST

CSEG A 0
? C_STARTUP: LJMP STARTUP1
RSEG? C_C51STARTUP
STARTUP1:
CLR IEN0 ^ 7; deshabilitar las interrupciones
; Para activar el modo seguro, eliminar el punto y coma de la siguiente línea
; ORL FCTRL, # 40 de alto; bit seguro
MOV 0E8h, # 0FFh; vigilancia de actualización no enmascarable.

; Establecer prioridades sistema de interrupción, más frecuentes son la máxima prioridad.
MOV IPH, # 01DH; de código en options_gbl.h, main.c
MOV IPL, # 00AH; de código en options_gbl.h
; Interrumpir PLL_OK Clear (bit3), y otros
MOV IRCON, # 0
; Habilitación de alarma PLL_OK
MOV DPTR, # 2007h; Set EX_PLL
MOV A, # 20H
MOVX @ DPTR, A
; Habilita las interrupciones
MOV IEN1, # 08H; Activar INT4, la interrupción PLL_OK
MOV IEN0, # 80H; Habilitar todas las interrupciones

Adornos de prueba de 6521; ACALL _ TRIM_TEST?

SI IDATALEN <> 0
MOV R0, # IDATALEN - 1
CLR A
IDATALOOP: MOV @ R0, A
DJNZ R0, IDATALOOP
ENDIF

SI XDATALEN <> 0
MOV DPTR, # XDATASTART
MOV R7, # LOW (XDATALEN)
SI (LOW (XDATALEN)) <> 0
MOV R6, # (HIGH (XDATALEN)) +1
ELSE
MOV R6, # HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @ DPTR, A
INC DPTR
DJNZ R7, XDATALOOP
DJNZ R6, XDATALOOP
ENDIF

SI PPAGEENABLE <> 0
MOV PPAGE_SFR, # PPAGE
ENDIF

SI PDATALEN <> 0
MOV R0, # LOW (PDATASTART)
MOV R7, # LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @ R0, A
INC R0
DJNZ R7, PDATALOOP
ENDIF

SI IBPSTACK <> 0
EXTRN DATOS (? C_IBP)
MOV? C_IBP, IBPSTACKTOP # BAJA
ENDIF

SI XBPSTACK <> 0
EXTRN DATOS (? C_XBP)
MOV? C_XBP, # HIGH XBPSTACKTOP
MOV? C_XBP 1, XBPSTACKTOP # BAJA
ENDIF

SI PBPSTACK <> 0
EXTRN DATOS (? C_PBP)
MOV? C_PBP, PBPSTACKTOP # BAJA
ENDIF

MOV SP, #? STACK-1
LJMP? C_START

; Lee un ajuste cuyo índice es de A. Devuelve el corte en A.
CSEG EN 100H
FUSE_TABLE:
DB 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff

, Prueba de ajuste. Prefijo "_?" dice Keil C es reentrante.
_ TRIM_TEST?
EMPUJE IEN0
EMPUJE
PSW ; Guardar registros, por lo que es reentrante.
MOV PSW, 00H; Seleccionar registros antes de guardarlos
EMPUJE DPL
EMPUJE Departamento de Salud Pública
EMPUJE ACC
MOV A, R7, Save R7 del conjunto de registros actual.
EMPUJE ACC
MOV A, R6, Save R6 del conjunto de registros actual.
EMPUJE ACC

CLR IEN0.7

; Espere a que todos los fusibles que se lee una vez antes de comprobar los fusibles
; Leer fusible completa toma 45 reloj Xtal
ciclos (1 fusible por ciclo de reloj Xtal)
MOV R7, # 21; Espera 21x4 = 48 ciclos
loop_inner: DJNZ R7, loop_inner; 4 ciclos (en la bajada de tensión, a 1 ciclo / clk)

mov DPH, # HIGH (FUSE_TABLE)

fuse_test_frst:; comprobar si los valores previamente almacenados
mov DPL, # LOW (FUSE_TABLE)
clr un
MOVC uno, @ A + DPTR; leer la tabla de fusibles
XRL A, # 55H
jnz fuse_save

MOV DPTR, # 2003h, Verifique si en el modo de bajada de tensión
MOVX A, @ DPTR
JB ACC.6, PASS, el modo Misión, así que no ver.
fuse_test:
MOV R7, # 8, el contador de bytes
fuse_test_lp1:
mov DPTR, # FUSE_TABLE; puntero de carga para fusibles de mesa
mov a, r7
MOVC uno, @ A + DPTR; leer la tabla de fusibles
mov r6, un

mov a, r7

MOV DPTR, # 20FDH, dirección TRIMSEL
MOVX @ DPTR, A; registro de carga para leer trim
MOV DPL, # 0FFH; dirección de valor TRIM

MOVX A, @ DPTR; Obtener el valor de ajuste

cjne uno, 06H, FAIL, prueba si el flash leer y recortar ==
djnz r7, fuse_test_lp1

JMP PASE
fuse_save:
MOV DPTR, # 2003h, Verifique si en el modo de bajada de tensión
MOVX A, @ DPTR
; Si el modo de caída de tensión, no los guarde y entrar en el sueño.
JNB ACC.6, FAIL

; Mov 84H, # LOW (FUSE_TABLE)
MOV R7, # 8, el contador de bytes
fuse_save_lp1:
mov a, r7

MOV DPTR, # 20FDH, dirección TRIMSEL
MOVX @ DPTR, A; registro de carga para leer trim
MOV DPL, # 0FFH; dirección de valor TRIM

MOVX A, @ DPTR; Obtener el valor de ajuste
mov r6, un

mov a, r7
MOV DPTR, # FUSE_TABLE
añadir un DPL,
mov DPL, un
mov a, r6

orl 0B2H, # 01H; con el flash escribir
MOVX @ DPTR, uno; fusible escribir byte mesa
djnz r7, fuse_save_lp1

mov a, # 55H; byte de control para marcar

MOV DPTR, # FUSE_TABLE
orl 0B2H, # 01H; con el flash escribir
MOVX @ DPTR, uno; fusible escribir byte mesa

jmp PASE

FAIL:
MOV DPTR, # 20A9H, dirección WAKE
MOV A, # 0C1H, las fuerzas de sueño y vigilia y el fusible vuelve a leer
MOVX @ DPTR, A

PASS: CLR A; seleccione 0
MOV DPTR, # 20FDH, dirección TRIMSEL
MOVX @ DPTR, A; recortar claro seleccione Registro.

POP ACC
MOV R6, A; restauración R7 en este conjunto de registros
POP ACC
MOV R7, A; restauración R7 en este conjunto de registros
POP ACC
POP Departamento de Salud Pública
POP DPL
POP PSW; Restaurar registros, por lo que es reentrante.
POP IEN0
RET

END

RTC Código

Al reiniciar, el código no debe ajustar el reloj para corregir la deriva en el modo de suspensión. El código que establece el reloj después de calcular la desviación debe ser eliminado.

Keil es una marca registrada y marca de servicio registrada de ARM Limited. Teridian es una marca registrada de Cypress Semiconductor, Inc.



Partes Relacionadas

71M6521BE
Medidor de energía IC
Muestras gratuitas


71M6521DE
Medidor de energía ICs
Muestras gratuitas


71M6521FE
Medidor de energía ICs
Muestras gratuitas



No hay comentarios:

Publicar un comentario