Gavin3389 发表于 2021-9-24 09:24

【评测】sd

本帖最后由 Gavin3389 于 2021-9-24 09:26 编辑

这个没做具体测试和更改,完全把例程编译下载,看效果。

例程出处:
hc32f460_ddl_Rev2.1.0
sd_multi_write_multi_read_1bit_25mhz
卡容量:16G

主函数:
/**
*******************************************************************************
** \briefMain function of project
**
** \paramNone
**
** \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;
    static uint32_t au32ReadBlocks;
    stc_sdcard_init_t stcCardInitCfg =
    {
      SdiocBusWidth1Bit,
      SdiocClk25M,
      SdiocNormalSpeedMode,
      NULL,
    };

    /* Write buffer data */
    for (i = 0ul; i < ARRAY_SZ(au32WriteBlocks); i++)
    {
      au32WriteBlocks = 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 != 0xFFFFFFFFul) &&
            (au32ReadBlocks != 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:表示测试结果符合预期;

================================================================================


结论:测试通过!

页: [1]
查看完整版本: 【评测】sd