遇到的问题是:用STM32读取Flash的内容时,只能读到一页的数据,超过这个范围后就死机了。
读取Flash内容的代码如下,Flash类型是:MX25L1605D,我使用的是第一个扇区(0x000-0xFFF),共4K字节,从0开始写入和读取,但只能读到0xFF后(第一页),要读取的Flash地址addr再往后增加就死机了,我确认Flash驱动没有问题。
/*
* 函数名:Read_Card_Record
* 描述 :用于从Flash中读取一条权限信息
* 输入 :buf:临时保存读取到的记录
* : dst:要比较的对象,也就是系统从读卡器接收到的刷卡信息
* : addr:要读取权限数据在Flash中的的起始地址
* 输出 : 返回1为比对正确,否则对比失败
* 调用 :由主函数调用
*/
u8 Read_Card_Record(u8 buf[], u8 dst[], u32 addr)
{
u8 i = 0;
u8 flag = 0;//权限比对成功与否标志位
//从Flash依次读取每条权限记录,Card_Len是一个常数0x04
SPI_FLASH_BufferRead(buf, addr, Card_Len);//从Flash依次读取每条权限记录
for(i=0;i<Card_Len;i++)
{
//只要有一个字节对比不相等就表示当前读取的权限信息与刷卡信息不匹配
if (buf[i]!=dst[i])
{
flag=0;
break;
}
else
{
flag=1;
}
}
if (flag==0)//表示从Flash权限中读取的信息与当前刷卡的信息不匹配
{
addr+=Card_Len;//将要读取的Flash地址信息增加到下一条记录的开始位置
if (addr>0xFF)//将Flash的0x000-0xFFF作为存储权限的区域,4K字节,也就是第0扇区
{
return 0;
}
else
{
return Read_Card_Record(buf, dst, addr);
}
}
else//比对正确返回1
{
return 1;
}
}
上面的if (addr>0xFF)如果换成if (addr>0xFFF)就死机了,Flash手册上讲,可以从一个起始地址读取整个芯片的内容,为什么这里只可以读取一页,是不是代码问题呢? |