w25q16Flash读出的数据是两个0x00

2019-07-14 15:02发布

现在我在用W25Q16这款FLASH芯片,现在出现了一个问题,就是我往一个地址中连着写两个0X55,然后再从这个地址中把他们读出来,可是我用逻辑分析仪抓取的结果是写时序正常,写的数据也正确,但是读的时序也是正常的,可是读出的数据却是两个0x00,读写的地址都是一样的,不知道这是怎么回事?涉及到的函数及变量:

        u8 Flash_Init_Value[2]={0x55,0x55};
        u8 Flash_Read_Init_Value[2] = {0};
        u8 Flash_Load_Init_Value[20] = {0};


       Flash_Read_Data(WriteInitValueAddr,0x02,Flash_Read_Init_Value);//判断读取的值是不是0x55,如果是则非首次用

      Flash_PagePro(Flash_Init_Value,WriteInitValueAddr,0x02); //如果不是,则将0x55,写入该地址
     Flash_Read_Data(WriteInitValueAddr,0x02,Flash_Read_Init_Value);//读取一下,判断是否写入成功


基本函数:
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);
        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();
}

void Flash_Read_Data(u32 addr, u32 len, u8* dst)
{
         u8 adr1,adr2,adr3;
         u32 i = 0;
        
//         SPI2_SetSpeed(SPI_BaudRatePrescaler_4);
         adr1 = (addr & 0xff0000)>>16;
         adr2 = (addr & 0xff00)>>8;
         adr3 =  addr & 0xff;
         SPI2_Flash_CS_LOW();
         //delay_us(2);
         SPI2_Flash_SendByte(READ_DATA);
         SPI2_Flash_SendByte(adr1);
         SPI2_Flash_SendByte(adr2);
         SPI2_Flash_SendByte(adr3);
         for(i=0;i<len;i++)
        {               
                dst = SPI2_Flash_ReceiveByte();
        }
         SPI2_Flash_CS_HIGH();
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
60user1
1楼-- · 2019-07-15 00:00
anobodykey 说得对!

另外,Flash_Read_Data() 的参数 Flash_Read_Init_Value 在一开始被你初始化为0了:
u8 Flash_Read_Init_Value[2] = {0};
所以你每次读取肯定是0啊
YY599566
2楼-- · 2019-07-15 02:35
vywyefswer 发表于 2018-12-24 18:54

本帖最后由 watercici 于 2018-5-16 11:22 编辑

不好意思,可能是我粘贴过程中,不小心删掉了,我的也是dst  ,还有其他的问题吗?诶????为什么我的括号和字母i显示不出来呢?那应该不是我删掉了,而是他没有显示,反正我和你说的是一样的。
YY599566
3楼-- · 2019-07-15 07:45
 精彩回答 2  元偷偷看……
YY599566
4楼-- · 2019-07-15 10:48
60user1 发表于 2018-12-24 19:08
anobodykey 说得对!

另外,Flash_Read_Data() 的参数 Flash_Read_Init_Value 在一开始被你初始化为0了:

本帖最后由 watercici 于 2018-5-16 11:32 编辑

现在的问题是,我往WriteInitValueAddr这个地址中写两个0X55,然后在读出来是0第一个是写数据图,第二个是读数据图:

cknz
5楼-- · 2019-07-15 10:50
就是之前说的,你在接收弄个断点,看看接收寄存器呀,这很直接...
vywyefswer
6楼-- · 2019-07-15 16:00
YY599566 发表于 2018-12-24 19:22
本帖最后由 watercici 于 2018-5-16 11:22 编辑

不好意思,可能是我粘贴过程中,不小心删掉了,我的也是dst  ,还有其他的问题吗?诶????为什么我的括号和字母i显示不出来呢?那应该不是我删掉了,而是他没有显示,反正我和你说的是一样的。 ...

哦,这样的话你可以更改一下排版,发帖时代码不要跟内容用一样的格式,发帖时上面有个<>的选项,是用来插入代码的,这样看起来更清晰,你可以试下,另外把你的读写接口也都放上来,只放一个Flash_Read_Data看不出问题的

一周热门 更多>