现在我在用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();
}
另外,Flash_Read_Data() 的参数 Flash_Read_Init_Value 在一开始被你初始化为0了:
u8 Flash_Read_Init_Value[2] = {0};
所以你每次读取肯定是0啊
一周热门 更多>