515135896 发表于 2013-1-15 18:06:09

SPI FLASH W25X16 读写问题细究

本帖最后由 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,没问题,读写一致。
望有经验的朋友指点一二,谢谢!!

515135896 发表于 2013-1-15 18:24:48

刚才脑子突然开窍了,发现了问题,现总结一下,希望对有同样困惑的朋友有所帮助。

问题的根源在地址上!
一开始我写的是
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 发表于 2013-1-15 20:51:03

这种问题您不觉得应该去看官方网站发布的数据手册更妥当吗?

o0pingu0o1 发表于 2013-1-16 05:51:31

本帖最后由 o0pingu0o1 于 2013-1-16 05:53 编辑

w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。

515135896 发表于 2013-1-16 14:21:56

o0pingu0o1 发表于 2013-1-16 05:51 static/image/common/back.gif
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 ...

那你是怎么单个字节读写的呢?能发函数发上来探讨一下吗

515135896 发表于 2013-1-16 14:22:52

o0pingu0o1 发表于 2013-1-16 05:51 static/image/common/back.gif
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 ...

datasheet我有……现在已经弄明白了,谢谢关注

jsxzfxcg 发表于 2013-4-2 08:55:05

不知道怎么读写w25x32,学习中。。。。。。。

cumtgao 发表于 2013-7-5 16:59:33

515135896 发表于 2013-1-16 14:22 static/image/common/back.gif
datasheet我有……现在已经弄明白了,谢谢关注

能否分享下,单字节读写心得?

515135896 发表于 2013-7-18 18:42:54

aozima 发表于 2013-1-15 20:51 static/image/common/back.gif
这种问题您不觉得应该去看官方网站发布的数据手册更妥当吗?

您说的是。我也看过他的数据手册,可能是理解的好不到位吧,以后会继续努力的!

515135896 发表于 2013-7-18 18:44:41

cumtgao 发表于 2013-7-5 16:59 static/image/common/back.gif
能否分享下,单字节读写心得?

其实读写是单字节还是整页应该都是无所谓的,只要你的地址别超出本页就行

YF_Wang 发表于 2013-11-14 00:33:20

515135896 发表于 2013-1-15 18:24 static/image/common/back.gif
刚才脑子突然开窍了,发现了问题,现总结一下,希望对有同样困惑的朋友有所帮助。

问题的根源在地址上!


楼主能否分享一下源码,最近也正在弄SPI Flash,想借鉴参考一下,谢谢!

diskcopy 发表于 2013-11-30 00:32:45

STM32的SPI例程里有驱动程序,其实你按照手册里的步骤操作就能驱动成功

昨夜清风 发表于 2013-12-3 10:36:22

楼主,遇到个问题,一直读到忙,不知是啥问题

alex_feng 发表于 2013-12-3 10:55:11

flash的写操作是一写写一页的。无论是从一页的哪个地址开始,会一直写到该页结束的位置。
所谓的单字节读写也是从那个地址开始写到一页结束。只不过后面的写的全是FF罢了。

Cliver1028 发表于 2013-12-3 11:11:28

我刚好也在调这个,也遇到这个情况了,你只要先擦除后再写就可以了,从哪个地址开始写都可以,擦除有三个命令:1、sector erase (擦除4K),2、block erase (擦除64K),3、chip erase (擦除芯片)。

tud3tud3 发表于 2013-12-11 09:43:08

先學習囉

mmcyn 发表于 2014-2-25 15:40:03

好经验! 值得仔细品味。

515135896 发表于 2014-6-9 17:21:10

rerainings 发表于 2014-5-10 21:36
不知道你这个读的速度如何

没有测试过,但是通过SPI总线的速度,应该能大致推算一下吧

strongking 发表于 2014-8-23 09:47:35

没有测试过,但是通过SPI总线的速度,应该能大致推算一下吧
我的能读ID但是不能写入数据,楼主能指导下吗

roki_luo 发表于 2015-5-24 18:32:26

虽然不懂,但学习了

ergou1896 发表于 2016-2-28 15:42:58

学习中!多多谢大家分享!

於氏天鹰 发表于 2016-8-4 14:05:06

SPI总线的速度是否是在初始化时的波特率
页: [1]
查看完整版本: SPI FLASH W25X16 读写问题细究