【随笔记】FRAM 铁电随机存储器(MB85RC04VPNF)
参考资料
器件规格书:https://atta.szlcsc.com/upload/public/pdf/source/20131104/1457706659695.pdf
I2C总线规范:https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/nxp-designs/931/1/UM10204.pdf
第一次接触这种 FRAM 铁电随机存储芯片,发现有几点有意思的知识点,顺带记录一下,数据读写的操作就没啥记录的了。
芯片简介
FRAM 优点:
集结 RAM 的高读写速度但掉电数据丢失和 ROM 掉电仍可报错数据但读写速度很慢的优点。
FRAM 缺点:
访问次数有限(100亿次),超出后不再具有非易失性(即掉电丢失数据),但仍可作为 RAM 使用。
器件地址
高地址为表示方法
这颗芯片的容量有 512 字节,可以通过 I2C 指定地址来读写数据。由于 4KB 的内存地址超出了一个字节所能表示的范围(0-255),该器件采用 7bit 器件地址的最低位作为内存地址的高有效位,即可完整描述(0-511)。这样可以避免使用两个字节来表示内存地址,有效提升读写效率。

两个从机器件地址
但这样也带来了一个小弊端,该芯片会占用 I2C 总线的两个地址:(A2=0,A1=1,A8=0/1)
0x52 = 1010 010、0x53 = 1010 011

设备ID
通过以下方式实现区分命令与普通的数据读写操作
- 该芯片通过保留地址的方式来实现设备ID的获取功能.
- 通过将真实的器件地址作为保留器件地址的数据,来获取指定芯片的设备ID。


按上述步骤:
- 发起起始信号之后,发送保留从机地址 0xF8(所有设备都会给出应答信号)。
- 得到应答信号之后,发一次本芯片的器件地址 0x52 << 1(只有0x52设备会给出应答信号)。
- 得到应答信号之后,重新再发起起始信号,发送目标从机地址 0xF9(告诉 0x52 设备要读取设备ID)。
- 得到应答信号之后,即可连续读取三个字节的数据(0x52 设备会给出应答信号,并输出三个字节数据)。
上述 0xF8、0xF9 是包含了读写位,移除读写位得到 7bit 地址为 0x7C(1111 100),对应下方I2C标准规范(P16):

同样 I2C 标准规范也制定了读取设备 ID 的流程(P20):

实测的数据波形
下面解析的地址数据,包含了读写位:

对应的 Linux 应用层获取的代码:
bool get_pidmid(unsigned short *pid, unsigned short *mid)
{
struct i2c_msg msgs[2];
unsigned char val[3] = {0};
struct i2c_rdwr_ioctl_data i2c_data;
std::unique_lock<std::mutex> lock(mutex);
memset(&msgs, 0x00, sizeof(msgs));
memset(&i2c_data, 0x00, sizeof(struct i2c_rdwr_ioctl_data));
i2c_data.nmsgs = 2;
i2c_data.msgs = msgs;
char data = saddr << 1;
i2c_data.msgs[0].buf = &data;
i2c_data.msgs[0].len = 1;
i2c_data.msgs[0].addr = 0xF8 >> 1;
i2c_data.msgs[0].flags = 0;
i2c_data.msgs[1].buf = (char*)val;
i2c_data.msgs[1].len = 3;
i2c_data.msgs[1].addr = 0xF9 >> 1;
i2c_data.msgs[1].flags = 1;
if (ioctl(fd, I2C_RDWR, (unsigned long)&i2c_data) < 0){
return false;
}
*pid = val[2] | ((val[1]&0x0F) << 8);
*mid = (val[0] << 4) | ((val[1]&0xF0) >> 4);
return true;
}
【随笔记】FRAM 铁电随机存储器(MB85RC04VPNF)的更多相关文章
- FRAM 铁电存储器
铁电存储器与传统存储器的区别. 一:易失性的存储器包括静态存储器SRAM和动态存储器DRAM. 优点:读写速度快,读写寿命无次数限止. 缺点:掉电会丢失数据. ...
- 用铁电存储器FRAM让穿戴式设备更省电
可穿戴设备应用中的显示屏消耗了大部分电池电力.解决方法之一是直接提高电池容量,但是大容量电池会加大尺寸和重量,对可穿戴设备不合适,尤其是在市场不断追求更小型化的新款产品时更是如此.更具挑战性的是电池技 ...
- 树莓派4B-SPI读写flash-FM25CL16B(同时支持FM25CL64等其它系列Flash)
1.树莓派SPI介绍 4B的引脚如下图所示: 其中Pin19.21.23是SPI0,接口定义如下所示: 时钟(SPI CLK, SCLK) 主机输出.从机输入(MOSI) 主机输入.从机输出(MISO ...
- ArduPilot存储管理 Storage EEPROM Flash
AP_HAL::Storage 此类可以应用于所有平台.PX4v1平台支持8k的EEPROM,Pixhawk平台支持16k的FRAM铁电存储器 存储大小定义:libraries/AP_HAL/AP_H ...
- msp430FR5739 FRAM的学习
FRAM,中文名称为铁电存储器..FRAM提供一种与RAM一致的性能,但又有与ROM 一样的非易失性. FRAM 克服以上二种记忆体的缺陷并合并它们的优点,它是全新创造的产品,一个非易失性随机存取储存 ...
- STC单片机掉电断电失电瞬间EEPROM数据保存处理办法(转)
由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回 ...
- 单片机(MCU)使用常用名字解释
总线:指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信. 地址总线(AB):地址总线是单向的,用于传送地址信息.地址总线的宽度为16位,因此基外部存储器直接寻址64K,16位地址总 ...
- 主机-配件-接口-整机-3c-1
standby 待机 hibernate 休眠(睡眠) power-off 关机 usb端口能给外部设备充电在低压状态(standby,hibernate,power-off),如果系统运行在batt ...
- RFID的基本组织构成
RFID技术由3大组件构成, 包括: 阅读器.天线.标签三大组件. 阅读器 为RFID系统最重要也是最复杂的一个组件.因其工作模式一般是主动向标签询问标识信息, 所以有时又被称为询问器(Interro ...
随机推荐
- 【lwip】08-ARP协议一图笔记及源码实现
目录 前言 8.1 IP地址与MAC地址 8.2 ARP协议简介 8.3 ARP协议报文 8.4 ARP缓存表 8.4.1 ARP缓存表简介 8.4.2 LWIP中的缓存表 8.4.3 ARP缓存表数 ...
- Golang占位符
有哪些占位符? 常见占位符 %T 类型占位符 %v 值占位符 %d 整数占位符 %f 浮点占位符 %c 字符占位符 %s 字符串的占位符 占位符类型 通用占位符 占位符 说明 举例 %v 获取数据的值 ...
- 云原生之旅 - 8)云原生时代的网关 Ingress Nginx
前言 当我们在Kubernetes部署的服务需要暴露给外部用户使用时,有三种选择:LoadBalancer,NodePort, Ingress. LoadBalancer类型得结合各个Cloud Pr ...
- python uiautomator
电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server .atx-agent.openstf/minica ...
- spring运行报500 bean不存在
spring运行报500 bean不存在 bean不存在 步骤: 查看bean是否注入成功 junit单元测试 问题,不一定在我们底层,是spring出现了问题 SpringMVC整合 ...
- 少走点弯路:Wiki.js 通过 Generic OAuth2 进行身份验证
Wiki.js介绍 Wiki.js 是一个开源的百科全书系统,可以用来搭建自己的知识库.文档库等. 官网 | GitHub 后续内容中的Wiki.js会用Wiki代替. 本文环境:Wiki 2.5.2 ...
- Python: 你所不知道的星号 * 用法
以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/FHyosiG_tegF5NRUEs7UdA 本文大概 1193 个 ...
- crtl+鼠标左键代码出现class file editor,source not found
点击Attached source或者已经添加过按钮变成Change Attached Source 点击之后将自己jdk路径下的src.zip导入就可以了 图片来自https://blog.csdn ...
- C++编程笔记(STL学习)
一.顺序容器 1.1.vector 1.2.dequeue 1.3.list 二.关联性容器 2.3.set 2.3.map 三.算法 3.1.遍历算法(for_each ...
- 【数据库】Oracle建表、创建序列、添加触发器生成自增主键
CREATE TABLE "TEST"."T_ORDER" ( "AUUID_0" VARCHAR2 ( 255 ) NOT NULL ...