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的指令,从机应该是没有回复的,但 ...
的确看你第二个波形是不对,那你试下这个代码
void Flash_PagePro(u8 *Pdat,u32 addr,u16 Len)
{
    u8 padr1,padr2,padr3;
    u8 i;
    padr1 = (addr & 0xff0000)>>16;
    padr2 = (addr & 0xff00)>>8;
    padr3 = addr & 0xff;

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

    SPI2_Flash_CS_LOW();
    SPI2_Flash_SendByte(PAGE_PROGRAM);
    SPI2_Flash_SendByte(padr1);
    SPI2_Flash_SendByte(padr2);
    SPI2_Flash_SendByte(padr3);

    for(i=0;i<Len;i++)
    {
            SPI2_Flash_SendByte(Pdat);
    }   
   
    SPI2_Flash_CS_HIGH();
    while((Flash_Read_SR(0x05)&0x01) == 0x01);//等待写入完成
}
看下这个波形是否正确,如果还不行的话,实在想不出哪里出问题了就,你也对比下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上居然有数据

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之 ...

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