上周末拿到
开发板,开始测试例子,到实验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多秒才能显示出来,不知道是我自己机器的事还是什么问题,大家可以测试下。