【已解决】USB_HOST_MSC例程中,怎么实现SD卡格式化? - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6454|回复: 14
打印 上一主题 下一主题

【已解决】USB_HOST_MSC例程中,怎么实现SD卡格式化?

[复制链接]

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
跳转到指定楼层
楼主
发表于 2016-12-29 09:53:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前开发的产品已经到后期阶段,有一个功能是格式化SD卡,不知道怎么实现。
硬件使用了USB HUB芯片,DSP通过USB访问SD卡,配合FATFS读写文件都已经完成。
在例程USB_HOST_MSC的disk_ioctl( )函数中,只提供了一个响应CTRL_SYNC,因此无法完成格式化
  1. // 磁盘 IO
  2. DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void *buff)
  3. {
  4.     if(USBStat & STA_NOINIT)
  5.     {
  6.         return(RES_NOTRDY);
  7.     }

  8.     switch(ctrl)
  9.     {
  10.         case CTRL_SYNC:
  11.             return(RES_OK);
  12.         default:
  13.             return(RES_PARERR);
  14.     }
  15. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
沙发
 楼主| 发表于 2016-12-29 09:58:35 | 只看该作者
完整的还应该包括对GET_SECTOR_COUNT,GET_SECTOR_SIZE,GET_BLOCK_SIZE的响应。代码如下:
  1. DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void *buff)
  2. {
  3.     if(USBStat & STA_NOINIT)
  4.     {
  5.         return(RES_NOTRDY);
  6.     }

  7.     switch(ctrl)
  8.     {
  9.            /* Make sure that no pending write process */
  10.         case CTRL_SYNC:
  11.             return(RES_OK);
  12.             /* Get number of sectors on the disk (DWORD) */
  13.         case GET_SECTOR_COUNT:
  14.                 *(DWORD*)buff = 0;
  15.                 return(RES_OK);
  16.                 /* Get R/W sector size (WORD) */
  17.         case GET_SECTOR_SIZE:        // 扇区大小固定为512
  18.                 *(WORD*)buff = 512;
  19.                 return(RES_OK);
  20.                 /* Get erase block size in unit of sector (DWORD) */
  21.         case GET_BLOCK_SIZE:
  22.                 *(DWORD*)buff = 512;
  23.                 return(RES_OK);
  24.         default:
  25.             return(RES_PARERR);
  26.     }
  27. }
复制代码
已知GET_SECTOR_SIZE和GET_BLOCK_SIZE固定为扇区大小,即512。

我现在遇到的问题是,对GET_SECTOR_COUNT的响应。其功能是获取总扇区数。
切盼高人指点!




点评

这个应该是需要 USB 读卡器返回相关信息的 @Lewis 熊工 来看下吧  详情 回复 发表于 2016-12-30 10:07
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
板凳
发表于 2016-12-30 10:07:19 | 只看该作者
lushidegreen 发表于 2016-12-29 09:58
完整的还应该包括对GET_SECTOR_COUNT,GET_SECTOR_SIZE,GET_BLOCK_SIZE的[/backc ...

这个应该是需要 USB 读卡器返回相关信息的
@Lewis 来看下吧
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
地板
 楼主| 发表于 2017-1-2 09:02:27 | 只看该作者
希望缄默 发表于 2016-12-30 10:07
这个应该是需要 USB 读卡器返回相关信息的
@Lewis 来看下吧

@Lewis ,熊工帮帮忙!
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
5#
 楼主| 发表于 2017-1-2 09:36:42 | 只看该作者
希望缄默 发表于 2016-12-30 10:07
这个应该是需要 USB 读卡器返回相关信息的
@Lewis 来看下吧

@Lewis ,熊工帮帮忙!
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
6#
 楼主| 发表于 2017-1-4 11:45:08 | 只看该作者
希望缄默 发表于 2016-12-30 10:07
这个应该是需要 USB 读卡器返回相关信息的
@Lewis 来看下吧

斌哥,能不能请熊工帮我解决一下这个问题?急啊
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
7#
发表于 2017-1-6 20:39:19 | 只看该作者
建议通过电脑获取这个参数直接添加到程序里,否则还要在USB的驱动里实现这个功能,这样就比较麻烦
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
8#
 楼主| 发表于 2017-1-9 09:10:13 | 只看该作者
Lewis 发表于 2017-1-6 20:39
建议通过电脑获取这个参数直接添加到程序里,否则还要在USB的驱动里实现这个功能,这样就比较麻烦 ...

(⊙o⊙)…这不是解决之道吧
我现在是实现产品的功能,不是做实验。
用户用什么容量的卡,根本不可能知道。
麻烦也要实现啊

点评

那只能自己实现这部分驱动  详情 回复 发表于 2017-1-9 16:21
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
9#
发表于 2017-1-9 16:21:36 | 只看该作者
lushidegreen 发表于 2017-1-9 09:10
(⊙o⊙)…这不是解决之道吧
我现在是实现产品的功能,不是做实验。
用户用什么容量的卡,根本不可能知道 ...

那只能自己实现这部分驱动
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
10#
 楼主| 发表于 2017-1-9 16:42:14 | 只看该作者
Lewis 发表于 2017-1-9 16:21
那只能自己实现这部分驱动

我要是有能力自己实现,就不会在这里发帖求助了
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-18 04:38 , Processed in 0.054077 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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