之前我们测试了SPI方式读写SD卡的速度,今天再来测试一下SDIO方式的读写速度。
• 编译环境:MDK 5.30+HAL库
• SD卡:闪迪32GB/64GB TF卡
• 文件系统:FatFS R0.12c
在之前的测试中已经说过了,非DMA方式速度和资源利用率都不如DMA方式,所以今天主要就测试SDIO+DMA方式的极限速度。SDIO采用的4线模式,理论上比1线的要快4倍。
首先用STM32CubeMx配置SDIO,如下:4线模式,分频系数为0,即不分频,此时SDIO的时钟为48MHz(单片机主频配置的为168MHz)。
使能SDIO的收发DMA:
接下来需要配置FatFS文件系统,如下:
由于需要测试64GB的卡,就需要使能exFAT文件系统(超过32G的卡需要使能),同时也要使能“长文件名”功能,不然会报错。
接下来直接生成代码,生成的代码中,底层驱动、以及文件系统都已经封装好了,直接调用相关函数就行。测试程序如下:
#define NUM 32768
retSD = f_mount(&SDFatFS, (TCHAR const*)SDPath, 0);//挂载
retSD = f_open(&SDFile,(const char*)"test.txt",FA_CREATE_ALWAYS|FA_WRITE);
for(uint32_t i=0;i
{
FileBuf[i] = (i%7) + 0x30;
}
tick = 0;//ms计数器清零
for(uint8_t i=0;i<100;i++)//每次写入NUM个字节,连续写入100次
{
retSD = f_write(&SDFile,FileBuf,NUM,&bw);
retSD = f_sync(&SDFile);
}
retSD = f_close(&SDFile);
for(uint32_t i=0;i
{
FileBuf[i] = 0;
}
retSD = f_open(&SDFile,(const char*)"test.txt",FA_OPEN_EXISTING|FA_READ);//打开文件
tick = 0;
for(uint8_t i=0;i<100;i++)//读取NUM个字节,连续读取100次
{
retSD = f_read(&SDFile,FileBuf,NUM,&bw);
}
retSD = f_close(&SDFile);
END
→点关注,不迷路←