完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
|
因为我开发的产品程序是基于BIOS的,产品主要的功能已经实现,因此其他的功能也必须在BIOS下实现。 现在还差一个功能,就是连接PC后,让PC将产品识别为U盘。 我已经在BIOS下成功实现了48M虚拟U盘,其中48M就是USB_DEV_MSC中映射到内存上的空间。 在将disk_read(),disk_write(),disk_initialize(),disk_ioctl()这4个函数映射到SD卡操作时遇到了问题。 我本来想直接使用FatFs中的函数,但是在FatFs中这几个函数可能用到了信号量,而调用它们的上层函数USBDMSCStorageRead,USBDMSCStorageWrite,USBDMSCStorageNumBlocks可能是在ISR中执行的。最后就只能移植不带BIOS的MMCSD例程中的实现函数来实现disk_read()等4个函数。 通过上述方法,实现了所需要的USB读卡器功能。 |
|
|
|
在实现USB读卡器过程中,分析USB_DEV_MSC例程可知,只需要实现几个底层函数,即文件u***dmscglue.c中的5个函数:
USBDMSCStorageOpen(),打开MSC设备 USBDMSCStorageClose(),关闭MSC设备 USBDMSCStorageRead(),读块 USBDMSCStorageWrite(),写块 USBDMSCStorageNumBlocks(),获取总的块数量 事实上,前两个函数只是对标志变量进行操作,因为SD卡的初始化操作在进行USB枚举前已经进行过了。 只需要实现后面3个函数即可。 我想知道的是楼主移植 USB 驱动库到 SYS/BIOS 并能够正常运行了么?这个是一个难点哦 |
|
|
|
我想知道的是楼主移植 USB 驱动库到 SYS/BIOS 并能够正常运行了么?这个是一个难点哦 |
|
|
|
我把USB_DEV_MSC例程中的disk_read()和disk_write()函数改成了如下内容: Uint32 MMCSD_disk_read(void * pvDrive, unsigned char *pucData, unsigned int ulSector, unsigned int ulNumBlocks) { Uint32 res = 0; res = SDMMC_MEM_readBytes ( hSDMMCMemInfo, ulSector *512, ulNumBlocks * 512, pucData); return res; } Uint32 MMCSD_disk_write(void * pvDrive, unsigned char *pucData, unsigned int ulSector, unsigned int ulNumBlocks) { Uint32 res = 0; Uint32 i; for (i = 0; i < ulNumBlocks; i++) { res = SDMMC_MEM_writeBytes ( hSDMMCMemInfo, (ulSector + i) * 512, 512, &pucData[i * 512]); UTIL_waitLoop(100000); UTIL_waitLoop(100000); UTIL_waitLoop(100000); } return res; } 其中有一个问题,SD卡写块函数不能调用SDMMC_MEM_writeBytes() 进行连续写,而且在每个块直接需要加入UTIL_waitLoop(100000);延时,而且不能少于3个100000。因为这个原因,所以SD卡写的时候很慢。 另外一个问题是,只能使用创龙配的8G SD卡,用其它卡的时候只能正常读,写入则会导致SD卡文件系统崩溃。用常用的正常读卡器插入,PC无法正常读取文件。用WinHex查看,发现DBR扇区已经被非法修改。 我想问一下,这两个问题是什么原因造成的?{:soso_e132:}{:soso_e132:} 第一个问题可能是 SD 操作没有使用中断方式 必须等待写操作完成 |
|
|
|
我是直接移植USB_DEV_MSC例程的,已经实现USB读卡器功能。 只是还有一个适用性问题,就是写操作只能在你们创龙提供的8G SD卡,在其他SD卡上只能进行正确的读,一写就错。 可能是容量问题要不你顺带在论坛分享下你 USB 库的移植经验 貌似不少工程师遇到同样的问题 |
|
|
|
可能是容量问题 要不你顺带在论坛分享下你 USB 库的移植经验 貌似不少工程师遇到同样的问题 |
|
|
|
第一个问题可能是 SD 操作没有使用中断方式 必须等待写操作完成 |
|
|
|
|
|
|
|
.pcb{margin-right:0} 事实上我查过SDMMC_MEM_writeBytes()函数的底层代码,是有等待操作完成的。 该函数有返回值,我尝试过类似下面的代码: for (i = 0; i < ulNumBlocks; ) { res = SDMMC_MEM_writeBytes ( hSDMMCMemInfo, (ulSector + i) * 512, 512, &pucData[i * 512]); UTIL_waitLoop(100000); if (E_PASS == res ) i++; } 这样会检测每个扇区是否写入成功,直到成功才写下一个扇区。 但结果还是会造成SD卡文件系统崩溃。r 之前不是说用创龙提供的 SD 卡是正常的么? |
|
|
|
之前不是说用创龙提供的 SD 卡是正常的么?r |
|
|
|
我用上面if (E_PASS == res ) i++;的方式,好像所有的卡都不行。 用前面说的,3个UTIL_waitLoop(100000);,创龙的8G卡是可以的。r 对了你有没有试过用 SYS/BIOS 基于 RAW 模式读写 SD 卡的代码呢?从理论上讲应该不会有什么问题的 |
|
|
|
对了你有没有试过用 SYS/BIOS 基于 RAW 模式读写 SD 卡的代码呢? 从理论上讲应该不会有什么问题的r |
|
|
|
狂顶啊, 楼主是不是只要 修改Uint32 MMCSD_disk_write和 Uint32 MMCSD_disk_read就可以实现 USB和PC的通信呢?? USB小白问题让您见笑了。r
|
|
|
|
该帖基本沉底了。 创龙工程师说,在DSP端实现读卡器功能意义不大,因此也没有出后续的支持例程。 1楼已经说明,目标是:将C6748开发板枚举成MSC设备,电脑通过USB读取开发板上的SD卡。 r |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
基于RK3588J的6路MIPI CSI视频采集案例分享,多路视频系统必看!
1211 浏览 0 评论
589 浏览 0 评论
【创龙科技TL570x-EVM开发板试用体验】 GStreamer 功能测评
8560 浏览 8 评论
【创龙科技TL570x-EVM开发板试用体验】创龙TL5708-EVM开发板入手使用体验评测
6575 浏览 0 评论
【创龙TLZ7x-EasyEVM评估板试用连载】+3.环境搭建vmware+ubuntu详细教程(二)
1397 浏览 0 评论
831浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板及核心板介绍
827浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板--板卡调试软件安装
845浏览 0评论
【创龙科技AM64x开发板试用体验】AM64x开发板开箱测评
835浏览 0评论
求助! 关于使用自制底板插入创龙IMX8MM 核心板无法启动问题
489浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 16:44 , Processed in 0.979557 second(s), Total 107, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号