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:


Kit Transformador de 127V a 12VCA 1A
Mini Taladro Eléctrico 12V 12000 RPM con Accesorios y Caja
BU406 Transistor NPN 200V 7A TO-220
TFT Display LCD 1.3" SPI HD 65K Colores ST7789
Eliminador 5V 3A USB C
Kit Brazo Mecánico con Garra de 4DOF
UNIT Sensor Kit – Nivel Intermedio con 20 Prácticas
Pasta Limpiadora para Puntas de Cautín 6g
Sensor de Suelo RS485 (Temperatura, Humedad, Nitrógeno, Fósforo y Potasio)
Lente Focal 12x2mm 50.8mm para Máquina Láser CO2
Kit Levitador Ultrasónico 12V DC 40KHz
Tira Header Macho 40 Pines 2mm Negro
Fuente de alimentación para protoboard v2 MB-102 3.3V 5V
Pluma Flux 951 Kester 10ml Non Clean
Batería LiPo 3.7V 5000mAh 6060100


























