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

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

MW32x AWS IoT 初学者工具包入门

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

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

Ubuntu 16.04 是用于开发和调试的主机平台。您可能能够使用其他平台,但这些不受官方支持。您必须有权在主机平台上安装软件。构建开发工具包所需的以下外部工具:

  • Ubuntu 16.04 主机平台

  • ARM 工具链版本 4_9_2015q3

  • Eclipse 4.9.0 IDE

需要 ARM 工具链才能交叉编译应用程序和开发工具包。该开发工具包利用最新版本的工具链来优化图像占用空间,并将更多的功能应用于较少的空间。本指南假定您使用工具链的版本 4_9_2015q3。建议不要使用旧版本的工具链。此开发工具包预刻录有无线微控制器演示项目固件。

设置硬件

使用迷你 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。例如,将以下行附加到位于 .profile 目录中的 /home/user-name 文件的末尾。

    PATH=$PATH:path to gcc-arm-none-eabit-4_9_2015_q3/bin
注意

Ubuntu 的较新版本发布可能附带了 Debian 版本的 GCC Cross Compiler。如果是这样的话,您必须删除本机 Cross Compiler,并按照上述设置过程操作。

使用 Linux 开发主机

可以使用任何现代 Linux 桌面发行版,如 Ubuntu 或 Fedora。但是,我们建议您升级到最新版本。以下步骤已经过验证,可在 Ubuntu 16.04 上工作,并假定您使用的是该版本。

安装程序包

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

  • 导航到 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 中,导航到 Serial Port Setup (串行端口设置) 并捕获以下设置。

| 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

  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 版本(32/64 位)必须与 Eclipse 版本(32/64 位)匹配。您可以从 Oracle 网站上的 Java SE 运行时环境 8 下载下载 JRE。

  2. http://www.eclipse.org 下载并安装“Eclipse IDE for C/C++ Developers”。支持 Eclipse 版本 4.9.0 或更高版本。安装仅需要您提取下载的档案。您运行特定于平台的 Eclipse 可执行文件以启动应用程序。

构建并运行 FreeRTOS 演示项目

可通过两种方式运行 FreeRTOS 演示项目:

  • 使用命令行。

  • 使用 Eclipse IDE。

本主题介绍这两个选项。

Provisioning

  • 根据您是使用测试应用程序还是演示应用程序,在以下文件之一中设置预置数据:

    • ./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

    每次在 cmakeaws_demos project之间切换时,运行 aws_tests project 命令。

  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

      • Layout (布局) – 首先指示 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 实用程序以与刷写 Boot2 启动加载程序和 MCU 固件相同的方式刷写 Wi-Fi 固件。使用以下命令刷写 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
    提示

    每当您在 cmake 项目和 aws_demos 项目之间切换时,运行 aws_tests 命令。

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

  3. 选择该选项以创建 Makefile Project: with Existing Code,如下图所示。

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

  5. 在导航窗格中,选择项目资源管理器中的 aws_demos。右键单击 aws_demos 以打开菜单,然后选择 Build (生成)

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

  6. 使用命令行工具刷写 Layout 文件 (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

      • Layout (布局) – 首先指示 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 实用程序以与刷写 boot2 启动加载程序和 MCU 固件相同的方式刷写 Wi-Fi 固件。使用以下命令刷写 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

      您的命令输出应类似于下图中所示的内容。

Debugging

  • 启动 Eclipse 并选择 Help,然后选择 Install new software。在 Work with 菜单中,选择 All Available Sites。输入筛选文本 GDB Hardware。 选择 C/C++ GDB Hardware Debugging (C/C++ GDB 硬件调试) 选项并安装插件。

Troubleshooting

网络问题

检查您的网络凭证。请参阅 构建并运行 FreeRTOS 演示项目 中的“预置”。

启用其他日志
  • 启用主板特定的日志。

    wmstdio_init(UART0_ID, 0) 文件的 prvMiscInitialization 函数中启用对 main.c 的调用,以便进行测试或演示。

  • 启用 Wi-Fi 日志

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

使用 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