AiPi-Eyes-S1是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口,具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SPI、UART、I2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。
AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。
从零开始学习小安派:
新建的工程包含多个文件和文件夹,作为初学者第一次接触,下面浅聊一下我对工程文件的了解,若有不对的地方请大家多多指正。
一、build 文件夹
该文件夹是编译后生成的 bin 文件存储的地方,如本工程文件的文件名作为 Helloworld,编译后的 bin 文件也是以工程名 + 芯片命名。
生成的 bin 文件存储在 build/build_out 下,可以看见有多个类似的文件,这里我们烧录取 bin 文件,这里可以看到在 hellowworld 工程编译生成的 bin 文件命名为 helloworld_bl616.bin,因为 bl616 和 bl618 的芯片其实在软件上的区分很小,他们通用同一个 SDK,在硬件上的区分在于 616 的 IO 口数量不如 618,由于使用同一套 SDK,所以 bl616 和 618 的固件是可以通用的,这里无需过多计较区别。
注意,这里的 bin 文件在博流的烧录工具上并不是合成的 bin 文件,这里对应的 bin 文件是图中的 firmware 目录下的 bin 文件,还需要其他的如 boot2 等文件,那么问题来了,使用 Single Download Options 烧录的合成 bin 文件在哪里,其实是在 SDK 中,具体的路径为:
aithinker_Ai-M6X_SDK/tools/bflb_tools/bouffalo_flash_cube/chips/bl616/img_create/whole_flash_data.bin
如果需要使用 Windows 下的烧录工具烧录 bin 文件,选择这个路径下的 whole_flash_data.bin 即可。

二、CMakeLists.txt
CMake 是一个跨平台、开源的构建系统,它可以帮助我们管理好工程里的软件架构。CMakeLists.txt 文件相当于执行的列表,它可以调用其他的.h 头文件和.so/.a 库文件,生成 Makefile,将.cpp/.c/.cc 文件编译成可执行文件或新的库文件。我们从简单的 helloworld 工程学习,先打开 CMakeLists.txt 查看里面的语句。

BouffaloSDK 中封装了以下函数接口,基本满足常用场景使用。
| Function | Description |
|---|---|
| sdk_generate_library | 生成库,库名如果函数没有形参则使用当前库所在目录名 |
| sdk_library_add_sources | 为库添加源文件 |
| sdk_library_add_sources_ifdef | 为库添加源文件(满足 if 条件) |
| sdk_add_include_directories | 添加头文件路径 |
| sdk_add_include_directories_ifdef | 添加头文件路径(满足 if 条件) |
| sdk_add_compile_definitions | 添加宏定义,不要带 -D |
| sdk_add_compile_definitions_ifdef | 添加宏定义(满足 if 条件) |
| sdk_add_compile_options | 添加编译选项 |
| sdk_add_compile_options_ifdef | 添加编译选项(满足 if 条件) |
| sdk_add_link_options | 添加链接选项 |
| sdk_add_link_options_ifdef | 添加链接选项(满足 if 条件) |
| sdk_add_link_libraries | 添加静态库 |
| sdk_add_link_libraries_ifdef | 添加静态库(满足 if 条件) |
| sdk_add_subdirectory_ifdef | 编译子目录下的 cmakelist(满足 if 条件) |
| sdk_add_static_library | 添加外部静态库 |
| sdk_set_linker_script | 设置链接脚本 |
| sdk_set_main_file | 设置 main 函数所在文件 |
| project | 工程编译 |
| target_source(app PRIVATE xxx) | 添加源文件到 app 库中,当用户需要自己添加一些源文件又不想创建 cmakelist 单独编译成库,可以使用该项 |
三、flash_prog_cfg.ini
BouffaloSDK 采用新的 flash tool(bouffalo_flash_cube),并且烧录依赖 flash prog cfg.ini 文件。我们的烧录命令 make flash 就是依赖这个文件执行的。它也有自己的语法。

正常使用只需要创建一个 KEY,例如 [FW],并且填写 filedir 和 address 就可以使用了。
其中 filedir 的填写方式有以下几种:
bin 文件全路径 + bin 文件名称
bin 文件相对路径 + bin 文件名称
bin 文件名称添加 _$(CHIPNAME) 后缀可以自动识别成不同芯片(仅在 bin 文件名称前缀不同的时候使用)
bin 文件名称添加 * 通配符,可以自动补全 bin 文件名称(仅在 bin 文件名称前缀不同的时候使用)
1.模组作为 MCU(不使用无线功能)
只需要和 helloworld 工程一样修改 filedir 的文件名即可。
[cfg]# 0: no erase, 1:programmed section erase, 2: chip eraseerase = 1# skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separatedskip_mode = 0x0, 0x0# 0: not use isp mode, #1: isp modeboot2_isp_mode = 0[FW]filedir = ./build/build_out/xxx*_$(CHIPNAME).binaddress = 0x0000
2.模组作为 IOT(开启无线功能)
[cfg]# 0: no erase, 1:programmed section erase, 2: chip eraseerase = 1# skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separatedskip_mode = 0x0, 0x0# 0: not use isp mode, #1: isp modeboot2_isp_mode = 0[boot2]filedir = ./build/build_out/boot2_*.binaddress = 0x000000[partition]filedir = ./build/build_out/partition*.binaddress = 0xE000[FW]filedir = ./build/build_out/xxx*_$(CHIPNAME).binaddress = 0x10000[mfg]filedir = ./build/build_out/mfg*.binaddress = 0x210000
cfg 表示烧录时的一些配置,正常不需要改动FW 要烧录的应用固件,必须使用 FW 名称。filedir 表示应用固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。_$(CHIPNAME).bin 用于区分不同芯片。xxx 表示应用固件名称,与 CMakeLists.txt 中 project(xxx) 中名称一致。address 由 partition_xxx.toml 指定boot2 要烧录的 boot2 固件,必须使用 boot2 名称。filedir 表示 boot2 固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。自动从 bsp/board/board_name/config 目录拷贝。address 必须使用 0 地址partition 要烧录的 partition 固件,必须使用 partition 名称。filedir 表示 partition 固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。自动从 bsp/board/board_name/config 目录 partition_xxx.toml 转换成 bin 文件并拷贝。address 由 partition_xxx.toml 指定mfg 要烧录的 mfg 固件,必须使用 mfg 名称。mfg 可选,可以不烧录filedir 表示 mfg 固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。自动从 bsp/board/board_name/config 目录拷贝。address 由 partition_xxx.toml 指定partition,address 可以使用 @partition 代替绝对地址,@partition 将会自动从 partition_xxx.toml 找到对应的地址)
3.多个运行固化烧录
禁止使用通配符 * 以及 _$(CHIPNAME) 前缀,因为 bin 文件名称前缀相同。
[cfg]# 0: no erase, 1:programmed section erase, 2: chip eraseerase = 1# skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separatedskip_mode = 0x0, 0x0# 0: not use isp mode, #1: isp modeboot2_isp_mode = 0[FW1]filedir = ./build/build_out/xxx0.binaddress = 0x00000[FW2]filedir = ./build/build_out/xxx1.binaddress = 0x10000[FW3]filedir = ./build/build_out/xxx2.binaddress = 0x20000
四、main.c
main.c,主程序运行的文件。

五、Makefile
编译的文件,其指定了一系列以赖关系和依赖规则。指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,可以实现自动化编译,一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

目前来说只需要修改第二行 BL_SDK_BASE ?= $(SDK_DEMO_PATH)/../aithinker_Ai-M6X_SDK 的编译路径设置即可。
六、proj.conf
前面在 CMakeLists.txt 中提到的组件的使用,当我们需要使用各种组件或开启一些配置功能时,需要进入这个文件中添加。

举例:需要添加 SD 卡,或者 LVGL。需要在 proj.conf 中
set(CONFIG_FATFS 1)set(CONFIG_LVGL 1)
七、README.md
README 相当于一个说明书,由工程的管理者进行编写,包括该工程一些简介,使用方法,注意事项等等。
md 文件后缀的格式并不是什么高大上的文件,只是一种编辑的语法,可以使用记事本打开,也可以在 VS 中安装 Markdown Preview 插件。

这样查看 README 时可以右键点击 MPE:打开侧边预览,可以方便我们查看 README。

微信改版,容易错过最新资讯和福利?
快将“安信可科技”设为星标⭐
可以第一时间接收小安的推送!
▼

超远记录传输,超低功耗,安信可LoRa全系列产品如何选购?
这款产品我们做了二十多年,你可能还不知道
安信可更多产品信息可进入以下链接查阅:
●开发资料:https://docs.ai-thinker.com/
●官方教程:https://blog.csdn.net/Boantong_
●安信可官网:www.ai-thinker.com
●安信可社区:https://bbs.ai-thinker.com
●业务咨询请联系:18022036575



