SPI FLASH W25X16 读写问题细究

2020-01-17 19:02发布

本帖最后由 515135896 于 2013-1-15 18:09 编辑

最近在研究spi flash w25x16,有几个问题想请交一下有经验的朋友;
1.这款spi flash 每页有256字节对吗?
2.在进行页编程时,每次最多可以写256字节对吗?
3.我在读我写进去的东西时(实际写了256字节,分别是0x00,0x01,0x02,0x03,0x04,0x05…………0xff),而读出来的是0x00,0x01,0x02,0x03,0x04,0x05…………0xfa,0xfb,0xfc,0xfd,0xff0xff,为什么倒数第二个字节是0xff而不是0xfe? 错在哪里呢?
4.我再测试时(实际写了255字节,分别是0x00,0x01,0x02,0x03,0x04,0x05…………0xfc,0xfd,0xfe),而读出来的是0x00,0x01,0x02,0x03,0x04,0x05…………0xfa,0xfb,0xfc,0xfd,0xff。
这个0xff又出现了,按理说应该是0xfe的啊……?
5.我再测试时(实际写了254字节,分别是0x00,0x01,0x02,0x03,0x04,0x05…………0xfd),而读出来的是0x00,0x01,0x02,0x03,0x04,0x05…………0xfa,0xfb,0xfc,0xfd,没问题,读写一致。
望有经验的朋友指点一二,谢谢!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
515135896
1楼-- · 2020-01-17 23:30
刚才脑子突然开窍了,发现了问题,现总结一下,希望对有同样困惑的朋友有所帮助。

问题的根源在地址上!
一开始我写的是
M25P16_Page_Program(2,256,buff);
这表示从初始地址为02h的位置写入256字节,而这对于w25x16来说是不允许的,这就是问题的根源。
之后我把程序改为
M25P16_Page_Program(0,256,buff);
一切正常,读写一致。

现在来想想为什么?
w25x16的写入需要以页为单位,每页有256字节,即每次需写入256字节,在进行写入的过程中,地址不能溢出本页,而刚开始我的初始地址是02h,却要写入256字节(或者255字节),地址范围溢出本页,产生错误,读出来的是错误的0xff。这也正是我在测试写入254字节没有产生错误的原因,因为254+02h没有正好达到本页最后一个位置,没有溢出。

所以,在对w25x16进行写入时,最好从00h,100h,200h……等等256的整数倍地址开始写,且每次写入的字节小于等于256字节,就不会出现地址溢出的问题了……
aozima
2楼-- · 2020-01-18 02:08
这种问题您不觉得应该去看官方网站发布的数据手册更妥当吗?
o0pingu0o1
3楼-- · 2020-01-18 07:19
 精彩回答 2  元偷偷看……
515135896
4楼-- · 2020-01-18 12:23
o0pingu0o1 发表于 2013-1-16 05:51
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 ...

那你是怎么单个字节读写的呢?能发函数发上来探讨一下吗
515135896
5楼-- · 2020-01-18 14:52
o0pingu0o1 发表于 2013-1-16 05:51
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 ...

datasheet我有……现在已经弄明白了,谢谢关注
jsxzfxcg
6楼-- · 2020-01-18 16:27
不知道怎么读写w25x32,学习中。。。。。。。

一周热门 更多>