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();
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。