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、初始化函数
-
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/
转载:https://blog.csdn.net/HaaSTech/article/details/114694509