小言_互联网的博客

HaaS EDU K1设备资源 之 SD卡

365人阅读  评论(0)

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用到的测试代码文件路径如下:

application/example/edu_demo/mfg_test/sd_test.c

驱动文件位于:

platform/mcu/haas1000/hal/sd.c

 

3.2.1、测试流程

 

3.2.2、初始化函数


  
  1. int32_t hal_sd_init(sd_dev_t *sd)
  2. {
  3.     int ret;
  4.     hal_iomux_init(( struct HAL_IOMUX_PIN_FUNCTION_MAP *)sd_pinmux, sizeof(sd_pinmux) / sizeof( struct HAL_IOMUX_PIN_FUNCTION_MAP));
  5.     ret = hal_sdmmc_open(HAL_SDMMC_ID_0);
  6.     if ( 0 == ret)
  7.     {
  8.         sd_initialised = 1;
  9.         if (sd)
  10.         {
  11.             sd->port = HAL_SDMMC_ID_0;
  12.             sd->config.bus_wide = hal_sdmmc_get_bus_width(HAL_SDMMC_ID_0);
  13.             sd->config.freq = hal_sdmmc_get_clock(HAL_SDMMC_ID_0);
  14.             sd-> priv = NULL;
  15.         }
  16.     } else {
  17.         printf( "sd init failed!\n");
  18.     }
  19.     return ret;
  20. }

 

3.2.3、测试代码


  
  1.   testfd = fopen( SDTEST_FILE_NAME, "w");
  2.     if(testfd == NULL) {
  3.         printf( "create /sdcard/sdtest.test fail !!!\n");
  4.         return;
  5.     }
  6.     printf( "create /sdcard/sdtest.test success !!!\n");
  7.     data = (char *)malloc(SDTEST_FILE_LEN);
  8.     for (i = 0; i < SDTEST_FILE_LEN / strlen( SDTEST_WORDS); i++) {
  9.         memcpy( data + i * strlen(SDTEST_WORDS), SDTEST_WORDS, strlen(SDTEST_WORDS));
  10.     }
  11.     printf( "begin init /sdcard/sdtest.test ... \n");
  12.     ret = fwrite( data, 1, SDTEST_FILE_LEN, testfd);
  13.     if(ret != SDTEST_FILE_LEN) {
  14.         printf( "write data SDTEST_FILE_LEN bytes to file /sdcard/sdtest.test fail !!!\n");
  15.     }
  16.     fsync(testfd);
  17.     printf( "write init data to /sdcard/sdtest.test success !!!\n");
  18.     fclose(testfd);
  19.     free( data);
  20.     aos_msleep( 1000);
  21.     ret = sdtest_read();
  22.     ret += sdtest_write();

 

3.3、编译与下载

3.3.1、代码准备

打开edu_demo的产测开关

application/example/edu_demo/Config.in

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


  
  1. config EDK_DEMO_FACTORY_TEST_ENABLIE
  2.     bool "enable factory test function"
  3.     default y

 

加入Demo到启动代码

application/example/edu_demo/app_entry.c

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


  
  1.        //menu_init();
  2. sdcard_test();

 

3.3.2、编译

如下使用命令行方式


  
  1. aos make distclean
  2. aos make edu_demo@haaseduk1 -c config
  3. aos make

4.3.3、烧录

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

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

 

开发者技术支持

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

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

 


转载:https://blog.csdn.net/HaaSTech/article/details/114694509
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场