本帖最后由 Gavin3389 于 2021-9-24 09:26 编辑
这个没做具体测试和更改,完全把例程编译下载,看效果。
例程出处:
hc32f460_ddl_Rev2.1.0
sd_multi_write_multi_read_1bit_25mhz
卡容量:16G
主函数:
- /**
- *******************************************************************************
- ** \brief Main function of project
- **
- ** \param None
- **
- ** \retval int32_t return value, if needed
- **
- ******************************************************************************/
- int32_t main(void)
- {
- uint32_t i;
- en_result_t enTestResult = Ok;
- static stc_sd_handle_t stcSdhandle;
- static uint32_t au32WriteBlocks[512];
- static uint32_t au32ReadBlocks[ARRAY_SZ(au32WriteBlocks)];
- stc_sdcard_init_t stcCardInitCfg =
- {
- SdiocBusWidth1Bit,
- SdiocClk25M,
- SdiocNormalSpeedMode,
- NULL,
- };
- /* Write buffer data */
- for (i = 0ul; i < ARRAY_SZ(au32WriteBlocks); i++)
- {
- au32WriteBlocks[i] = i;
- }
- MEM_ZERO_STRUCT(au32ReadBlocks);
- /* BSP initialization */
- BSP_CLK_Init();
- BSP_LED_Init();
- /* Initialize SDIOC pin */
- SdiocInitPins();
- /* Initialize SD card */
- stcSdhandle.SDIOCx = SDIOC_UNIT;
- if (Ok != SDCARD_Init(&stcSdhandle, &stcCardInitCfg))
- {
- enTestResult = Error;
- }
- /* Erase SD card */
- if (Ok != SDCARD_Erase(&stcSdhandle, SD_SECTOR_START, SD_SECTOR_COUNT, 20000u))
- {
- enTestResult = Error;
- }
- /* Read SD card */
- if (Ok != SDCARD_ReadBlocks(&stcSdhandle, SD_SECTOR_START, SD_SECTOR_COUNT, (uint8_t *)au32ReadBlocks, 2000u))
- {
- enTestResult = Error;
- }
- /* Check whether data value is OxFFFFFFFF or 0x00000000 after erase SD card */
- for (i = 0u; i < ARRAY_SZ(au32WriteBlocks); i++)
- {
- if ((au32ReadBlocks[i] != 0xFFFFFFFFul) &&
- (au32ReadBlocks[i] != 0x00000000ul))
- {
- enTestResult = Error;
- break;
- }
- }
- /* Write SD card */
- if (Ok != SDCARD_WriteBlocks(&stcSdhandle, SD_SECTOR_START, SD_SECTOR_COUNT, (uint8_t *)au32WriteBlocks, 2000u))
- {
- enTestResult = Error;
- }
- /* Read SD card */
- if (Ok != SDCARD_ReadBlocks(&stcSdhandle, SD_SECTOR_START, SD_SECTOR_COUNT, (uint8_t *)au32ReadBlocks, 20000u))
- {
- enTestResult = Error;
- }
- /* Compare read/write data */
- if (0 != memcmp(au32WriteBlocks, au32ReadBlocks, sizeof(au32ReadBlocks)))
- {
- enTestResult = Error;
- }
- if (Ok == enTestResult)
- {
- BSP_LED_On(LED_GREEN); /* Test pass && meet the expected */
- }
- else
- {
- BSP_LED_On(LED_RED); /* Test fail && don't meet the expected */
- }
- while (1)
- {
- }
- }
测试效果:
插入卡绿色LED点亮:
拔除卡红色LED点亮:
对照例程txt说明:
================================================================================
样例使用说明
================================================================================
版本历史
日期 作者 IAR MDK GCC 描述
2018-11-08 CDT 7.70 5.16 8.3.1 first version
================================================================================
平台说明
================================================================================
GCC工程,由Eclipse IDE外挂GNU-ARM Toolchain,再结合pyOCD GDB Server实现工程的编译、
链接和调试。在用Eclipse导入工程后,请将xxxx_PyOCDDebug中pyocd-gdbserver和SVD文件
设置为正确的路径;请将xxxx_PyOCDDownload中pyocd设置为正确的路径。注意,这些路径不
能包含非英文字符。
功能描述
================================================================================
本样例主要展示如何通过普通速度模式25MHz,多块1bit模式,读写SD卡。
说明:
无
================================================================================
测试环境
================================================================================
测试用板:
---------------------
EV-HC32F460-LQFP100-050-V1.3
辅助工具:
---------------------
无
辅助软件:
---------------------
无
================================================================================
使用步骤
================================================================================
1)测试板SD卡Socket插入MicroSD卡;
2)打开工程并重新编译;
3)启动IDE的下载和调试功能,全速运行;
4)LED_GREEN点亮,读写数据一致,测试结果符合预期。
================================================================================
注意
================================================================================
LED指示灯说明:
LED_RED:表示测试结果不符合预期;
LED_GREEN:表示测试结果符合预期;
================================================================================
结论:测试通过!
|