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条回答
YY599566
1楼-- · 2019-07-15 16:17
cknz 发表于 2018-12-24 20:01
就是之前说的,你在接收弄个断点,看看接收寄存器呀,这很直接...

您能说的具体点吗,是看单片机的SPI状态寄存器中的RXNE还是SPI的数据寄存器DR?
YY599566
2楼-- · 2019-07-15 18:45
 精彩回答 2  元偷偷看……
YY599566
3楼-- · 2019-07-16 00:32
vywyefswer 发表于 2018-12-24 20:19
哦,这样的话你可以更改一下排版,发帖时代码不要跟内容用一样的格式,发帖时上面有个&amp;lt;&amp;gt;的选项,是用来插入代码的,这样看起来更清晰,你可以试下,另外把你的读写接口也都放上来,只放一个Flash_Read_Data看不出问题的 ...

vywyefswer
4楼-- · 2019-07-16 06:15
YY599566 发表于 2018-12-24 20:42
不好意思,问一下,您说的这个读写接口指什么,是硬件的引脚,还是软件的读写基本函数?

就是软件的读写基本函数,此外你可以读取一下flash的id看下是否读取正确借此检验你的接线是否正确
YY599566
5楼-- · 2019-07-16 07:54
vywyefswer 发表于 2018-12-24 21:07
就是软件的读写基本函数,此外你可以读取一下flash的id看下是否读取正确借此检验你的接线是否正确

vywyefswer
6楼-- · 2019-07-16 13:44
YY599566 发表于 2018-12-24 21:17

看起来是没啥问题的,如果读id正确的话,说明读取接口是对的,那可能是没写进去,看下写使能是否打开以及写保护引脚是否配置正确

一周热门 更多>