hpdell 发表于 2015-12-2 15:44:39

获取存储器 容量函数 ??

/**
*****************************************************************************
* @Name   : 得到磁盘剩余容量
*
* @Brief: none
*
* @Input: *drv:   磁盘编号("0:"/"1:"), 必须是根目录
*         *total: 总容量          (单位KB)
*         *free:剩余容量(单位KB)
*
* @Output : none
*
* @Return : 0:    OK
*         其他: 出错
*****************************************************************************
**/
uint8_t myf_getfree(char *drv, uint32_t *total, uint32_t *free)
{
        FATFS *fs1;
        __IO uint8_t res;
        uint32_t fre_clust=0, fre_sect=0, tot_sect=0;
       
        //得到磁盘信息及空闲簇数量
        res = (uint32_t)f_getfree((const TCHAR*)&drv, (DWORD*)&fre_clust, &fs1);
        if(res == 0)
        {
                tot_sect = (fs1->n_fatent - 2) * fs1->csize;                //得到总扇区数
                fre_sect = fre_clust * fs1->csize;                                                        //得到空闲扇区数       
               
                #if _MAX_SS != 512                                                                  //扇区大小不是512字节,则转换为512字节
                        tot_sect *= fs1->ssize / 512;
                        fre_sect *= fs1->ssize / 512;
                #endif          
               
                        *total = (tot_sect>>1);        //单位为KB
                        *free= (fre_sect>>1);        //单位为KB
        }
        return res;
}

上面的函数是获取磁盘的容量函数,但是我获取盘符
u32 total, free;
char USBH_Path[] = "1:/";


myf_getfree(“0:/”,&total,&free);   // 分配为sd卡,完全正确


f_mount(&USBDISKFatFs, (TCHAR const*)USBH_Path, 0);    // 次语句要不要效果都一样
myf_getfree((TCHAR *)USBH_Path,   &total,&free);   // 分配为usb u盘卡,获取到的值为0,u盘是可以正常读写操作的,不知道是为什么会出现这种问题啊 ???

如果把磁盘的盘符0、1兑换,那么 u盘可以获取到容量信息,sd卡又获取不到了, 纠结了好久也没有搞定,还请大神们指点指点迷津啊 !!!!









yanhaijian 发表于 2015-12-2 16:32:19

这是fs文件系统嘛。

hpdell 发表于 2015-12-2 18:13:14

yanhaijian 发表于 2015-12-2 16:32
这是fs文件系统嘛。

是的啊,有什么的方法没有啊 ???

mark0668 发表于 2015-12-2 20:06:49

看接口函数
页: [1]
查看完整版本: 获取存储器 容量函数 ??