INFORMACIÓN
La FM24W256 Memoria FRAM I2C de 256 Kb organizado como 32K x 8 bits. A diferencia de las memorias EEPROM tradicionales, la tecnología FRAM permite realizar operaciones de lectura y escritura de manera rápida, frecuente y con una resistencia mucho mayor al desgaste.
La FM24W256 Memoria FRAM es útil para aplicaciones donde los datos deben actualizarse constantemente sin comprometer la vida útil de la memoria diseñado para ofrecer una solución de almacenamiento no volátil eficiente, robusta y confiable en sistemas embebidos. Su capacidad de retener datos por hasta 151 años proporciona una gran confiabilidad para aplicaciones que requieren conservar información crítica incluso después de apagar el sistema.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Marca: UNIT Electronics
- País de origen: Hecho en México
- IC: FM24W256
- Tipo: Modulo Memoria FRAM
-
Voltaje de suministro: 3.3 V a 5 V
- Interfaz: I2C ( dirección seleccionable, por default : 0x50)
- Temperatura de funcionamiento: -40°C a +85°C
- Dimensiones: 27.94 mm x 17.78 mm x 5 mm
- Peso: 2.13 g
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
¿Que es la memoria FRAM?
El acrónimo de FRAM se refiere (Ferromagnetic Random Access Memory) , que usa el efecto ferromagnético de los cristales ferroeléctricos para almacenar datos. La ventaja de la memoria FRAM es que los datos no se dañan en caso de perdida de energía de alimentación , la velocidad de escritura es mas rápida que la convencional y el número de ciclos de escritura se vuelve prácticamente ilimitado (10 billones de veces).
Aplicaciones de la FM24W256 Memoria FRAM
-
Registro de datos (Data Logging): Ideal para sistemas que requieren almacenamiento frecuente o registro de datos a alta velocidad.
-
Control industrial: Almacenamiento confiable de parámetros de máquinas, registros de errores y contadores.
-
Recuperación ante fallas de energía: Conserva los datos de forma instantánea sin riesgo de corrupción durante interrupciones eléctricas.
-
Redes de sensores: Permite almacenar datos de calibración y estado con altas tasas de actualización.
-
Medidores inteligentes y dispositivos IoT: Mantiene datos operativos sin problemas de desgaste por escritura.
-
Sistemas embebidos: Sustituye a las EEPROM tradicionales en aplicaciones donde la resistencia a ciclos de escritura y la baja latencia de escritura son factores críticos.
Test de prueba
En el siguiente test se realizara el escaneo de la memoria vía I2C y autodetección mediante la interfaz de comandos por Serial del IDE Arduino.
Diagrama de conexión
Para este test ocuparemos una tarjeta de desarrollo que tenga comunicación vía I2C, en nuestro caso utilizamos la Pulsa C6 con conexión por Qwiic para facilitar la conexión.

Configuraciones previas
En caso de que ocupes la tarjeta de desarrollo Pulsa C6, tendrás que habilitar “USB CDC on Boot”, esta es una configuración para ESP32-S2/S3/C3 para activar el puerto USB nativo como un puerto serie virtual (COM/TTY) desde el inicio. Esta opción se encuentra en la sección de Herramientas (Tool), dentro del IDE de Arduino.

Código de prueba
Realizando la conexión y la configuración previa pasaremos a realizar el siguiente programa:
#include <Wire.h>
// I2C configuration
#define SDA_PIN 6
#define SCL_PIN 7
#define FRAM_BASE 0x50
uint8_t framAddr = FRAM_BASE;
// Write function
bool framWrite(uint16_t addr, const uint8_t *data, size_t len) {
Wire.beginTransmission(framAddr);
Wire.write(addr >> 8);
Wire.write(addr & 0xFF);
Wire.write(data, len);
return (Wire.endTransmission() == 0);
}
// Read function
bool framRead(uint16_t addr, uint8_t *buf, size_t len) {
Wire.beginTransmission(framAddr);
Wire.write(addr >> 8);
Wire.write(addr & 0xFF);
if (Wire.endTransmission(false) != 0) return false;
if (Wire.requestFrom((int)framAddr, (int)len) != (int)len) return false;
for (size_t i = 0; i < len; i++) {
buf[i] = Wire.read();
}
return true;
}
// I2C scan
void i2cScan() {
Serial.println("nI2C scan:");
for (uint8_t addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.printf("Device found at 0x%02Xn", addr);
if (addr >= 0x50 && addr <= 0x57) {
framAddr = addr;
}
}
}
}
void setup() {
Serial.begin(115200);
#if defined(ESP8266) || defined(ESP32)
Wire.begin(SDA_PIN, SCL_PIN);
#else
Wire.begin();
#endif
Wire.setClock(100000);
i2cScan();
const char* data = "Hola FRAM";
uint16_t addr = 0x0010;
framWrite(addr, (const uint8_t*)data, strlen(data));
uint8_t buffer[32] = {0};
framRead(addr, buffer, strlen(data));
Serial.print("Read: ");
Serial.println((char*)buffer);
}
void loop() {}
Posteriormente a la escritura del código, se presentan varias situaciones de switcheo y los resultados de lectura en el monitor serial se observa la dirección para I2C y el estado del WP:


UNIT Kit Fuente con Case 12V 2A
NanoKVM Full IP-KVM RISC-V
Kit Conectores LT41 de Empalme Rápido 75pcs
Elevador de Voltaje 1200W 20A
Buzzer Pasivo KY-006


























