HaaS EDU K1设备资源 之 SD卡

1、概述

很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有U盘,FLASH芯片,SD卡等。他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32GB以上),支持SPI/SDIO驱动,而且有多种体积的尺寸可供选择(标准的SD卡尺寸,以及TF卡尺寸等),能满足不同应用的要求。

只需要少数几个IO口即可外扩一个高达32GB以上的外部存储器,容量从几十M到几十G选择尺度很大,更换也很方便,编程也简单,是单片机大容量外部存储器的首选。

 

2、资源介绍

HaaS EDU K1最大支持1路eMMC4.41/SD3.0/SDIO3.0 主机接口, 单数据速率高达50MHz,最大支持64G。

 

3、示例介绍

3.1、硬件实现

HaaS EDU K1用到的SD卡为标准的TF卡槽。其在电路在开发板上默认是已经连接好了的。所以在硬件上不需要动任何东西。其连接原理图如图下:

                                        SD卡槽原理图

 

3.2、软件设计

SD用到的测试代码文件路径如下:

扫描二维码关注公众号,回复: 12808129 查看本文章

application/example/edu_demo/mfg_test/sd_test.c

驱动文件位于:

platform/mcu/haas1000/hal/sd.c

 

3.2.1、测试流程

 

3.2.2、初始化函数

int32_t hal_sd_init(sd_dev_t *sd)

{

    int ret;

    hal_iomux_init((struct HAL_IOMUX_PIN_FUNCTION_MAP *)sd_pinmux, sizeof(sd_pinmux) / sizeof(struct HAL_IOMUX_PIN_FUNCTION_MAP));

    ret = hal_sdmmc_open(HAL_SDMMC_ID_0);



    if (0 == ret)

    {

        sd_initialised = 1;

        if (sd)

        {

            sd->port = HAL_SDMMC_ID_0;

            sd->config.bus_wide = hal_sdmmc_get_bus_width(HAL_SDMMC_ID_0);

            sd->config.freq = hal_sdmmc_get_clock(HAL_SDMMC_ID_0);

            sd->priv = NULL;

        }

    } else {

        printf("sd init failed!\n");

    }



    return ret;

}

 

3.2.3、测试代码

  testfd = fopen(SDTEST_FILE_NAME, "w");

    if(testfd == NULL) {

        printf("create /sdcard/sdtest.test fail !!!\n");

        return;

    }



    printf("create /sdcard/sdtest.test success !!!\n");

    data = (char *)malloc(SDTEST_FILE_LEN);

    for (i = 0; i < SDTEST_FILE_LEN / strlen(SDTEST_WORDS); i++) {

        memcpy(data + i * strlen(SDTEST_WORDS), SDTEST_WORDS, strlen(SDTEST_WORDS));

    }



    printf("begin init /sdcard/sdtest.test ... \n");

    ret = fwrite(data, 1, SDTEST_FILE_LEN, testfd);

    if(ret != SDTEST_FILE_LEN) {

        printf("write data SDTEST_FILE_LEN bytes to file /sdcard/sdtest.test fail !!!\n");

    }

    fsync(testfd);



    printf("write init data to /sdcard/sdtest.test success !!!\n");

    fclose(testfd);

    free(data);



    aos_msleep(1000);



    ret = sdtest_read();

    ret += sdtest_write();

 

3.3、编译与下载

3.3.1、代码准备

打开edu_demo的产测开关

application/example/edu_demo/Config.in

在该文件中修改编译选项,打开EDK_DEMO_FACTORY_TEST_ENABLIE开关。

config EDK_DEMO_FACTORY_TEST_ENABLIE

    bool "enable factory test function"

    default y

加入Demo到启动代码

application/example/edu_demo/app_entry.c

函数application_start中注释掉menu_init();,添加sdcard_test(); 

       //menu_init();
       
       sdcard_test();

3.3.2、编译

如下使用命令行方式

aos make distclean

aos make edu_demo@haaseduk1 -c config

aos make

4.3.3、烧录

  • 命令行方式
aos upload
  • 图形界面方式

详见haaS EDU K1 快速开始 第4.3.3章节-使用GUI工具烧录部分。

开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

 

猜你喜欢

转载自blog.csdn.net/HaaSTech/article/details/114694509