最近在看STM32F103相关的例程及驱动。在网上下载了一些官方的驱动例子来学习。
发现有个问题,卡的容量总是识别不对。具体的表现是:
8G的卡读出来的数值只有3.4G左右,按理来说读出来应该是7.5G以上的。
后来查询了一些资料发现,
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;
上面的定义其实出错了,CardCapacity只能显示到最大4G。
那么把uint32_t 改成 uint64_t 后呢?实测下来也不行…… 还是显示只有3.4G左右。
后来深入研究Cardcapacity的计算。发现其实仅仅是一个数位转换的问题。
{
/*!< Byte 7 */
tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
cardinfo->SD_csd.DeviceSize = (tmp & 0x3F) << 16;
/*!< Byte 8 */
tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
cardinfo->SD_csd.DeviceSize |= (tmp << 8);
/*!< Byte 9 */
tmp =