你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

w25q16Flash读写的问题

[复制链接]
watercici 提问时间:2018-5-16 10:19 /
阅读主题, 点击返回1楼
收藏 评论32 发布时间:2018-5-16 10:19
32个回答
butterflyspring 回答时间:2018-5-16 14:52:10
从你的分析仪来看,应该是flash的操作问题了,因为实际的返回就0x00.而且仅是read操作的,如果你读版本号是正常的话.剩下的只能啃flash的datasheet或网上找别人的例程对比了
watercici 回答时间:2018-5-16 14:58:55
butterflyspring 发表于 2018-5-16 14:52
从你的分析仪来看,应该是flash的操作问题了,因为实际的返回就0x00.而且仅是read操作的,如果你读版本号是正 ...

我再看看程序吧
anobodykey 回答时间:2018-5-16 15:13:05
本帖最后由 anobodykey 于 2018-5-16 15:14 编辑
watercici 发表于 2018-5-16 14:01
WP和HOLD硬件连接都是接的高电平,写使能就是单片机给flash发送一个0X06的指令,从机应该是没有回复的,但 ...

的确看你第二个波形是不对,那你试下这个代码
  1. void Flash_PagePro(u8 *Pdat,u32 addr,u16 Len)
  2. {
  3.     u8 padr1,padr2,padr3;
  4.     u8 i;
  5.     padr1 = (addr & 0xff0000)>>16;
  6.     padr2 = (addr & 0xff00)>>8;
  7.     padr3 = addr & 0xff;

  8.     while((Flash_Read_SR(0x05)&0x01) == 0x01);
  9.     Flash_Write_EnorDis(ENABLE);

  10.     SPI2_Flash_CS_LOW();
  11.     SPI2_Flash_SendByte(PAGE_PROGRAM);
  12.     SPI2_Flash_SendByte(padr1);
  13.     SPI2_Flash_SendByte(padr2);
  14.     SPI2_Flash_SendByte(padr3);

  15.     for(i=0;i<Len;i++)
  16.     {
  17.             SPI2_Flash_SendByte(Pdat[i]);
  18.     }   
  19.      
  20.     SPI2_Flash_CS_HIGH();
  21.     while((Flash_Read_SR(0x05)&0x01) == 0x01);//等待写入完成
  22. }
复制代码

看下这个波形是否正确,如果还不行的话,实在想不出哪里出问题了就,你也对比下st自带的flash读写示例,看下是否正常
watercici 回答时间:2018-5-16 15:20:47
anobodykey 发表于 2018-5-16 15:13
的确看你第二个波形是不对,那你试下这个代码

看下这个波形是否正确,如果还不行的话,实在想不出哪里出 ...

好的,谢谢!麻烦您了
watercici 回答时间:2018-5-16 16:34:51
watercici 发表于 2018-5-16 15:20
好的,谢谢!麻烦您了

不好意思,我试了你给的代码,还不行,上哪里找ST自带的FLASH 代码
watercici 回答时间:2018-5-16 17:14:20
本帖最后由 watercici 于 2018-5-16 17:16 编辑
anobodykey 发表于 2018-5-16 15:13
的确看你第二个波形是不对,那你试下这个代码

看下这个波形是否正确,如果还不行的话,实在想不出哪里出 ...

我现在有一个迫切想解决的问题,就是您看的时序的那个问题,按说发了0X05读取状态值为0X03,说明总线忙,就不应该发下一个写使能指令,但是他却发了?还有就是在发写使能指令的时候,MISO上居然有数据,我在想是不是判断语句的问题,可是按照你发的例程改了之后,还是这样。我对照了ST自带的FLASH程序,我感觉整体都一样啊?我已经黔驴技穷了。。。。
这个图是在检测到总线忙的时候,居然发了读指令,而且在发读指令的时候,MISO上居然有数据
图片1c.png
anobodykey 回答时间:2018-5-16 18:02:42
本帖最后由 anobodykey 于 2018-5-16 18:04 编辑
watercici 发表于 2018-5-16 17:14
我现在有一个迫切想解决的问题,就是您看的时序的那个问题,按说发了0X05读取状态值为0X03,说明总线忙, ...

这个看时序你MISO口收到的状态字节是0X03,理应是不往下走的,那你可以在你代码的读取字节函数中增加打印信息把收到的字节输出,查看是否与波形图一致,还有就是在写入时必须得进行擦除操作,才能够执行正常的写入操作。你还可以使用库例程把IO口改成你现有的然后烧录,查看结果是否正常
watercici 回答时间:2018-5-17 10:12:28
anobodykey 发表于 2018-5-16 18:02
这个看时序你MISO口收到的状态字节是0X03,理应是不往下走的,那你可以在你代码的读取字节函数中增加打印 ...

你好,我加了printf和串口发送数据,这俩是先后分别都试了试,可是不行,会导致时序不对,且串口助手也收不到数据
watercici 回答时间:2018-5-17 18:53:53
anobodykey 发表于 2018-5-16 18:02
这个看时序你MISO口收到的状态字节是0X03,理应是不往下走的,那你可以在你代码的读取字节函数中增加打印 ...

我今天弄了一天,我发现他能写进去,可是他是读的字节有问题,比如:时序上抓取的结果是发完读指令0X03之后,读取的是0X55,0X55,但我读到的数据是0X00,0X55,如果我把我的存储空间增加一个字节,那么读取的就是0x00,0X55,0x55,这是说明我是写进去可,可是读的却出了问题,好像多了一个dummy字节似的
anobodykey 回答时间:2018-5-17 21:43:45
watercici 发表于 2018-5-17 18:53
我今天弄了一天,我发现他能写进去,可是他是读的字节有问题,比如:时序上抓取的结果是发完读指令0X03之 ...

哦,那说明读写操作应该是正常的,那你换个地址测试下看看是否依然存在这个问题,或许是你代码逻辑上有所疏忽,程序中读到的数据应该是与你逻辑分析仪抓到的数据一致才对。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版