本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MW32x Amazon IoT 入门套件入门指南
重要
该参考集成托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅 亚马逊免费版 RTOS Github 存储库迁移指南。
Amazon IoT 入门套件是一款基于88MW320/88MW322的开发套件,该微控制器是恩智浦最新的集成式Cortex M4微控制器,在单个微控制器芯片上集成了802.11b/g/n Wi-Fi。此开发工具包已通过 FCC 认证。如需更多信息,请参阅Amazon 合作伙伴设备目录
本入门指南介绍如何在主机上交叉编译应用程序和开发工具包,然后使用开发工具包提供的工具将生成的二进制文件加载到主板上。当应用程序开始在主板上运行时,您可以从主机的串行控制台对其进行调试或与其交互。
Ubuntu 16.04 是支持开发和调试的主机平台。您也可以使用其他平台,但这些平台不受官方支持。您必须具有在主机平台上安装软件的权限。构建开发工具包需要以下外部工具:
-
Ubuntu 16.04 主机平台
-
ARM 工具链版本 4_9_2015q3
-
Eclipse 4.9.0 IDE
交叉编译应用程序和开发工具包需要使用 ARM 工具链。SDK 利用最新版本的工具链来优化映像占用空间,在更小的空间中容纳更多功能。本指南假设您使用的是 4_9_2015q3 版本的工具链。建议不要使用旧版本工具链。开发工具包已预先刷写无线微控制器演示项目固件。
设置硬件
使用 mini-USB 转 USB 线缆,将 mw32x 主板连接到笔记本电脑。将 mini-USB 线缆连接到主板上唯一的 mini-USB 连接器。您不需要更改跳线。
如果将主板连接到笔记本电脑或台式计算机,则不需要外部电源。
该 USB 连接提供以下功能:
-
通过控制台访问主板。在开发主机上注册了一个虚拟 tty/com 端口,该端口可用于访问控制台。
-
通过 JTAG 访问开发主板。这可用于将固件映像加载或卸载到主板的 RAM 或闪存中,或者用于调试目的。
设置开发环境
出于开发目的,最低要求是 ARM 工具链和与开发工具包捆绑在一起的工具。以下各节提供了有关 ARM 工具链设置的详细信息。
GNU 工具链
开发工具包正式支持 GCC 编译器工具链。GNU ARM 的交叉编译器工具链已在 GNU Arm 嵌入式工具链 4.9-2015-q3-update
默认情况下,构建系统配置为使用 GNU 工具链。Makefile 假设 GNU 编译器工具链二进制文件在用户的 PATH 上可用,并且可以从 Makefile 中调用。Makefiles 还假设 GNU 工具链二进制文件的文件名带有 arm-none-eabi-
前缀。
GCC 工具链可以与 GDB 一起使用,通过 OpenOCD(与开发工具包捆绑在一起)进行调试。其中提供了与 JTAG 接口的软件。
我们推荐使用工具链的 4_9_2015q3 版本。 gcc-arm-embedded
Linux 工具链设置过程
按照以下步骤操作,以便在 Linux 中设置 GCC 工具链。
-
在 GNU Arm 嵌入式工具链 4.9-2015-q3-update
中下载工具链 tarball。文件是 gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
。 -
将文件复制到所选目录。确保目录名称不包含空格。
-
使用以下命令解压缩文件。
tar –vxf
filename
-
将安装的工具链的路径添加到系统 PATH 中。例如,在位于
/home/
目录中的user-name
.profile
文件末尾添加以下行。PATH=$PATH:
path to gcc-arm-none-eabit-4_9_2015_q3/bin
注意
Ubuntu 的一些新分发包含 Debian 版本的 GCC 交叉编译器。如果是这样,则必须移除本机交叉编译器,并按照上述设置过程进行操作。
使用 Linux 开发主机
您可以使用任何现代 Linux 桌面发行版,例如 Ubuntu 或 Fedora。但是,我们建议您升级到最新版本。以下步骤已经过验证,可以在Ubuntu 16.04 上运行,并假设您使用的是该版本。
安装程序包
开发工具包有一个脚本,用于在新设置的 Linux 计算机上快速设置开发环境。该脚本会尝试自动检测计算机类型并安装相应的软件,包括 C 库、USB 库、FTDI 库、ncurses、python 和 latex。在本节中,通用目录名称
表示 Amazon SDK 的根目录。实际目录名称可能会有所不同。您必须拥有根权限。amzsdk_bundle-x.y.z
-
导航到
目录并运行此命令。amzsdk_bundle-x.y.z/
./lib/third_party/mcu_vendor/marvell/WMSDK/mw320/sdk/tools/bin/installpkgs.sh
避免使用 sudo
在本指南中,flashprog
操作使用 flashprog.py
脚本刷写主板的 NAND,如下所述。同样,ramload
操作使用 ramload.py
脚本将固件映像从主机直接复制到微控制器的 RAM,无需刷写 NAND。
您可以将 Linux 开发主机配置为执行 flashprog
和 ramload
操作,而无需每次都使用 sudo
命令。为此,请运行以下命令。
./lib/third_party/mcu_vendor/marvell/WMSDK/mw320/sdk/tools/bin/perm_fix.sh
注意
您必须这样配置 Linux 开发主机权限才能确保流畅的 Eclipse IDE 体验。
设置串行控制台
将 USB 线缆插入 Linux 主机 USB 插槽中。这会触发对设备的检测。在 /var/log/messages
文件中,或执行 dmesg
命令后,您应该会看到类似以下的消息。
Jan 6 20:00:51 localhost kernel: usb 4-2: new full speed USB device using uhci_hcd and address 127 Jan 6 20:00:51 localhost kernel: usb 4-2: configuration #1 chosen from 1 choice Jan 6 20:00:51 localhost kernel: ftdi_sio 4-2:1.0: FTDI USB Serial Device converter detected Jan 6 20:00:51 localhost kernel: ftdi_sio: Detected FT2232C Jan 6 20:00:51 localhost kernel: usb 4-2: FTDI USB Serial Device converter now attached to ttyUSB0 Jan 6 20:00:51 localhost kernel: ftdi_sio 4-2:1.1: FTDI USB Serial Device converter detected Jan 6 20:00:51 localhost kernel: ftdi_sio: Detected FT2232C Jan 6 20:00:51 localhost kernel: usb 4-2: FTDI USB Serial Device converter now attached to ttyUSB1
确认已创建两个 ttyUSB 设备。第二个 ttyUSB 是串行控制台。在上述示例中,该设备名为“ttyusB1”。
在本指南中,我们使用 minicom 来查看串行控制台的输出。您也可以使用其他串行程序,例如 putty
。运行以下命令以在设置模式下执行 minicom。
minicom –s
在 minicom 中,转到串行端口设置并获取以下设置。
| A - Serial Device : /dev/ttyUSB1 | B – Lockfile Location : /var/lock | C - Callin Program : | D - Callout Program : | E - Bps/Par/Bits : 115200 8N1 | F – Hardware Flow Control : No | G – Software Flow Control : No
您可以将这些设置保存在 minicom 中以供将来使用。minicom 窗口现在显示来自串行控制台的消息。
选择串行控制台窗口,然后按 Enter 键。这会在屏幕上显示一个哈希值 (#)。
注意
开发主板包含一个 FTDI 硅芯片设备。FTDI 设备公开了主机的两个 USB 接口。第一个接口与 MCU 的 JTAG 功能相关联,第二个接口与 MCU 的物理 uartX 端口相关联。
安装 OpenOCD
OpenOCD 是一款为嵌入式目标设备提供调试、系统内编程和边界扫描测试的软件。
需要 OpenOCD 版本 0.9。Eclipse 功能也需要该软件。如果您的 Linux 主机上安装了早期版本(例如版本 0.7),请使用适用于当前用途的 Linux 发行版的相应命令删除该存储库。
运行标准 Linux 命令来安装 OpenOCD,
apt-get install openocd
如果上述命令未安装 0.9 或更高版本,请使用以下过程下载和编译 openocd 源代码。
安装 OpenOCD
-
运行以下命令以安装 libusb-1.0。
sudo apt-get install libusb-1.0
-
从 http://openocd.org/
下载 openocd 0.9.0 源代码。 -
提取 openocd 并导航到解压缩目录。
-
使用以下命令配置 openocd。
./configure --enable-ftdi --enable-jlink
-
运行 make 实用工具来编译 opencd。
make install
设置 Eclipse
注意
本节假设您已完成避免使用 sudo中的步骤。
Eclipse 是适用于应用程序开发和调试的首选 IDE。它提供了一个丰富且对用户友好的 IDE,具有集成的调试支持,还包括线程感知调试功能。本节介绍所有支持的开发主机的常见 Eclipse 设置。
设置 Eclipse
-
下载并安装 Java 运行时环境 (JRE)。
Eclipse 要求安装 JRE。尽管可以在安装 Eclipse 之后进行安装,但我们建议您先安装 JRE。JRE 版本(32/64 位)必须与 Eclipse 版本(32/64 位)匹配。您可以从 Oracle 网站上的 Java SE 运行时环境 8 下载
中下载 JRE。 -
从 http://www.eclipse.org
下载并安装“适用于 C/C++ 开发人员的 Eclipse IDE”。支持 Eclipse 版本 4.9.0 及更高版本。只需解压缩下载的存档即可安装。您可以运行特定于平台的 Eclipse 可执行文件来启动应用程序。
构建并运行 FreeRTOS 演示项目
运行 FreeRTOS 演示项目的方法有两种:
-
使用命令行。
-
使用 Eclipse IDE。
本主题涵盖了这两个选项。
预置
-
根据您使用的是测试应用程序还是演示应用程序,请在以下文件之一中设置预配数据:
-
./tests/common/include/aws_clientcredential.h
-
./demos/common/include/aws_clientcredential.h
例如:
#define clientcredentialWIFI_SSID "
Wi-Fi SSID
" #define clientcredentialWIFI_PASSWORD "Wi-Fi password
" #define clientcredentialWIFI_SECURITY "Wi-Fi security
"注意
您可以输入以下 Wi-Fi 安全值:
eWiFiSecurityOpen
eWiFiSecurityWEP
eWiFiSecurityWPA
eWiFiSecurityWPA2
SSID 和密码应包含在双引号内。
-
使用命令行构建并运行 FreeRTOS 演示
-
使用以下命令开始构建演示应用程序。
cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -Bbuild -DAFR_ENABLE_TESTS=0
确保您获得相同的输出,如以下示例所示。
-
导航到构建目录。
cd build
-
运行 make 实用工具来构建应用程序。
make all -j4
确保您获得相同的输出,如下图所示:
-
使用以下命令来构建测试应用程序。
cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -Bbuild -DAFR_ENABLE_TESTS=1 cd build make all -j4
每次在
aws_demos project
和aws_tests project
之间切换时都运行cmake
命令。 -
将固件映像写入开发主板的闪存。固件将在开发主板重置后执行。将映像刷写到微控制器之前,必须构建开发工具包。
-
在刷写固件映像之前,请使用常用组件 Layout 和 Boot2 来准备开发主板的闪存。使用以下命令。
cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py -l ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/mw300/layout.txt --boot2 ./vendors/marvell/WMSDK/mw320/boot2/bin/boot2.bin
flashprog
命令可启动以下功能:-
布局 – 首先指示 flashprog 实用工具将布局写入闪存。布局类似于闪存的分区信息。默认布局位于以下文件中:
/lib/third_party/mcu_vendor/marvell/WMSDK/mw320/sdk/tools/OpenOCD/mw300/layout.txt
。 -
Boot2 – 这是 WMSDK 使用的引导加载程序。
flashprog
命令还会将引导加载程序写入闪存。这是引导加载程序在完成刷写后加载微控制器固件映像的作业。确保您获得相同的输出,如下图所示。
-
-
该固件使用 Wi-Fi 芯片组来实现功能,Wi-Fi 芯片组有自己的固件,该固件也必须存在于闪存中。使用
flashprog.py
实用工具刷写 Wi-Fi 固件的方式与刷写 Boot2 引导加载程序和 MCU 固件的方式相同。使用以下命令刷写 Wi-Fi 固件。cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --wififw ./vendors/marvell/WMSDK/mw320/wifi-firmware/mw30x/mw30x_uapsta_W14.88.36.p135.bin
确保命令的输出与下图类似。
-
使用以下命令刷写 MCU 固件。
cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --mcufw build/cmake/vendors/marvell/mw300_rd/aws_demos.bin -r
-
重置主板。您应该会看到演示应用程序的日志。
-
要运行测试应用程序,请刷写位于同一目录下的
aws_tests.bin
二进制文件。cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --mcufw build/cmake/vendors/marvell/mw300_rd/aws_tests.bin -r
您的命令应类似于下图所示。
-
-
刷写固件并重置主板后,演示应用程序应按下图所示启动。
-
(可选)作为测试映像的替代方法,您可以使用 flashprog 实用工具将微控制器映像从主机直接复制到微控制器 RAM 中。该映像不会在闪存中复制,因此,在重新启动微控制器后,它就会丢失。
将固件映像加载到 SRAM 的操作速度更快,因为它会立即启动执行文件。此方法主要用于迭代开发。
使用以下命令将固件加载到 SRAM 中。
cd amzsdk_bundle-x.y.z ./lib/third_party/mcu_vendor/marvell/WMSDK/mw320/sdk/tools/OpenOCD/ramload.py build/cmake/vendors/marvell/mw300_rd/aws_demos.axf
命令输出如下图所示。
命令执行完成后,您应该会看到演示应用程序的日志。
使用 Eclipse IDE 构建并运行 FreeRTOS 演示
-
在设置 Eclipse 工作区之前,您必须运行
cmake
命令。运行以下命令以使用
aws_demos
Eclipse 项目。cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -Bbuild -DAFR_ENABLE_TESTS=0
运行以下命令以使用
aws_tests
Eclipse 项目。cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -Bbuild -DAFR_ENABLE_TESTS=1
提示
每次在
aws_demos
项目和aws_tests
项目之间切换时都运行cmake
命令。 -
打开 Eclipse,然后在出现提示时选择您的 Eclipse 工作区,如下图所示。
-
选择创建 Makefile 项目:使用现有代码的选项,如下图所示。
-
选择浏览,指定现有代码的目录,然后选择完成。
-
在导航窗格中,在项目资源管理器中选择 aws_demos。右键单击 aws_demos 以打开菜单,然后选择构建。
如果构建成功,则会生成
build/cmake/vendors/marvell/mw300_rd/aws_demos.bin
文件。 -
使用命令行工具刷写布局文件 (
layout.txt
)、Boot2 二进制文件 (boot2.bin
)、MCU 固件二进制文件 (aws_demos.bin
) 和 Wi-Fi 固件。-
在刷写固件映像之前,请使用常用组件 Layout 和 Boot2 来准备开发主板的闪存。使用以下命令。
cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py -l ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/mw300/layout.txt --boot2 ./vendors/marvell/WMSDK/mw320/boot2/bin/boot2.bin
flashprog
命令可启动以下功能:-
布局 – 首先指示 flashprog 实用工具将布局写入闪存。布局类似于闪存的分区信息。默认布局位于以下文件中:
/lib/third_party/mcu_vendor/marvell/WMSDK/mw320/sdk/tools/OpenOCD/mw300/layout.txt
。 -
Boot2 – 这是 WMSDK 使用的引导加载程序。flashprog 命令还会将引导加载程序写入闪存。这是引导加载程序在完成刷写后加载微控制器固件映像的作业。确保您获得相同的输出,如下图所示。
-
-
该固件使用 Wi-Fi 芯片组来实现功能,Wi-Fi 芯片组有自己的固件,该固件也必须存在于闪存中。使用
flashprog.py
实用工具刷写 Wi-Fi 固件的方式与刷写 boot2 引导加载程序和 MCU 固件的方式相同。使用以下命令刷写 Wi-Fi 固件。cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --wififw ./vendors/marvell/WMSDK/mw320/wifi-firmware/mw30x/mw30x_uapsta_W14.88.36.p135.bin
确保命令的输出与下图类似。
-
使用以下命令刷写 MCU 固件。
cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --mcufw build/cmake/vendors/marvell/mw300_rd/aws_demos.bin -r
-
重置主板。您应该会看到演示应用程序的日志。
-
要运行测试应用程序,请刷写位于同一目录下的
aws_tests.bin
二进制文件。cd amzsdk_bundle-x.y.z ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --mcufw build/cmake/vendors/marvell/mw300_rd/aws_tests.bin -r
您的命令应类似于下图所示。
-
调试
-
启动 Eclipse 并选择帮助,然后选择安装新软件。在使用菜单中,选择所有可用站点。输入筛选文本
GDB Hardware
。选择 C/C++ GDB 硬件调试选项并安装插件。
故障排除
- 网络问题
-
检查您的网络凭证。请参阅构建并运行 FreeRTOS 演示项目中的“配置”。
- 启用其他日志
-
-
启用特定于主板的日志。
在
main.c
文件的函数prvMiscInitialization
中启用对wmstdio_init(UART0_ID, 0)
的调用。 -
启用 Wi-Fi 日志
启用
文件中的宏freertos
/vendors/marvell/WMSDK/mw320/sdk/src/incl/autoconf.hCONFIG_WLCMGR_DEBUG
。
-
- 使用 GDB
-
我们建议您使用与开发工具包打包在一起的
arm-none-eabi-gdb
和gdb
命令文件。导航到 目录。cd
freertos
/lib/third_party/mcu_vendor/marvell/WMSDK/mw320运行以下命令(只有一行)以连接到 GDB。
arm-none-eabi-gdb -x ./sdk/tools/OpenOCD/gdbinit ../../../../../../build/cmake/vendors/marvell/mw300 _rd/aws_demos.axf