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

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

MW32x Amazon IoT 初学者工具包入门

重要

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

Amazon IoT 初学者工具包是一款基于 88MW320/88MW322 的开发工具包。88MW320/88MW322 是 NXP 最新的集成式 Cortex M4 微控制器,在单个微控制器芯片上集成了 802.11b/g/n Wi-Fi。此开发工具包已通过 FCC 认证。如需更多信息,请参阅Amazon合作伙伴设备目录来从我们的合作伙伴购买一个。88MW320/88MW322 模块也通过了 FCC 认证,可用于自定义和批量销售。

本入门指南介绍如何在主机上交叉编译应用程序和开发工具包,然后使用开发工具包提供的工具将生成的二进制文件加载到主板上。当应用程序开始在主板上运行时,您可以从主机的串行控制台对其进行调试或与其交互。

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 接口的软件。

我们推荐使用 gcc-arm-embedded 工具链的 4_9_2015q3 版本。

Linux 工具链设置过程

按照以下步骤操作,以便在 Linux 中设置 GCC 工具链。

  1. GNU Arm 嵌入式工具链 4.9-2015-q3-update 中下载工具链 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 上运行,并假设您使用的是该版本。

安装程序包

开发工具包有一个脚本,用于在新设置的 Linux 计算机上快速设置开发环境。该脚本会尝试自动检测计算机类型并安装相应的软件,包括 C 库、USB 库、FTDI 库、ncurses、python 和 latex。在本节中,通用目录名称 amzsdk_bundle-x.y.z 表示 Amazon 开发工具包的根目录。实际目录名称可能会有所不同。您必须拥有根权限。

  • 导航到 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。运行以下命令以在设置模式下执行 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
  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

设置 Eclipse

注意

本节假设您已完成避免使用 sudo中的步骤。

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

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

    Eclipse 要求安装 JRE。尽管可以在安装 Eclipse 之后进行安装,但我们建议您先安装 JRE。JRE 版本(32/64 位)必须与 Eclipse 版本(32/64 位)匹配。您可以从 Oracle 网站上的 Java SE 运行时环境 8 下载中下载 JRE。

  2. 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 演示
  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 projectaws_tests project 之间切换时都运行 cmake 命令。

  5. 将固件映像写入开发主板的闪存。固件将在开发主板重置后执行。将映像刷写到微控制器之前,必须构建开发工具包。

    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 项目和 aws_tests 项目之间切换时都运行 cmake 命令。

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

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

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

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

    如果构建成功,则会生成 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 文件的函数 prvMiscInitialization 中启用对 wmstdio_init(UART0_ID, 0) 的调用。

  • 启用 Wi-Fi 日志

    启用 freertos/vendors/marvell/WMSDK/mw320/sdk/src/incl/autoconf.h 文件中的宏 CONFIG_WLCMGR_DEBUG

使用 GDB

我们建议您使用与开发工具包打包在一起的 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