STM32F407 f_mount函数失败,可能是什么原因?

Rps 2016-08-09 05:27:42

//移植原子的代码,略有修改。
//原exfuns.c的申请工作区的函数。
FATFS *fs_UDisk;
//FIL *file;
//FIL *ftemp;
UINT br,bw;
FILINFO fileinfo;
DIR dir;

//u8 *fatbuf;
///////////////////////////////////////////////////////////////////////////////////////

u8 exfuns_init(void)
{
fs_UDisk=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS));
// file=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //吃我太多内存,一怒之下全部注掉。
// ftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
// fatbuf=(u8*)mymalloc(SRAMIN,512);
if(fs_UDisk)//&&file&&ftemp&&fatbuf)
return 0;
else
return 1;
}
//初始化函数------------------------------------------------------------------------------------------
void Init_App(void)
{
//Initialization.
delay_init(168);
my_mem_init(SRAMIN);
my_mem_init(SRAMCCM);
if(1 == exfuns_init())
{
LED_FATFS_MountFail();
}
//Load U-Disk.
if(f_mount(fs_UDisk,"2:",1) != FR_OK)
{
//LED
LED_FATFS_MountFail(); //debug时跳进来了。
}
Init_LED(); //Initialization LED.
Init_KEY(); //Initialization KEY.
Init_ADC(); //Initialization ADS1256 GPIO,SPI2 and set them speed.
//Initialization USB Host.
USBH_Init(&USB_OTG_Core,USB_OTG_FS_CORE_ID,&USB_Host,&USBH_MSC_cb,&USR_Callbacks);
USBH_Process(&USB_OTG_Core, &USB_Host);
//Initialization WAV Head.
Init_WavHead(&g_wavhead);
}


等等。就在刚刚,我DEBUG的时候发现了新的问题:在ff.c中有两个函数给了我错误状态返回值。

//line 2216
fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */

走进去,是另一个函数:

static
BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */
FATFS* fs, /* File system object */
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
)
{
fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */
if (move_window(fs, sect) != FR_OK) /* Load boot record */
return 3;

if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */
return 2;

if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */
return 0;
if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */
return 0;

return 1;
}

move_window(fs, sect)失败了,所以返回了3.
求大神帮帮忙啊,卡了好几天了了。
...全文
3537 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YcVczh 2017-02-24
  • 打赏
  • 举报
回复
f_mount 失败你应该在用res= f_mount ()来找返回值的编号,在Fatfs的宏里找错误原因。一般是底层Diskio.c有问题
qq_35556073 2016-11-11
  • 打赏
  • 举报
回复
最后是在disk_read里面出不了循环。楼主解决了吗?我也卡在这了
Rps 2016-11-08
  • 打赏
  • 举报
回复
没人答呢……

27,515

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧