如果用下面文件中的代码读取大于4G SD卡内部的容量信息会出现错误。
file:stm324xg_eval_sdio_sd.c(version V1.0.2)
语句:
cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;
功能:
计算SD卡的容量,表达式左侧是64位整型变量,SD_csd.DeviceSize是32位整型变量,
Bug
表达式右侧在进行32位的运算,然后赋值给左侧的64位变量,这样会导致结果的高位丢失。
对于4G容量的SD卡,计算没有问题,但对于8G或更大容量的SD卡,结果是错误的。
改正
cardinfo->CardCapacity = ((uint64_t)cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;
其实,这个错误从F103开始一直存在,在F103相应的代码中,CardCapacity是32位整形,表现的错误是对大于4G卡结果会溢出。 |