MW32xAmazon IoT 入门套件入门 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

MW32xAmazon IoT 入门套件入门

重要

此参考集成托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您创建新项目时从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的现有 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南

Amazon IoT入门套件是一款基于恩智浦最新集成Cortex M4微控制器88MW320/88MW322的开发套件,在单个微控制器芯片上集成了802.11b/g/n Wi-Fi。该开发套件已通过 FCC 认证。有关更多信息,请参阅Amazon合作伙伴设备目录,从我们的合作伙伴处购买一台。88MW320/88MW322 模块也获得了 FCC 认证,可供定制和批量销售。

本入门指南向您展示了如何在主机上交叉编译应用程序和 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 工具链。

  1. 下载 GNU Arm Embedded Toolchain 4.9-2015-q3 更新中提供的工具链 tarball。文件是gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2

  2. 将文件复制到所选目录。确保目录名中没有空格。

  3. 使用以下命令解压缩文件。

    tar –vxf filename
  4. 将已安装工具链的路径添加到系统 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。在本节中,通用目录名称amzsdk_bundle-x.y.z表示 SAmazon DK 根目录。实际的目录名称可能有所不同。您必须具有根权限。

  • 导航到该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 开发主机配置为执行flashprogramload操作,而无需每次都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
  1. 运行以下命令安装 libusb 1.0。

    sudo apt-get install libusb-1.0
  2. http://openocd.org/ 下载 openocd 0.9.0 源代码。

  3. 提取 openocd 并导航到解压它的目录。

  4. 使用以下命令配置 openocd。

    ./configure --enable-ftdi --enable-jlink
  5. 运行 make 实用程序来编译 opencd。

    make install

设置 Eclipe

注意

这部分假定您已完成中的步骤避开 sudo

Eclipse 是应用程序开发和调试的首选 IDE。它提供了丰富、用户友好的 IDE,具有集成的调试支持,包括线程感知调试。本节介绍所有支持的开发主机的常用 Eclipse 设置。

设置 Eclipse
  1. 下载并安装 Java 运行时环境 (JRE)。

    Eclipse 要求你安装 JRE。尽管可以在安装 Eclipse 之后安装,但我们建议您先安装它。JRE 版本(32/64 位)必须与 Eclipse 的版本(32/64 位)相匹配。你可以从 Oracle 网站上的 J ava SE Runtime Environment 8 下载中下载 JRE。

  2. 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 演示
  1. 使用以下命令开始构建演示应用程序。

    cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -Bbuild -DAFR_ENABLE_TESTS=0

    确保您获得类似于以下示例所示的输出。

  2. 导航到构建目录。

    cd build
  3. 运行 make 实用程序来生成应用程序。

    make all -j4

    确保您获得类似于下图所示的输出:

  4. 使用以下命令构建测试应用程序。

    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

  5. 将固件镜像写入开发板的闪存中。固件将在开发板重置后执行。在将映像闪存到微控制器之前,必须先构建 SDK。

    1. 在刷新固件映像之前,请使用常用组件 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命令还将引导加载程序写入闪存。引导加载程序的任务是在微控制器的固件映像刷新后加载它。确保获得与下图所示相同的输出。

    2. 固件使用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

      确保命令的输出与下图类似。

    3. 使用以下命令刷新 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
    4. 重置主板。您应该会看到演示应用程序的日志。

    5. 要运行测试应用程序,请刷新位于同一目录的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

      您的命令输出应类似于下图所示值。

  6. 刷新固件并重置主板后,演示应用程序应如下图所示启动。

  7. (可选)作为测试映像的另一种方法,使用 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 演示
  1. 在设置 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项目和项目之间切换时都运行该cmakeaws_tests命令。

  2. 打开 Eclipse,并在出现提示时选择您的 Eclipse 工作区,如下图所示。

  3. 选择创建 Makefile 项目:使用现有代码的选项,如下图所示。

  4. 选择 “浏览”,指定现有代码的目录,然后选择 “完成”。

  5. 在导航窗格中,在项目资源管理器中选择 aws。右键单击 aws_demos 打开菜单,然后选择 B uild

    如果构建成功,它将生成build/cmake/vendors/marvell/mw300_rd/aws_demos.bin文件。

  6. 使用命令行工具刷新布局文件 (layout.txt)、Boot2 二进制文件 (boot2.bin)、MCU 固件二进制文件 (aws_demos.bin) 和 Wi-Fi 固件。

    1. 在刷新固件映像之前,请使用常用组件 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 命令还会将引导加载程序写入闪存。引导加载程序的任务是在刷新微控制器的固件映像后加载该映像。确保获得与下图所示相同的输出。

    2. 固件使用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

      确保命令的输出与下图类似。

    3. 使用以下命令刷新 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
    4. 重置主板。您应该会看到演示应用程序的日志。

    5. 要运行测试应用程序,请刷新位于同一目录的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.h文件CONFIG_WLCMGR_DEBUG中启用宏。

使用 GDB

我们建议您使用与 SDK 一起打包的arm-none-eabi-gdbgdb命令文件。导航到 目录。

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