• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

请问下FATFS的问题

PG_CPZ 2018-11-01 浏览量:958

 f_mount(fs[0]"0:"1);                                         //挂载SD卡        

 res=f_mount(fs[1]"1:"1);                                 //挂载FLASH.        


为啥第一个就是挂载SD,第二个挂载FLASH呢  程序中有没有做绑定呀?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 要深入理解它,必须要阅读FATFS的源码。

    移植FATFS,最主要的工作是在diskio.c文件里重写几个函数,例如:

    #define SD_CARD  0  //SD卡卷标为0
    #define EX_FLASH 1 //外部flash卷标为1

    然后,先挂载SD,还是先FLASH没有区别

    把fs和pdrv(物理驱动号)绑定是靠f_mount的第二个参数path

    比如,在f_mkfs函数里能找到这一句:

    vol = get_ldnumber(&path);

    我们看看get_ldnumber函数怎么写的:

    for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ;	/* Find ':' in the path */
    if (*tt == ':') {	/* If a ':' is exist in the path name */
    	tp = *path;
    	i = *tp++ - '0';  //关键是这句,简单地把PATH字符串第一个字符减去'0'
    	if (i < 10 && tp == tt) {	/* Is there a numeric drive id? */
    		if (i < _VOLUMES) {	/* If a drive id is found get the value and strip it */
    			vol = (int)i;
    			*path = ++tt;
    		}
    	}
    ...
    return vol;
    现在可以知道了,它们绑定是把path字符串的第一个字符简单地转换为数值。
    各位看官可能要问了,难道FATFS的盘符必须用"0:"?难道不能像电脑上一样用"A:"?
    可以的,同样在get_ldnumber函数里,可以看到有个宏_STR_VOLUME_ID。详细内容请查阅这个宏。
    • 发布于 2018-11-01
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 肯定有定义的地方,你到disco.c里面能找到
    • 发布于2018-11-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序里面要做绑定关系的,这个fs应该是一个参数,可以跳转到fs的定义处看一下
    • 发布于2018-11-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 要在文件系统初始化之前做绑定的,存储设备盘符都是人为规定的。
    • 发布于2018-11-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个要跟你的程序进行绑定,然后转跳到定义代码段执行
    • 发布于2018-12-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

请问下FATFS的问题