之前我們測試了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 32768retSD = 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
→點關注,不迷路←