OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3616|回复: 2

解决战舰开发板USB读卡器例程中不支持4G以上卡的bug

[复制链接]

15

主题

28

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2014-12-12
在线时间
30 小时
发表于 2016-2-1 14:56:11 | 显示全部楼层 |阅读模式
本帖最后由 JM哆啦a梦 于 2016-2-1 15:41 编辑

这几天用原子哥的USB读卡器例程来模拟U盘发现一个奇怪的问题,从模拟的U盘把文件复制进去,用FATFS文件系统居然找不到,插上读卡器在电脑上读取也找不到。再把文件通过读卡器复制到卡里面,这回打开通过32模拟出来的U盘里面找不到了。分析了一下代码,终于找到了问题所在,关键在于mass_mal.c文件中的MAL_Write()和MAL_Read( )函数,如图1所示,Memory_Offset中的变量是32bit的地址,虽然最终传递给SPI读写函数的地址已经变成扇区地址,即Memory_Offset>>9,但是地址传递进MAL_Write()和MAL_Read( )函数时候已经溢出了,即该函数最大还是只能支持4G卡,具体的修改方法如下:
1.mass_mal.c中的 u16 MAL_Write(u8 lun, u32 Memory_Offset, u32 *Writebuff, u16 Transfer_Length) 和 u16 MAL_Read(u8 lun, u32 Memory_Offset, u32 *Readbuff, u16 Transfer_Length)改成->  u16 MAL_Write(u8 lun, uint64_t Memory_Offset, u32 *Writebuff, u16 Transfer_Length)  和u16 MAL_Read(u8 lun, uint64_t Memory_Offset, u32 *Readbuff, u16 Transfer_Length) mass_mal.h中的函数声明也要修改成64bit的。

图1

图1

2.调用MAL_Write()和 MAL_Read()的函数也要修改,使得传递给这两个函数的地址是64bit的,分别是void Write_Memory (u8 lun, u32 Memory_Offset, u32 Transfer_Length)和和函数void Write_Memory (u8 lun, u32 Memory_Offset, u32 Transfer_Length) ,如图2、3所示,两个函数中的static u32 Offset, Length;改成 static uint64_t Offset, Length;

图2

图2

图3

图3


3、第三个是SD_WriteDisk()和 SD_ReadDisk(),中的形参32bit 的sector,如果要执行函数里面的sector <<= 9;那么也是溢出的,但是SD卡是按照扇区地址来操作的,故不再执行 sector <<= 9(将扇区地址变成字节地址),即不会溢出,故SD_WriteDisk()和 SD_ReadDisk()函数可以可以不做修改。

图4

图4

至此,4G以上的SD卡已成功支持。看一下实验现象。
8G 的TF卡,用了5G多了

8g的TF卡

8g的TF卡


普通读卡器读到的文件

普通读卡器读到的文件

普通读卡器读到的文件
   
修改程序前模拟U盘读到的文件

未修改程序前的文件

未修改程序前的文件


修改程序后模拟U盘读到的文件

修改程序后

修改程序后

可以看到修改程序后读取8G的内存卡,读到的文件和市面上卖的读卡器读到的是一样的,而未修改前的程序读到的则由很多乱码。上传源代码



实验50 USB读卡器实验(支持4G以上的SD卡).rar (976.05 KB, 下载次数: 343)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-2-1 16:20:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-4-6
在线时间
12 小时
发表于 2016-5-20 08:59:41 | 显示全部楼层
赞!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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