Introducción Los "Processor Companions" son una familia de chips de Ramtron que incluyen las funciones más comúnmente utilizadas en sistemas microprocesados. La figura muestra el diagrama de bloques interno. Como podemos apreciar, un processor companion es un interesante dispositivo que reúne una cantidad de funciones adicionales útiles, normalmente dispersas, en un circuito integrado. Entre estas funciones, podemos observar en el diagrama: Memoria no-volátil Reloj de tiempo real Reset por baja tensión Watchdog timer Contador de eventos Número de serie Comparador. Descripción Las funciones de reloj de tiempo real y contador de eventos, son mantenidas en ausencia de tensión por una pila de respaldo, mientras que la memoria y el número de serie son FRAM. RTC El RTC (Real time Clock) provee información de fecha y hora en BCD, y cuenta con un pin para su alimentación en caso de falta de la alimentación general. La alimentación de respaldo puede proveerse mediante un capacitor o una batería, el mismo chip se encarga de mantener la carga mediante un tricle-charger de 15uA, que se mantiene activo hasta tanto la tensión del elemento de back-up iguala a la de alimentación o llega al máximo de 3,75V. La base de tiempo es un cristal de 32,768KHz externo, y el oscilador posee un modo de calibración que permite ajustar por software la precisión del RTC. 51 2 H z C lo ck Di v id er Os ci l lat or W 1 Hz Up da te L og ic 3 2.7 68 k H z cr y st al CF Y ea rs 8 b i ts Mo nt hs 5 b i ts Da te 6 b i ts H ou rs 6 b i ts Min ut es 7 b its S ec on ds 7 b its Da ys 3 b i ts R Us er Int e rfa ce R eg i ste rs Reset, watchdog timer, comparador Entre las demás funciones adicionales encontramos funciones de supervisión como por ejemplo una señal de RESET, que puede activarse tanto por baja tensión de alimentación como por la expiración de un watchdog timer interno. La señal RST se activa cuando la tensión de alimentación desciende por debajo de un valor programable, y se mantiene activa por 100ms luego de que ésta supere nuevamente el valor de umbral. El watchdog timer también es programable, con tiempos desde los 100ms hasta los 3 segundos. La operación del watchdog timer es opcional, y el procesador, luego de un reset, puede determinar la causa del mismo leyendo un flag en un registro interno del processor companion. Otra función interesante es el comparador, con la entrada inversora conectada a una referencia interna de 1,2V. Esto permite su utilización en funciones de detección de bajo nivel de tensión, como por ejemplo una advertencia temprana de pérdida de alimentación, que puede utilizarse para generar algún tipo de interrupción, preferentemente no enmascarable, que posibilite al micro obrar anticipadamente y salvar su contexto de operación antes de perder completamente la alimentación, por ejemplo. Primary Power e.g. 12V VDD (regulated) Set NMI trip point VDD trip point for RST Comparator NMI Output RST Número de serie Disponemos además de un número de serie de 64-bits, el cual puede ser escrito y dispone de un flag que lo torna solo-lectura, es decir, una vez seteado el flag no es posible alterar el número de serie, ni resetear el flag. Contadores de eventos Finalmente, disponemos de un doble contador de eventos, que permite llevar la cuenta de las transiciones en sendos pines dedicados. El contador se alimenta de la misma tensión que el RTC, por lo que funciona también cuando el dispositivo no tiene alimentación principal, esto puede emplearse, por ejemplo, para detectar y contabilizar desarmes de gabinetes, apertura de puertas de configuración, etc. El consumo máximo de la alimentación de backup es de 1uA. C1P 16-bit Counter CIN1 C2P CIN2 16-bit Counter CC Operación Si bien el fabricante, Ramtron, anuncia su interfaz como "2-wire", se trata de un I2C con algunas leves modificaciones de timing que no afectan el normal desenvolvimiento dentro de un bus. Dentro de la familia FM31xxx encontramos varias alternativas, con diversos tamaños de memoria FRAM, de 16Kb a 256Kb. La misma se comporta como una FM24xyy equivalente. La familia 32xxx es similar, pero sin el reloj de tiempo real. El resto de la circuitería está accesible en una serie de 25 registros que responden a otra dirección de dispositivo. Desde el punto de vista del master I2C, el processor companion con FRAM se comporta como dos dispositivos diferentes en el bus. A continuación, un ejemplo de trabajo con el processor companion en un Rabbit: #use i2c_devices.lib #define COMPANION_ADDRESS 0xD0 return_code=I2CRead(COMPANION_ADDRESS,0x01,read_string,1); printf("I2Cread returned:%d\n", return_code); if(return_code != 0) exit(-1); printf("Cal/control: %02X\n",read_string[0]); return_code=I2CRead(COMPANION_ADDRESS,0x0A,read_string,1); printf("I2Cread returned:%d\n", return_code); if(return_code != 0) exit(-1); printf("WDT control: %02X\n",read_string[0]); return_code=I2CRead(COMPANION_ADDRESS,0x11,read_string,8); printf("I2Cread returned:%d\n", return_code); if(return_code != 0) exit(-1); printf("Serial number:"); for(i=0;i<8;i++) printf(" %02X",read_string[i]); Aplicaciones La utilidad de un chip como éste adquiere particular interés cuando diseñamos equipos para aplicaciones en las cuales la seguridad es más que importante. Por ejemplo: Si necesitamos detectar que estamos por perder la alimentación y grabar algo en memoria no volátil, podemos usar el comparador con referencia para sensar la tensión de alimentación antes del regulador. El pin de RST oficia como reset por baja tensión, permitiendo evitar brown-outs. Si nuestra aplicación es crítica o involucra la seguridad humana, el watchdog dentro del procesador puede no ser suficiente; disponemos entonces de un watchdog externo al procesador, dentro del processor companion. Si la precisión de un RTC que podamos construir con el microcontrolador no es suficiente, disponemos de uno de alta precisión y estabilidad dentro del processor companion. Si necesitamos un número de serie para identificar nuestro equipo o validar nuestro software y evitar copias, disponemos de uno en FRAM que puede bloquearse y pasar a ser de lectura solamente. Si necesitamos contar o detectar algún tipo de eventos, incluso cuando el equipo está apagado, como por ejemplo la apertura del gabinete, disponemos de un contador con alimentación de respaldo (la misma del RTC). Por lo demás, lo interesante de estas soluciones es disponer de un circuito integrado con todas las funciones útiles incluidas, cerca del procesador, y a un costo razonable; en vez de tenerlas diseminadas por toda la placa en forma de componentes diversos. El siguiente es un circuito típico de aplicación: Regulador Vcc SCL SCL CNT1 SDA SDA A1 PFI A0 32768 IRQ PFO Vback RST RST FM31xx