本帖最后由 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:表示测试结果符合预期;
================================================================================
结论:测试通过!
|