【学习STM32F4】第五天

这篇博客介绍了如何修改STM32F4的官方SDIO驱动以支持大于4GB的SD卡。主要改动在于SD_GetCardInfo函数中,通过将DeviceSize转换为64位整型并更新CardCapacity的类型为uint64_t,从而解决容量限制问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                              SDIO

官方已经提供了详细的SDIO驱动,可以直接拿来使用,但是不能支持大于4GB的卡, file:stm324xg_eval_sdio_sd.c(version V1.0.2)

修改SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo)函数

cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;

变成下面的句子

cardinfo->CardCapacity = ((uint64_t)cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024; 

因为SD_csd.DeviceSize是32位整型变量,

然后需要将

typedef struct
{
  SD_CSD SD_csd;
  SD_CID SD_cid;
  uint64_t CardCapacity;  /*!< Card Capacity */
  uint32_t CardBlockSize; /*!< Card Block Size */
  uint16_t RCA;
  uint8_t CardType;
} SD_CardInfo;

中的CardCapacityuint32_t变为uint64_t

 

 我的一张8GB的卡在修改前后的情况:






fatfs文件系统http://elm-chan.org/fsw/ff/00index_e.html

  FATFS fs;          
  FRESULT res;                 
  DIR dirs;
  FILINFO finfo;
disk_initialize (0);//初始化硬件
res=f_mount(0, &fs);//挂载文件系统
res=f_opendir(&dirs, "0:/");//打开根目录
res=f_readdir(&dirs, &finfo);//读取目录

 

判断目录是否读取完

while((f_readdir(&dirs, &finfo) == FR_OK )&& finfo.fname[0])

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值