设备说明:
- 设备的硬件由一个MCU加上一个通信模组构成, 设备的产品逻辑运行在MCU上
- 模组上支持了TCP但是并不支持MQTT, MCU通过模组提供的AT指令来控制模组何时连接云端服务以及收发数据

对于这样的场景, 设备厂商需要将SDK集成并运行在MCU上, 让SDK通过通信模组连接到阿里云物联网平台
- MCU:
NXP MKL26Z
(运行FreeRTOS
操作系统) - TCP模组:
SIM800C
(提供TCP层面的AT指令)
准备工作
本移植实践中使用了以下工具和材料
- 硬件:
NXP MKL26Z 开发板
,SIM800C TCP模组
- 宿主机OS: macOS
- NXP MKL26Z SDK
- ARM GCC 交叉编译工具链
- SEGGER J-Link 烧写器
- minicom 串口工具
搭建开发环境
在搭建开发环境前, 需要准备好硬件, 即NXP MKL26Z 开发板
以及SIM800C TCP 模组
.
由于演示中用J-Link进行MCU固件的烧写, 需按照NXP MKL26Z的官方文档升级开发板上的OpenSDA固件以支持J-Link, 该文档位于下载的NXP MKL26Z SDK中
安装必要的软件
- 前往MCUXpresso SDK Builder, 选择对应
NXP MKL26Z 开发板
, 点击右侧的Build MCUXpresso SDK, 即可进入SDK下载页面
- 由于演示的宿主机是macOS, 在SDK下载页面中, Toolchain/IDE选择GCC ARM Embedded, Host OS选择macOS
- 在下方的组件中, 选中FreeRTOS, 选择完成后, 点击Download SDK即可将此MCU的SDK下载至本地
- 按照NXP MKL26Z SDK中Release Note的说明, 前往armDeveloper下载GCC Arm Embedded Toolchain: 5-2016-q3-update至本地. 下载完成后, 解压至
/opt/
目录
- 安装SEGGER J-Link烧写工具, 前往SEGGER官网进行下载, 这里选择macOS版本
下载完成后安装即可
- 由于需要连接
NXP MKL26Z 开发板
查看运行日志, 安装minicom串口工具
$ brew install minicom
- 编译NXP MKL26Z SDK的固件.
- 进入之前下载完成的SDK, 切换到
SDK_2.2.0_FRDM-KL26Z/boards/frdmkl26z/rtos_examples/freertos_hello/armgcc
目录 - 打开
build_debug.sh
文件 - 添加交叉编译工具链路径以及hex文件生成脚本, 修改内容如下:
#!/bin/sh
export ARMGCC_DIR=/opt/gcc-arm-none-eabi-5_4-2016q3
cmake -DCMAKE_TOOLCHAIN_FILE="../../../../../tools/cmake_toolchain_files/armgcc.cmake" -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug .
make -j4
${ARMGCC_DIR}/bin/arm-none-eabi-objcopy -Oihex debug/freertos_hello.elf debug/freertos_hello.hex
修改完成后, 保存退出, 执行build_debug.sh
脚本, 开始编译代码
编译完成后, 在SDK_2.2.0_FRDM-KL26Z/boards/frdmkl26z/rtos_examples/freertos_hello/armgcc/debug
目录下会产生一个freertos_hello.hex
固件
这个固件可以通过SEGGER J-Link烧写到MCU中
- 烧写固件
将NXP MKL26Z 开发板
连接至mac, 打开安装好的J-FlashLite
, Device选择MKL26Z128XX4, 点击OK即可进入烧写界面
在烧写界面中Data File选择刚才编译出来的固件freertos_hello.hex
, 点击Program Device即可烧写固件至NXP MKL26Z 开发板
- 查看日志
查看/dev目录下的tty文件, 确认NXP MKL26Z 开发板
的串口设备文件, 使用minicom打开它
$ minicom -b 115200 -D /dev/tty.usbmodem0000001234561
此时按下NXP MKL26Z 开发板
上的复位键重跑固件, 即可看到日志
至此, 开发环境准备就绪, 编译烧写固件流程已调试完成, 接下来就可以移植SDK4.0了
移植SDK4.0
SDK4.0 在MCU+TCP模组的场景下提供基于FreeRTOS MCU的适配, 在MCU侧您需要自己实现AT模组相关AT指令的组装和解析
- 在SDK需要连接网络/发送数据/断开网络时, 会组装好相关数据, 由您将这些数据组装成模组的AT指令发出
- 在SDK需要从模组接收数据时, 由您对模组的AT指令进行解析, 将解析好的数据输入给SDK
在演示中, 我们已经针对SIM800C完成了上述工作, 如果您的模组不是SIM800C, 您可以参考我们针对SIM800C模组AT指令的对接代码完成上述工作
接下来, 将讲述整个对接流程, 对接流程完成后的源代码点此下载
- 在
SDK_2.2.0_FRDM-KL26Z/boards/frdmkl26z/rtos_examples
目录下新建一个freertos_linkkit
目录
- 可以将
freertos_hello
中的所有文件复制到freertos_linkkit
中作为一个修改基础
- 下载SDK4.0.0, 将SDK的文件夹拷贝至
freertos_linkkit
目录 - 修改
freertos_linkkit/armgcc/CMakeLists.txt
, 将SDK下需要的目录和源码加入编译
- 需要注意的是, 在SDK根目录的
Portfiles
文件夹中, 仅需要加入freertos_tcp_modem
目录中的下面3个文件即可
- 在
freertos_linkkit
目录中, 编写主程序代码, 包括对接SIM800C的AT指令, MCU的初始化, SDK的相关API调用等
完成上述对接工作后, 编译并烧写固件至MCU中, 日志如下
Welcome to minicom 2.7.1
OPTIONS:
Compiled on Aug 20 2018, 10:22:42.
Port /dev/tty.usbmodem0000001234561, 11:06:35
Press Meta-Z for help on special keys
main
sim800c send: AT
sim800c resp: OK
sim800c send: ATE0
sim800c resp: OK
sim800c send: AT+IPR=115200
sim800c resp: OK
sim800c send: AT+IFC=0,0
sim800c resp: OK
sim800c send: AT&W
sim800c resp: OK
sim800c send: AT+CPIN?
sim800c resp: +CPIN: READY
OK
sim800c send: AT+CSQ
sim800c resp: +CSQ: 27,0
OK
sim800c send: AT+CREG?
sim800c resp: +CREG: 0,1
OK
sim800c send: AT+CGATT?
sim800c resp: +CGATT: 1
OK
sim800c send: AT+CIPSHUT
sim800c resp: SHUT OK
sim800c send: AT+CIPMUX=1
sim800c resp: OK
sim800c send: AT+CIPSPRT=0
sim800c resp: OK
sim800c send: AT+CIPSRIP=1
sim800c resp: OK
sim800c send: AT+CSTT
sim800c resp: OK
sim800c send: AT+CIICR
sim800c resp: OK
sim800c send: AT+CIFSR
sim800c resp: 10.52.141.163
sim800c_network_ready: 0
[5.888][LK-0313] MQTT user calls aiot_mqtt_connect api, connect
[5.888][LK-0317] mqtt_basic_demo&a13FN5TplKq
[5.888][LK-0318] 4780A5F17990D8DC4CCAD392683ED80160C4C2A1FFA649425CD0E2666A8593EB
[5.888][LK-0319] a13FN5TplKq.mqtt_basic_demo|timestamp=2524608000000,_ss=1,_v=sdk-c-4.0.0,securemode=3,signmethod=hmacsha256,ext=1,|
[6.888][LK-0313] MQTT connect success in 983 ms
AIOT_MQTTEVT_CONNECT
aiot_mqtt_connect res: 0
heartbeat response
在文档使用中是否遇到以下问题
更多建议
匿名提交