铁电FM25CL64读写

本文介绍了在DSP系统中使用SPI接口与铁电体存储器进行数据读写时遇到的问题及解决方案。初始时,数据存入出现错误,经过排查发现是由于SPI工作模式选择不当导致部分数据的最后一位丢失。通过调整SPI模式为mode3,成功解决了数据存储错误的问题,确保了各种数据类型(字节、整型、浮点数)的正确存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

铁电体比EEPROM读写速度更快,且该芯片的接口是SPI接口,本质上DSP的数据存储,属于SPI主从机数据交互。
DSP做主机时会控制通信的时钟,铁电模块FM25CL64作为从机是不能产生时钟的。如果从机要发送数据,那可以在主机发送数据的时钟上发送数据,这也就是主机DSP读取数据时的虚写/伪写操作。

铁电模块操作码

#define Read_CMD 0x0300        //读25LC640命令0000 0011
#define Write_CMD 0x0200       //写25LC640命令0000 0010
#define Wren_CMD 0x0600        //写25LC640使能命令0000 0110
#define Wrdi_CMD 0x0400        //复位 写25LC640使能命令0000 0100(禁止写操作)
#define Rdsr_CMD 0x0500        //读25LC640状态寄存器命令0000 0101(读状态,看有没有读取结束)
#define Wrsr_CMD 0x0100        //写25LC640状态寄存器命令0000 0001(写状态,看有没有写结束)
#define State 0x0200           //写入25LC640状态寄存器的数据

注意DSP的SPI虽然可以配置为8bit收发模式,但是DSP的SPI是16位收发,而且DSP在发数据时候是高位数据有效,收数据是低位数据有效。因此,操作码的宏定义主动将其左移8位。

SPI读写铁电体流程图

写入数据

在这里插入图片描述

读取数据

在这里插入图片描述

使能写操作

在这里插入图片描述

读状态

在这里插入图片描述

写入的注意

一开始没注意SPI存在mode 0-3四种类型,初期在存储数据时,经常遇到存入0X41等二进制结尾为1的数据会出现错误的情况。从0-15的数据存储结果如下:

00FF
0004
0004
0003
0004
0004
0006
0007
000A
000A
000A
000B
000C
000C
000E
000F

铁电模块的时序要求相对比EEPROM较低,理论上写入字节后不需要延时即可写入下一个字节,且不同于FLASH,不存在只能从1转为0的情况,不需要将数据位提前写入FF。铁电的数据存储也不是页操作,直接向相应地址写入字节即可。
因此,排除以上的可能后,就是SPI的Mode 0&3的选择问题。
在这里插入图片描述
两者都是上升沿触发,但是时序上有一定的差别
在这里插入图片描述
因此SPI Mode选错后,出现部分数据的最后一位丢失的情况。
经过实验,确定了版上模块的SPI采用的是mode 3,只需要将spi模块配置为mode 3即可。
经过修改后的程序,无论几个字节的数据(字节、整型和浮点数)都能正确存储。
字节(0-15)的存储结果如下:

0000
0100
0200
0300
0400
0500
0600
0700
0800
0900
0A00
0B00
0C00
0D00
0E00
0F00

浮点数的存储结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值