|
本帖最后由 luweixuan 于 2013-2-6 22:30 编辑
背景:
硬件平台:STM32F407 DISCOVERY
编译器: IAR 6.30.1
原来的代码有结构体:- /**
- * @brief SD Card information
- */
- typedef struct
- {
- SD_CSD SD_csd;
- SD_CID SD_cid;
- uint32_t CardCapacity; /*!< Card Capacity */
- uint32_t CardBlockSize; /*!< Card Block Size */
- uint16_t RCA;
- uint8_t CardType;
- } SD_CardInfo;
复制代码 其中uint32_t CardCapacity存储有SD卡的容量值,单位为字节
在使用少于4G的容量的SD卡时,读取的容量值是对的,今天换上一个8G的SD卡,发现得到的只有3484 MB,但是真实的是7580 MB。
分析后得出32位的整型数据无法存储大于4G容量的数值,所以把- uint32_t CardCapacity; /*!< Card Capacity */
复制代码 改成- uint64_t CardCapacity; /*!< Card Capacity */
复制代码 最后断点跟踪到这个语句- cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;
复制代码 此语句在.c文件的SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo函数里
发现SD_csd.DeviceSize 的值是对的,SD_csd.DeviceSize = 15159
那么最后获取的容量应该是7580 MB,可是调试出来还是3484 MB??????????WHY?
注:通过语句- USARTx_Printf(USER_NO,"Capacity:%d MB\r\n", SDCardInfo.CardCapacity>>20);
复制代码 输出容量信息。
PS:哎呀,怎么发到AVR32版块了,请版主帮忙移动一下,刚才明明点了stm32版块的啊。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|