实战HaaS100扩展SD卡

1、前言

HaaS100开发板提供了非常灵活的存储方案。其中开发板上就自带了

  • 内存:2.5MB SRAM,16MB PSRAM;
  • Nor Flash:16MB;

同时,还支持最大支持64GB的TF卡扩展 (TF卡,即T-Flash卡,也称micro SD卡或微型SD卡)。

而HaaS100 搭载的AliOS Things操作系统中,提供了丰富的文件系统类型,以下是其中几个典型推荐: 

  • littlefs文件系统,文件数据存储在Nor Flash上;
  • fatfs文件系统,文件数据存储在外置SD-Card上;
  • ramfs文件系统,文件数据存储在内存中;

其中,外置SD-Card适用于需要存储文件、图片、音视频等较大数据的场景。

本文就讲述如何在HaaS100开发板上进行读写SD扩展卡操作,内容包括:

  • SD卡硬件连接;
  • AliOS Things FAT文件系统使能;
  • 文件系统读写示例;

2、SD卡硬件连接

2.1、硬件连接

HaaS100支持外接微型SD卡(Micro SD),最大支持64GB数据的存储。

SD卡槽位于开发板背面(HaaS100 logo的反面),可以外接微型SD存储卡,具体的硬件连接方法请参考下图。

2.2、SD卡格式化

SD卡在使用前,一般都需要格式化以支持特定文件系统格式(一般是FAT)数据的存储。

HaaS100软件支持SD卡上FAT16/FAT32/exFAT等格式的文件系统数据的读写访问。

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

请参考一下步骤准备好一张可用的微型SD存储卡(TF卡),并格式化成FAT文件系统格式。

  • 准备好一张微型SD卡和一个读卡器,读卡器可以是专用的SD读卡器或USB读卡器等。
    image
  • 将SD卡插入读卡器,并连接到PC上进行格式化,支持格式化为FAT16/FAT32/exFAT格式(现在PC上一般只支持FAT32和exFAT)。注意:Windows系统上一般有自带的SD卡格式化软件,通过右键选择即可将SD卡格式化成FAT格式,macOS和Linux上请自行安装类似软件(或用命令行)进行操作。
  • image
    image
  • 完成格式化后,将SD卡连接到HaaS100开发板,以备运行在HaaS100上的软件访问。

3、AliOS Things FAT文件系统使能

HaaS100软件上要使用fatfs文件系统访问SD卡,则需要在对应的app工程中使能fatfs文件系统组件。以下以helloworld_demo工程为例进行说明。

1、打开application/example/helloworld_demo/aos.mk文件,添加fatfs组件依赖。

image

2、打开application/example/helloworld_demo/aos.mk文件,添加SD卡介质支持(CONFIG_AOS_FATFS_SUPPORT_MMC宏配置)。

image

注意,目前HaaS100软件上默认只打开了FAT16/FAT32格式的支持。

如果您选择了将SD卡格式化为exFAT格式,则需要在编译HaaS100软件前,打开exFAT格式的支持选项。

具体步骤为:

(1)打开HaaS100代码工程中的components/fs/fatfs/ff/include/ffconf.h文件,并将FF_FS_EXFAT配置项修改为1,参考下图。

image.png

4、读写代码示例

HaaS100支持通过标准POSIX接口访问SD卡文件系统,SD卡fatfs文件系统默认的挂载路径为/sdcard,即所有SD卡文件的访问均要以/sdcard路径开头,如/sdcard/testfile.txt

请参考以下步骤添加SD卡文件的访问代码逻辑,以下示例代码展示了如何进行基本的文件打开(open)、写(write)、读(read)、关闭(close)操作。

以下测试代码均添加在application/example/helloworld_demo/appdemo.c文件中。

1、添加头文件。示例代码使用了open/read/write/close接口,因此需要添加以下头文件:

/* 请根据调用接口的需要,添加包含相应的头文件。 */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include "aos/cli.h"

2、添加文件读写逻辑

/* 以下逻辑包含基本的文件打开、读写、关闭操作。 */ 
static void sd_file_test()
{
    int fd, rc, err = 0;
    char buf[256] = {0};
    const char *f = "/sdcard/test.txt";
    const char *str = "Hello SD card file.";

    /* 文件打开 */
    fd = open(f, O_CREAT | O_RDWR);
    if (fd < 0) {
        printf("Failed to open file %s, errno: %d\r\n", f, errno);
        return 0;
    }

    rc = write(fd, str, strlen(str));
    if (rc < 0) {
        err = 0;
        printf("Failed to write to file %s, rc: %d\r\n", f);
    }

    close(fd);
    if (err) return;

    fd = open(f, O_RDONLY);
        if (fd < 0) {
        printf("Failed to open file %s, errno: %d\r\n", f, errno);
        return 0;
    }

    rc = read(fd, buf, sizeof(buf) - 1);
    if (rc < 0) {
        printf("Failed to read file %s\r\n", f);
    } else {
        printf("Read from file: %s", buf);
    }

    close(fd);
}

3、添加接口调用

int application_start(int argc, char *argv[])
{
    int count = 0;

    printf("nano entry here!\r\n");

    sd_file_test(); /* 调用SD卡文件操作接口 */

    while(1) {
        printf("hello world! count %d \r\n", count++);
        aos_msleep(1000);
    };
}

4、工程编译、收录和运行。

请参考HaaS100快速开始完成helloworld_demo工程的编译和烧录。

运行后,将看到Read from file: Hello SD card file.的打印信息,将SD卡连接到PC上也可以看到文件test.txt已被写入SD卡。

5、至此,即完成了访问SD卡上的文件的所有操作。

5、开发者技术支持

本文介绍了如何使用HaaS100读写扩展SD卡文件,包括硬件连接、软件配置、文件读写代码示例。

如需更多技术支持,可加入钉钉开发者群

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

猜你喜欢

转载自blog.csdn.net/HaaSTech/article/details/110946389
今日推荐