uint8_t myf_getfree(char *drv, uint32_t *total, uint32_t *free) 获取磁盘 ??

2019-07-21 00:35发布

请教下,获取磁盘容量函数,只能获取磁盘0,不能够获取磁盘1、2、3等,代码如下:
/**
  *****************************************************************************
  * @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 = 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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-07-21 03:32
那肯定可以获取容量
参考我们F407的综合实验代码吧。
支持U盘,SD卡,SPI FLASH,3个磁盘 呢。
hpdell
2楼-- · 2019-07-21 05:46
回复【7楼】正点原子:
---------------------------------
哎,不容易啊,终于搞定了,原来是这样的

吧这个 f_getfree((const TCHAR*)&drv, (DWORD*)&fre_clust, &fs1);

改成: f_getfree(drv, (DWORD*)&fre_clust, &fs1);  

完全OK
正点原子
3楼-- · 2019-07-21 08:42
 精彩回答 2  元偷偷看……
hpdell
4楼-- · 2019-07-21 10:46
回复【2楼】正点原子:
---------------------------------
你好,磁盘 1、2、3 驱动有啊,
磁盘1都可以正常读取操作的,只是不能够获取磁盘1的容量啊 

f_mount();
myf_getfree("1:/", &total,  &free);
hpdell
5楼-- · 2019-07-21 16:44
 精彩回答 2  元偷偷看……
hpdell
6楼-- · 2019-07-21 17:11
 精彩回答 2  元偷偷看……

一周热门 更多>