3589|3

2002

帖子

24

TA的资源

五彩晶圆(高级)

楼主
 

【M4开发板Hanker试用狂-Shower.Xu】9、有容乃大-基于USB设备的SD读卡器实现 [复制链接]

失败了无数次之后,一瞬间竟然可以了。成功和失败只隔了一层纸,但是个中滋味却相差甚远...

简单记录一下移植过程:
1、在SD实现读写的移植基础上展开。

2、usb端口初始化和USB鼠标一样,无需改变。

3、在此基础上加入下图几个文件

usb_msc_structs.c是大容量存储设备描述符文件。
usbdsdcard.c是基于fatfs的sd卡读写函数文件,主要有以下几个函数
  1. extern void * USBDMSCStorageOpen(unsigned long ulDrive);
    extern void USBDMSCStorageClose(void * pvDrive);
    extern unsigned long USBDMSCStorageRead(void * pvDrive, unsigned char *pucData,
    unsigned long ulSector,
    unsigned long ulNumBlocks);
    extern unsigned long USBDMSCStorageWrite(void * pvDrive, unsigned char *pucData,
    unsigned long ulSector,
    unsigned long ulNumBlocks);
    unsigned long USBDMSCStorageNumBlocks(void * pvDrive);
复制代码

它们供usb_msc_structs.c里面的tUSBDMSCDevice g_sMSCDevice实例引用。
usbdmsc.c是几个USB操作SD的API函数,供外部程序调用
  1. //*****************************************************************************
    //
    // API Function Prototypes
    //
    //*****************************************************************************
    extern void *USBDMSCInit(unsigned long ulIndex,
    const tUSBDMSCDevice *psMSCDevice);
    extern void *USBDMSCCompositeInit(unsigned long ulIndex,
    const tUSBDMSCDevice *psMSCDevice);
    extern void USBDMSCTerm(void *pvInstance);
    extern void USBDMSCMediaChange(void *pvInstance,
    tUSBDMSCMediaStatus eMediaStatus);
复制代码


4、加入相应的头文件和包含
修改库头文件请备份。

5、创建一个接收usb事件信息的回调函数
unsigned long
USBDMSCEventCallback(void *pvCBData, unsigned long ulEvent,
                     unsigned long ulMsgParam, void *pvMsgData)

6、初始化用到的UDMA模块
TI的例程里面用了DMA模块,我们用他的usbdmsc.c的话就必须要打开DMA模块,
我们要加入一个初始化函数。这个就是让我失败了一次又一次的家伙。。
但是我仿真时老是会死在USBDMSCCompositeInit(unsigned long ulIndex, const tUSBDMSCDevice *psDevice)函数的
    MAP_uDMAChannelAttributeDisable(psInst->ucINDMA, UDMA_ATTR_ALL);
    MAP_uDMAChannelAttributeDisable(psInst->ucOUTDMA, UDMA_ATTR_ALL);
这两句上,找不到原因,我就把他们注释掉了,哪位大侠能指导下为什么?谢谢
初始化前记得加这句tDMAControlTable sDMAControlTable[64] __attribute__ ((aligned(1024)));

7、初始化USB模块为大容量存储设备
  1. if(!USBDMSCInit(0, (tUSBDMSCDevice *)&g_sMSCDevice))
    {
    Show_Msg("Init USB MSC fail");
    return 0;
    }
    Show_Msg("Init USB device ");
复制代码


8、主函数里进行信息处理,显示
加入USBDMSCTerm((tUSBDMSCDevice *)&g_sMSCDevice);函数可以人为断开连接。
记得插拔卡必须要断电,本人对此程序造成的硬件损坏不负责
测试读写时最好两个usb口供电,不然屏幕会闪烁,可能电压不稳。
测试读出大概2xx-4xxK/s;写入居然是丢人的1xK;不知道原因,那位大侠分析一下教教我啊。
谢谢了。这个调试占用了我很多时间,要做别的事了,唉,时间不够用啊。

最后上图,源码,视频,福利

视频在这里:




[ 本帖最后由 shower.xu 于 2012-6-9 16:37 编辑 ]

IMG_1336.JPG (37.69 KB, 下载次数: 1)

连接成功

连接成功

IMG_1337.JPG (48.89 KB, 下载次数: 1)

断开连接

断开连接

盘符.jpg (13.76 KB, 下载次数: 1)

盘符.jpg

未命名-1.jpg (30.47 KB, 下载次数: 1)

未命名-1.jpg

QQ截图20120609135326.jpg (31.95 KB, 下载次数: 1)

QQ截图20120609135326.jpg

QQ截图20120609135357.jpg (38.85 KB, 下载次数: 1)

QQ截图20120609135357.jpg

QQ截图20120609135305.jpg (60.01 KB, 下载次数: 1)

QQ截图20120609135305.jpg

Read.jpg (23.49 KB, 下载次数: 1)

Read.jpg

yrnd.jpg (45.26 KB, 下载次数: 1)

福利

福利

3.86 USB_MSC.rar

1.19 MB, 下载次数: 98

售价: 1 分芯积分  [记录]

USB_MSC源代码

最新回复

厉害  详情 回复 发表于 2012-6-11 00:30
 
点赞 关注

回复
举报

1246

帖子

19

TA的资源

五彩晶圆(初级)

沙发
 
顶一个!!!
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

不错哟,顶

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

2453

帖子

19

TA的资源

五彩晶圆(中级)

4
 
厉害
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表