OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3117|回复: 2

UCGUI加入文件系统Fatfs在GUICharP.c中从SD卡里面打开字库文件f_open,老返回4.不能读取文件,怎么回事?

[复制链接]

9

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2015-6-10
在线时间
0 小时
发表于 2015-12-7 14:51:07 | 显示全部楼层 |阅读模式
5金钱
代码如下:
void LCD_ReadSDBit(U32 addr,U8 *buf, U8 Bytes)   //加入自己读取SD卡里字库的函数
{
FRESULT res;
u8 i;

res=f_open(&SD_File,"0:hzk12.fon",FA_OPEN_EXISTING|FA_READ);
printf("\n\r 打开GBK12.fon:%d\r\n",res );
f_close(&SD_File);

  res=f_open(&SD_File,"0:hzk12.fon",FA_OPEN_EXISTING|FA_READ);
printf("\n\r 打开文件hzk12.fon:%d\r\n",res );
printf("\n\r addr:0x%x\r\n",addr );
f_lseek(&SD_File,addr);
f_read(&SD_File,buf,Bytes,&SD_Br);
f_close(&SD_File);
printf("\n\r buf:\r\n" );
for(i=0;i<Bytes;i++)
{
printf("\n\r 0x%x \r\n",buf );
}
printf("\r\n" );

}

但是在SD卡初始化和挂载后紧跟着使用f_open是正常的,初始化GUI等函数以后,调用SD卡字库的时候打开f_open就返回4    这是这么回事?我看4代表FR_NO_FILE ,可在SD卡初始化时是可以打开的?
SD_Init();
SD_GetCardInfo(&cardinfo);
  printf("\n\r SD Product name: %c%c%c%c%c!", (cardinfo.SD_cid.ProdName1 & 0xff000000)>>24, 
     (cardinfo.SD_cid.ProdName1 & 0xff0000)>>16, (cardinfo.SD_cid.ProdName1 & 0xff00)>>8,
(cardinfo.SD_cid.ProdName1 & 0xff),  cardinfo.SD_cid.ProdName2);
  printf("\n\r SD ManufactDate: 20%02d.%d! \n", (cardinfo.SD_cid.ManufactDate & 0x0ff0)>>4, 
               (cardinfo.SD_cid.ManufactDate & 0x0f));
disk_initialize(0); //该函数在挂载文件系统是被用到,主要实现读写SD卡前,对SD卡进行初始化工作

  printf("\n\r f_mount %d\r\n", f_mount(0, &fs)); //f_mount函数在Fatfs模块中注册/注销一个工作区。
   //在使用其它文件函数前工作区必须使用这个函数给定每个卷。
 //指定一个NULL到FileSystem Object,注销一个工作区,然后工作区被废弃。
 //不管驱动器处于何种状态,此函数总是返回成功。在此函数中不发生媒体访问。 
 //它只初始化给定的工作区域并且注册其他地址到内部表。在f_mount函数执行或者
 //媒体改变后,在第一次文件访问时执行卷安装过程。
  printf("\n\r----------------------------------------------------\n\r"); 
uni2oem_Init();
    oem2uni_Init();
// res=f_mkfs(0,0,512);
// printf("\n\r f_mkfs res=%d \n\r",res);


res=f_open(&fsrc,"0:hzk12.fon",FA_OPEN_EXISTING|FA_READ);
printf("\n\r 打开GBK12.fon:%d\r\n",res );
f_lseek(&fsrc,0x53400);
f_read(&fsrc,buf,24,&Br);
f_close(&fsrc);
printf("\n\r buf:\r\n" );
for(i=0;i<24;i++)
{
printf("\n\r 0x%x \r\n",buf );
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2015-6-10
在线时间
0 小时
 楼主| 发表于 2015-12-7 15:09:42 | 显示全部楼层
顶一下 哪位大侠给点指导!
回复

使用道具 举报

9

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2015-6-10
在线时间
0 小时
 楼主| 发表于 2015-12-7 15:49:21 | 显示全部楼层
没人遇到过这样的问题吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 01:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表