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,没问题,读写一致。
望有经验的朋友指点一二,谢谢!!
刚才脑子突然开窍了,发现了问题,现总结一下,希望对有同样困惑的朋友有所帮助。
问题的根源在地址上!
一开始我写的是
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字节,就不会出现地址溢出的问题了…… 这种问题您不觉得应该去看官方网站发布的数据手册更妥当吗? 本帖最后由 o0pingu0o1 于 2013-1-16 05:53 编辑
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 o0pingu0o1 发表于 2013-1-16 05:51 static/image/common/back.gif
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 ...
那你是怎么单个字节读写的呢?能发函数发上来探讨一下吗 o0pingu0o1 发表于 2013-1-16 05:51 static/image/common/back.gif
w25x或w25q可以以单个字节为单位写。可以单个字节为单位读。没听过什么256的倍数开始写。 ...
datasheet我有……现在已经弄明白了,谢谢关注 不知道怎么读写w25x32,学习中。。。。。。。 515135896 发表于 2013-1-16 14:22 static/image/common/back.gif
datasheet我有……现在已经弄明白了,谢谢关注
能否分享下,单字节读写心得? aozima 发表于 2013-1-15 20:51 static/image/common/back.gif
这种问题您不觉得应该去看官方网站发布的数据手册更妥当吗?
您说的是。我也看过他的数据手册,可能是理解的好不到位吧,以后会继续努力的! cumtgao 发表于 2013-7-5 16:59 static/image/common/back.gif
能否分享下,单字节读写心得?
其实读写是单字节还是整页应该都是无所谓的,只要你的地址别超出本页就行 515135896 发表于 2013-1-15 18:24 static/image/common/back.gif
刚才脑子突然开窍了,发现了问题,现总结一下,希望对有同样困惑的朋友有所帮助。
问题的根源在地址上!
楼主能否分享一下源码,最近也正在弄SPI Flash,想借鉴参考一下,谢谢! STM32的SPI例程里有驱动程序,其实你按照手册里的步骤操作就能驱动成功 楼主,遇到个问题,一直读到忙,不知是啥问题 flash的写操作是一写写一页的。无论是从一页的哪个地址开始,会一直写到该页结束的位置。
所谓的单字节读写也是从那个地址开始写到一页结束。只不过后面的写的全是FF罢了。 我刚好也在调这个,也遇到这个情况了,你只要先擦除后再写就可以了,从哪个地址开始写都可以,擦除有三个命令:1、sector erase (擦除4K),2、block erase (擦除64K),3、chip erase (擦除芯片)。 先學習囉 好经验! 值得仔细品味。 rerainings 发表于 2014-5-10 21:36
不知道你这个读的速度如何
没有测试过,但是通过SPI总线的速度,应该能大致推算一下吧 没有测试过,但是通过SPI总线的速度,应该能大致推算一下吧
我的能读ID但是不能写入数据,楼主能指导下吗 虽然不懂,但学习了 学习中!多多谢大家分享! SPI总线的速度是否是在初始化时的波特率
页:
[1]