STM32
直播中

刘先睿

7年用户 201经验值
私信 关注
[问答]

USB读卡器读8G卡出现提示要格式化

上周末拿到开发板,开始测试例子,到实验27 USB读卡器时,发现用4G卡测试通过,用8G卡打开时提示需要格式化,并且格式化显示的大小是4G的。
发帖暂时无人给出解决方法只好自己分析代码,终于发现问题所在。
主要问题出在 u32 SD_GetCapacity(void) //获取SD卡的容量(字节) 这个函数,当用我的8G卡时
在这个函数中我分别在每一步打印输出了Capacity的值
      Capacity=((u32)csd[8])<<8;   
      Capacity+=(u32)csd[9]+1;  
      Capacity = (Capacity)*1024;//得到扇区数  Capacity = ECE000
      Capacity*=512;//得到字节数    //由上步的Capacity 值计算出 Capacity = 4B107C000
很明显,最后Capacity的值是9位的十六进制数,而我们定义的Capacity 为u32,Capacity 的值溢出了!!!
解决办法:
去掉Capacity*=512;//
main()函数中
Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0]; 改为 Mass_Block_Count[0]=Mass_Memory_Size[0];
手头没有16G卡,所以没有测试,按道理说16G卡应该也溢出,不知道原子哥的16G卡怎么测试通过的。
目前还有个问题就是8G卡在PC上检测到的速度明显比4G的要慢很多,大概用10多秒才能显示出来,不知道是我自己机器的事还是什么问题,大家可以测试下。

回帖(2)

刘宇

2020-3-19 10:13:41
靠,还真没这么取算过.
           8G的字节数:8589934592
32位最大表示的数值:4294967296
诶...
举报

袁媛

2020-3-19 10:23:01
确实啊,sd卡读取容量那个函数问题比较大啊~
举报

更多回帖

发帖
×
20
完善资料,
赚取积分