芯翼XY1100平台

## 软件下载地址: [GCC+eclipse+Jlink](http://101.200.35.208:8034/AM21EV5/Open_CPU_tools/GCC_eclipse_Jlink.zip) ## 1 SDK 版本开发说明 ### 1.1 SDK 版本介绍 外发 SDK 版本采用 lib 库加源码的方式,其中 lib 包括:basiclib(基础库)、xysocketlib(芯翼自研多 socket 机制) 、majorsocketlib、socketporxylib(socket 代理)、cdplib、onenetlib、pinglib、xyperflib。lib库具体路径为 targets\xinyiNBSoc_M3\Makefile\library。 提供的开源代码有 lwip 开源协议栈、DTLS、MQTT、CoAP、LWM2M 等开源代码,以及 userapp 下 的 demo 代码。原则上,用户仅允许在 userapp 文件夹下新增开发用户代码,不得在其他文件夹中修改代码,包括头 文件。 ### 1.2 lib 库开源代码的替换 对于少数用户,需要在芯翼业务功能模块基础上进行二次开发,芯翼可选择提供一些 lib 库的开源代 码,后续交由用户自行维护,例如 socket 等。 基于 SDK 版本添加使用芯翼 lib 库开源代码的使用方法为: ➢ 第一步: 打开 xinyi\targets\xinyiNBSoc_M3\Makefile\makefile,添加需要开源的 lib 库源码,如下红色所示: ifeq ($(RELEASE_VERSION),n) library: basiclib xysocketlib majorsocketlib socketporxylib cdplib onenetlib pinglib xyperflib else library: <font color=red>majorsocketlib pinglib xyperflib</font> endif ➢ 第二步: 继续修改 makefile 中的 clean 操作,去除对应 lib 库的 clean 动作,如红色部分: clean: @-rm -rf ./$(target)/\$$(OUTPUT_DIR) @-rm -f *.map *.axf *.hex *.lst *.dumpelf *.bin *.size ifeq ($(RELEASE_VERSION),y) @-rm -f $(BASICLIB_C_FILES_RAM) $(BASICLIB_C_FILES_FLASH) @-rm -f $(SOCKETPORXYLIB_C_FILES_RAM) $(SOCKETPORXYLIB_C_FILES_FLASH) <font color=red>#@-rm -f $(PINGLIB_FILES_RAM) $(PINGLIB_FILES_FLASH) #@-rm -f $(XYPERFLIB_FILES_RAM) $(XYPERFLIB_FILES_FLASH)</font> @-rm -f $(ONENETLIB_FILES_RAM) $(ONENETLIB_FILES_FLASH) @-rm -f $(TELECOMLIB_FILES_RAM) $(TELECOMLIB_FILES_FLASH) @-rm -f $(XYSOCKET_FILES_RAM) $(XYSOCKET_FILES_FLASH) <font color=red> #@-rm -f $(MAJORSOCKET_FILES_RAM) $(MAJORSOCKET_FILES_FLASH)</font> ➢ 第三步: 将芯翼提供的开源源码拷贝到对应的文件夹下,一般在 sys_app 和 TCPIP 两个文件夹下 ➢ 第四步: 点击 Eclips 工程的 Refresh 按钮刷新代码 ➢ 第五步: 双击 all,编出新的工程,即可使用。 ➢ 第六步: 用户后续就可以按照需求修改开源源码的代码 ## 2 GCC 版本编译 ### 2.1 工具安装 #### 2.1.1 GCC 交叉编译链 点击:gcc-arm-none-eabi-8-2019-q3-update-win32-sha2.exe Gcc 交叉编译链,直接安装即可,具体如下: ![image.png](https://cos.easydoc.net/68658482/files/knwrvpx8.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrvvfu.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrw2p0.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrw9ig.png) 注意:安装目录不能有空格、中文、特殊字符 ![image.png](https://cos.easydoc.net/68658482/files/knwrwq2f.png) 注:如果用于选择在 linux 环境下进行编译,则需要对应的安装 linux 环境下的 gcc 交叉编译工具:gcc-arm￾none-eabi-9-2019-q4-major-x86_64-linux.tar. #### 2.1.2 Cygwin 安装 1) 点击:setup-x86.exe 2) 选择本地安装: ![image.png](https://cos.easydoc.net/68658482/files/knwrxga5.png) 3) 选择安装路径: ![image.png](https://cos.easydoc.net/68658482/files/knwrxqqh.png) 对于 ARM 编译链安装时,安装文件夹名字最好重新命令一下,例如 GCC,路径名中不要带空格,避免出 现异常。 选择安装包路径,即 M3cygwin.7z 解压后存放的路径 ![image.png](https://cos.easydoc.net/68658482/files/knwrxzxm.png) 安装时,在 search 中搜索 make 和 busybox,将 skip 修改成 install,选择最新版本安装即可(注意红圈 中的选项,选择 full 或者 not installed 再搜索 make 和 busybox) ![image.png](https://cos.easydoc.net/68658482/files/knwrydrg.png) 4) 一直点击下一步即可完成安装 ### 2.2 makefile 架构 芯翼 SDK 遵循模块化编译原则,总体可分为基础功能模块和用户配置模块两类。 ➢ 基础功能模块为芯翼 SDK 最基础的业务,其中部分核心代码集成于基础库 libbasic.a 中,为保证系统 能够正常运行,基础模块必不可少且 libbasic.a 必须参与链接。 ➢ 用户可配置模块通过动态库的形式外发(路径:xinyiNBSoc_M3\Makefile\library),可按用户实际需 求自行选择是否链接。 #### 2.2.1 基础功能模块 如图所示,基础功能模块可分为 Cortex-M3 架构,LiteOs 操作系统,芯片底层驱动,TCPIP 协议, 以及芯翼基本业务模块(AT 业务框架)。这些模块作为芯翼系统基础功能,编译时必须被包含,以保证系统 能够正常运行。 ![image.png](https://cos.easydoc.net/68658482/files/knwryxnh.png) #### 2.2.2 用户可配置模块概述 如下图所示,用户可配置模块可以按照用户实际需求灵活的开关(y/n)。 路径:targets\xinyiNBSoc_M3\Makefile\feature.mk。 ![image.png](https://cos.easydoc.net/68658482/files/knwrz98u.png) **XY socket 模块** 配置选项:XY_SOCKET_SUPPORT 芯翼芯片自研的 socket 命令的实现代码,例如 AT+XSOPEN、AT+XSSEND、AT+XSREAD、 AT+XSCLOSE 等命令 **Major socket 模块** 配置选项:MAJOR_SOCKET_SUPPORT BC95 socket 命令的实现代码,例如 AT+NSOCR、AT+NSOST、AT+NSOSTF、AT+XSCLOSE 等命令 **芯翼 socket 代理模块** 配置选项:XY_SOCKET_PROXY_SUPPORT 芯翼芯片 DSP 核使用 socket 时,调用 api 接口的实现代码,目前未对外开发 **PING 模块** 配置选项:XY_PING_SUPPORT AT+NPING 命令的实现代码 **PERF 模块** 配置选项:XY_PERF_SUPPORT AT+XYPERF 命令的实现代码 **电信模块** 配置选项:TELECOM_VER_SUPPORT 实现电信 DM 功能以及对电信云的网络数据交互处理 **移动模块** 配置选项:MOBILE_VER_SUPPORT 实现移动 DM 功能以及移动云的网络数据交互处理; #### 2.2.3 模块 Makefile 架构详解 以系统软件模块(sys_app/module.mk)为例,每个模块的文件夹下都存有子 makefile: (module.mk 文件),模块内的源码及头文件都存放在 module.mk 中。 源码文件添加 源码以 C_FILES_RAM、C_FILES_FLASH、ASM_FILES_RAM 三个宏分类。用以区分代码的类型 (C 或者汇编)以及代码存放位置(RAM 或者 FLASH),具体说明如下: ⚫ C_FILES_RAM:存放在 RAM 的 C 文件 ⚫ C_FILES_FLASH:存放在 FLASH 上的 C 文件 ⚫ ASM_FILES_RAM:存放在 RAM 上的汇编文件 头文件路径添加 头文件通过宏 CFLAGS 添加,其中存放各自模块内部的头文件路径。 以 sys_app 目录下芯翼基本业务模块为例,参见下图: ![image.png](https://cos.easydoc.net/68658482/files/knws0ltl.png) ### 2.3 Makefile 配置文件说明 #### 2.3.1 批处理文件 build.bat 配置 根据 Gcc 交叉编译链工具和 Cygwin 工具安装路径,配置可执行文件路径。 以章节 2.1 中安装路径为例,配置如下: SET CYGWIN_ROOT=D:\M3cygwin32\bin\ SET GCC_GNU_ROOT=E:\gcc\bin\ #### 2.3.2 模块化编译开关文件 feature.mk 如图所示,此文件为模块化编译的控制单元,内部存放着所有可配置模块的宏开关。通过开遍宏值为 (y/n)可以选择该模块是否参与编译。 ➢参与编译——>置宏值 y ➢不参与编译——>置宏值 n ![image.png](https://cos.easydoc.net/68658482/files/knws1wsz.png) ### 2.3.3 Makefile 文件 (1)Make 编译核心语法 (2)指定参与 GCC 编译链接的源文件: 子模块 makefile 整合以及宏编译控制 C_FILES_RAM,C_FILES_FLASH, ASM_FILES_RAM 的整合 DEBUG 选项,用于临时将代码从 flash 中移动到 ram 中,便于断点调试。 前两个部分用户与模块化编译相关,通常不用改动! 第三部分与用户代码在线调试关联最紧密。参见章节 2.5。 #### 2.3.4 GCC 编译链接选项配置文件 GnuCfg.mk 根据实际需求配置 GCC 编译链接选项,具体包括 Gcc 交叉编译链工具选择、Lib 库、编译/汇编/链接 选项。原则上不准修改! #### 2.3.5 编译宏配置文件 MicroDefine.mk 配置 GCC 编译时使用的宏定义,当前已配置内容包括: 堆空间大小:-D__HEAP_SIZE=0x18C00 中断栈空间大小:-D__STACK_SIZE=0x400 原则上不准修改,若需要,与研发联系! #### 2.3.6 链接脚本 liteos.ld 指定 GCC 链接时的链接方式,主要包含以下两个内容: 内存区域划分 具体包括 Ram 中代码段、数据段的起始地址和长度、Flash 中代码段的起始地址和长度 目标文件中代码段、数据段、Bss 段的内存位置 后续根据实际内存区域划分修改以下配置即可: MEMORY { ROM (rx) : ORIGIN = 0x20028000, LENGTH = 0x1A000/* 96K 代码段*/ RAM (rw) : ORIGIN = 0x20000000, LENGTH = 0x28000/* 168K 数据段,bss、heap,stack*/ FLASH (rx) : ORIGIN = 0x27145000, LENGTH = 0x63000/* 312K 代码段*/ } 仅允许调整红色标记的三个值,且需要始终保持总 RAM 大小不变。 ### 2.4 执行编译 运行 build.bat,执行 make all 即可编译 tips:执行 make all 2>&1 | tee build.log,可以将编译 log 自动导入 build.log 文件 完成后,将 targets\xinyiNBSoc_M3\Makefile\xinyiNBSoc_M3 目录下生成的 ram.bin、flash.bin,拷 贝到烧录工具相关的多 bin 合一路径下即可,按照烧录工具指导进行烧录即可。 ### 2.5 动态调整代码存储区域——FLASH 或 RAM 由于存储于 Flash 上的代码在 Jlink 在线调试时,无法设置断点调试。若用户在 debug 时需要断点调 试,必须先保证代码存储于 RAM 上。芯翼 Makefile 系统提供动态调整代码位置的功能,可以便捷的将代 码从 RAM 上移动至 FLASH 中。操作如下: 将待移动.C 文件统一的添加至 targets\xinyiNBSoc_M3\Makefile\makefile 中的 C_DEBUG_ON_RAM 变量下,文件之间用反斜杠隔开,即可实现代码从 FLASH 到 RAM 的迁移!!! 注:调试完成后,清空 C_DEBUG_ON_RAM 中的内容,代码将自动回归到 flash 中。 ## 3 eclipse 工程使用 ### 3.1 Eclipse 环境配置 #### 3.1.1 eclipse 安装 双击 eclipse-inst-win64.exe,选择 Eclipse IDE for C/C++ Developers 选项。(安装过程中可能会出 现依赖包下载失败的情况,请删除安装目录重试几次) ![image.png](https://cos.easydoc.net/68658482/files/knwngo31.png) 安装软件会自动识别 Java 安装目录,这里仅需要指定 Eclipse 的安装目录即可。 ![image.png](https://cos.easydoc.net/68658482/files/knwnhoru.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnikg5.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnj24i.png) 安装完成后,直接点击 LAUNCH,启动 Eclipse,创建工作空间。 ![image.png](https://cos.easydoc.net/68658482/files/knwnjw28.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnka4e.png) #### 3.1.2 Eclipse MCU 插件安装 在 Help->Eclipse Marketplace 中搜索 gnu mcu,安装 GNU MCU Eclipse 4.5.1。 ![image.png](https://cos.easydoc.net/68658482/files/knwnkvge.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnlbz6.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnlya3.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnnk4s.png) ![image.png](https://cos.easydoc.net/68658482/files/knwnq2gl.png) 在安装过程中,若出现以下界面,选择 install anyway 即可。 ![image.png](https://cos.easydoc.net/68658482/files/knwr817g.png) 安装结束后,会出现以下界面,选择 restart now,重启 Eclipse,即可完成插件安装。 ![image.png](https://cos.easydoc.net/68658482/files/knwr88u5.png) ### 3.2 Project 工程使用指导 #### 3.2.1 project 工程创建 显示 project 工程视图列表 ![image.png](https://cos.easydoc.net/68658482/files/knwr7jie.png) 创建一个空的 Project 工程 ![image.png](https://cos.easydoc.net/68658482/files/knwr8zs9.png) ![image.png](https://cos.easydoc.net/68658482/files/knwr9br3.png) ![image.png](https://cos.easydoc.net/68658482/files/knwr9lb0.png) 选择 gcc 编译工具,工具路径就是前面 gcc-arm-none-eabi-8-2019-q3-update-win32-sha2 安装目录 下 bin 文件夹路径。 ![image.png](https://cos.easydoc.net/68658482/files/knwr9shs.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrahgu.png) 空 Project 工程创建完成后,将源码拷贝到空 project 工程目录后,refresh 更新即可生成完整的 Project 工程。 ![image.png](https://cos.easydoc.net/68658482/files/knwratjc.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrb3m9.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrbdep.png) #### 3.2.2 编译环境配置 指定 Makefile 位置 ![image.png](https://cos.easydoc.net/68658482/files/knwrbtax.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrcj5x.png) ![image.png](https://cos.easydoc.net/68658482/files/knwrcpac.png) 上图蓝色部分目的是开启多个并行 jobs,以最大化电脑性能,提供编译速度。 检查系统环境变量 PATH 中是否存在 setup-x86.exe 安装 cygwin 目录下 bin 文件夹路径,如果不存 在,则添加: ![image.png](https://cos.easydoc.net/68658482/files/knwrr6vh.png) 否则在编译时,会出现如下错误: ![image.png](https://cos.easydoc.net/68658482/files/knwrrf43.png) 在首次编译之前,去除 project 中 Build Automatically 选项的勾选。 点击 clean 选项,清除 Project 中残留的目标文件 ![image.png](https://cos.easydoc.net/68658482/files/knwrrwaj.png) 点击小锤头按钮,执行 GCC 编译。 ![image.png](https://cos.easydoc.net/68658482/files/knwrshon.png) #### 3.2.3 BIN 文件搬移 完成后,将 NBIoT_AP\xinyiNBIot_M3_v2\targets\xinyiNBSoc_M3\Makefile\xinyiNBSoc_M3 目录下 生成的 ram.bin/flash.bin,拷贝到烧录工具相关的多 bin 合一路径下即可,按照烧录工具指导进行烧录即 可