初级会员
- 积分
- 57
- 金钱
- 57
- 注册时间
- 2022-7-14
- 在线时间
- 12 小时
|
1金钱
//字库区域占用的总扇区数大小(3个字库+unigbk表+字库信息=3238700字节,约占791个W25QXX扇区)
#define FONTSECSIZE 791
//字库存放起始地址
#define FONTINFOADDR 1024*1024*8 //1024*1024*12 //Explorer STM32F4是从12M地址以后开始存放字库
//前面12M被fatfs占用了.
//12M以后紧跟3个字库+UNIGBK.BIN,总大小3.09M,被字库占用了,不能动!
//15.10M以后,用户可以自由使用.建议用最后的100K字节比较好.
如图我改变从8M地址开始存放字库,实际运行时一直在不断重复的更新。我通过调试发现每次初始化时
根据函数:u8 font_init(void)
{
u8 t=0;
W25QXX_Init();
while(t<10)//连续读取10次,都是错误,说明确实是有问题,得更新字库了
{
t++;
W25QXX_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//读出ftinfo结构体数据
if(ftinfo.fontok==0XAA)break;
delay_ms(20);
}
if(ftinfo.fontok!=0XAA)return 1;
return 0;
}
会将SPIflash上读出数据保存到ftinfo上,但是调试发现结构体成员的值都是0xff和0xffff。导致不停的更新。所以我又怀疑是不是w25q128本身写不进数据,我又试了一下SPI实验的例程,把地址改到存字库的位置,发现读写数据都对。我又试着把地址改到12M,又全部正常了。搞不清楚是怎么回事了,更新字库明明就调用了W25QXX里的API,为什么会不行呢?试着多改了几个地址发现都不行。又觉得跟文件系统那部分没关系,毕竟是直接操作的W25QXX的API,大不了直接覆盖文件系统管理的部分。我也试着改了一下文件系统管理SPIFlash的大小,这一部分如下:
//////////////////////////////////////////////////////////////////////////////////
#define SD_CARD 0 //SD卡,卷标为0
#define EX_FLASH 1 //外部flash,卷标为1
#define FLASH_SECTOR_SIZE 512
//对于W25Q128
//前10M字节给fatfs用,10M字节后,用于存放字库,字库占用3.09M. 14M字节以后,给客户自己用
u16 FLASH_SECTOR_COUNT=2048*12; //W25Q1218,前10M字节给FATFS占用
#define FLASH_BLOCK_SIZE 8 //每个BLOCK有8个扇区
#endif
if(tot_sect<2048*12)//总容量小于10M
{
/* Print free space in unit of KB (assuming 512 bytes/sector) */
printf("\r\n磁盘总容量:%d KB\r\n"
"可用空间:%d KB\r\n",
tot_sect>>1,fre_sect>>1);
}else
{
/* Print free space in unit of KB (assuming 512 bytes/sector) */
printf("\r\n磁盘总容量:%d MB\r\n"
"可用空间:%d MB\r\n",
tot_sect>>11,fre_sect>>11);
}
}
都不管用,看正点原子库函数指南也没找到原因!想了一下午挺自闭的!!!
到底是我疏忽了什么啊!!!
寻求各位大佬帮助!!!!
|
|