本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MW32xAmazon IoT 入门套件入门
此参考集成托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您创建新项目时从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的现有 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南。
Amazon IoT入门套件是一款基于恩智浦最新集成Cortex M4微控制器88MW320/88MW322的开发套件,在单个微控制器芯片上集成了802.11b/g/n Wi-Fi。该开发套件已通过 FCC 认证。有关更多信息,请参阅Amazon合作伙伴设备目录
本入门指南向您展示了如何在主机上交叉编译应用程序和 SDK,然后使用 SDK 提供的工具将生成的二进制文件加载到主板上。当应用程序开始在主板上运行时,您可以从主机计算机上的串行控制台进行调试或与之交互。
Ubuntu 16.04 是支持开发和调试的主机平台。你也许可以使用其他平台,但官方不支持这些平台。您必须具有在主机平台上安装软件的权限。构建 SDK 所需的以下外部工具:
-
Ubuntu 16.04 主机平台
-
ARM 工具链版本 4_9_2015q3
-
Eclipe 4.9.0 IDE
需要使用 ARM 工具链来交叉编译您的应用程序和 SDK。SDK 利用最新版本的工具链来优化图像占用空间,并在更少的空间中容纳更多功能。本指南假设你使用的是工具链的 4_9_2015q3 版本。不建议使用旧版本的工具链。开发套件预先闪存了无线微控制器演示项目固件。
设置硬件
使用迷你 USB 转 USB 线将 mw32x 主板Connect 你的笔记本电脑。将迷你 USB 电缆连接到主板上唯一的迷你 USB Connect 器。您不需要更换套头衫。
如果主板连接到笔记本电脑或台式计算机,则不需要外部电源。
这种 USB 连接提供以下功能:
-
控制台访问主板。在开发主机上注册了一个虚拟 tty/com 端口,可用于访问控制台。
-
JTAG 访问主板。这可用于将固件映像加载或卸载到主板的 RAM 或闪存中,或用于调试目的。
设置开发环境
出于开发目的,最低要求是 ARM 工具链和与 SDK 捆绑的工具。以下各节提供了有关 ARM 工具链设置的详细信息。
GNU 工具链
SDK 正式支持 GCC 编译器工具链。GNU ARM 的交叉编译器工具链可在 GNU Arm 嵌入式工具链 4.9-2015-q3 更新
默认情况下,编译系统配置为使用 GNU 工具链。Makefiles 假设 GNU 编译器工具链二进制文件在用户的 PATH 上可用,可以从 Makefile 中调用。Makefiles 还假设 GNU 工具链二进制文件的文件名前缀为arm-none-eabi-
。
GCC 工具链可以与 GDB 一起使用,通过 OpenOCD(与 SDK 捆绑在一起)进行调试。这提供了与 JTAG 接口的软件。
我们推荐使用 gcc-arm-embedded 工具链的 4_9_2015q3 版本。
Linux 工具链设置程序
请按照以下步骤操作,以在 Linux 中设置 GCC 工具链。
-
下载 GNU Arm Embedded Toolchain 4.9-2015-q3 更新中提供的工具链
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 上运行,并假设您使用的是该版本。
安装软件包
SDK 包含一个脚本,用于在新设置的 Linux 计算机上快速设置开发环境。该脚本尝试auto 检测机器类型并安装相应的软件,包括 C 库、USB 库、FTDI 库、ncurses、python 和 latex。在本节中,通用目录名称
表示 SAmazon DK 根目录。实际的目录名称可能有所不同。您必须具有根权限。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
. 运行以下命令以在设置模式下执行 minicon。
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 窗口现在显示来自串行控制台的消息。
选择串行控制台窗口,然后按 E nter 键。这将在屏幕上显示一个哈希 (#)。
开发板包括一个 FTDI 硅器件。FTDI 设备为主机提供两个 USB 接口。第一个接口与 MCU 的 JTAG 功能相关联,第二个接口与 MCU 的物理 UartX 端口相关联。
安装 OpenOCD
OpenOCD 是一款为嵌入式目标设备提供调试、系统内编程和边界扫描测试的软件。
需要 OpenOCD 版本 0.9。Eclipe 功能也需要它。如果您的 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
设置 Eclipe
这部分假定您已完成中的步骤避开 sudo
Eclipse 是应用程序开发和调试的首选 IDE。它提供了丰富、用户友好的 IDE,具有集成的调试支持,包括线程感知调试。本节介绍所有支持的开发主机的常用 Eclipse 设置。
设置 Eclipse
-
下载并安装 Java 运行时环境 (JRE)。
Eclipse 要求你安装 JRE。尽管可以在安装 Eclipse 之后安装,但我们建议您先安装它。JRE 版本(32/64 位)必须与 Eclipse 的版本(32/64 位)相匹配。你可以从 Oracle 网站上的 J ava SE Runtime Environment 8 下载
中下载 JRE。 -
从 http://www.eclipse.org
下载并安装 “面向 C/C++ 开发人员的 Eclipse IDE”。支持 Eclipe 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
和之间切换时都运行该cmake
命令aws_tests project
。 -
将固件镜像写入开发板的闪存中。固件将在开发板重置后执行。在将映像闪存到微控制器之前,必须先构建 SDK。
-
在刷新固件映像之前,请使用常用组件 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
项目和项目之间切换时都运行该cmake
aws_tests
命令。 -
打开 Eclipse,并在出现提示时选择您的 Eclipse 工作区,如下图所示。
-
选择创建 Makefile 项目:使用现有代码的选项,如下图所示。
-
选择 “浏览”,指定现有代码的目录,然后选择 “完成”。
-
在导航窗格中,在项目资源管理器中选择 aws。右键单击 aws_demos 打开菜单,然后选择 B uild。
如果构建成功,它将生成
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
文件wmstdio_init(UART0_ID, 0)
中的函数prvMiscInitialization
中启用对测试或演示的调用。 -
启用 Wi-Fi 日志
在
文件freertos
/vendors/marvell/WMSDK/mw320/sdk/src/incl/autoconf.hCONFIG_WLCMGR_DEBUG
中启用宏。
-
- 使用 GDB
-
我们建议您使用与 SDK 一起打包的
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