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

Marvell MW320 AWS IoT 初学者工具包入门

该教程提供有关 Marvell MW320 AWS IoT 初学者工具包入门的说明。

Marvell MW320 AWS IoT 初学者工具包中包含 Marvell MW320 和 Cortex M4 微控制器开发主板,后者在单个微处理器芯片上集成了 802.11b/g/n Wi-Fi。该工具包经 FCC 认证,可供销售。MW320 模块也通过了 FCC 认证,可用于自定义和批量销售。

如果您没有 Marvell MW320 AWS IoT 初学者工具包,请访问 AWS 合作伙伴设备目录,从我们的合作伙伴处进行购买。

注意

在该教程中,我们使用 Ubuntu 16.04 来开发和调试 Marvell MW320 应用程序。其他操作系统可能有效,但不受正式支持。

在开始之前,您必须配置 AWS IoT 和 FreeRTOS 下载以将您的设备连接到 AWS 云。有关说明,请参阅初始步骤。在本教程中,FreeRTOS 下载目录的路径称为 freertos

概览

本教程包含有关以下入门步骤的说明:

  1. 将主板连接到主机。

  2. 在主机上安装软件来开发和调试微控制器主板的嵌入式应用程序。

  3. 将 FreeRTOS 演示应用程序交叉编译为二进制映像。

  4. 将应用程序二进制映像加载到您的主板上,然后运行该应用程序。

  5. 跨串行连接与主板上运行的应用程序进行交互,以便进行监视和调试。

设置开发环境

FreeRTOS 包括一些用于安装所需的第三方库的脚本,以及用于生成应用程序并将其刻录到主板的脚本。这些脚本位于 vendors/marvell/WMSDK/mw320/sdk 目录中。

AWS IoT 初学者工具包还包含预刻录的无线微控制器演示项目固件。

除了与 M320 AWS IoT 初学者工具包及其 FreeRTOS 端口绑定的软件之外,您还必须在主机上安装以下软件组件:

  • GCC 工具链,用于交叉编译应用程序。支持版本 4_9_2015q3 及更高版本。

  • OpenOCD,用于访问各种 JTAG 功能,这些功能用于对主板的闪存进行编程,并用于在内存中下载和运行固件映像。

  • CMake 生成系统。支持版本 3.13 及更高版本。

  • (可选)支持的 IDE,用于应用程序开发和调试。

使用 installpkgs.sh 安装所需的第三方库

vendors/marvell/WMSDK/mw320/sdk/tools/bin/installpkgs.sh 脚本尝试自动检测计算机类型并安装一些必需的库,其中包括:

  • C 库

  • USB 库

  • FTDI 库

  • ncurses

  • Python

  • LaTeX

注意

installpkgs.sh 脚本包含有关使用 apt-get(针对 32 位和 64 位 Ubuntu 环境)和 yum(针对 32 位和 64 位 Fedora 环境)安装程序包的说明。如果在分发版本上运行脚本时遇到问题,请打开脚本文件,找到所需程序包的列表,然后手动安装这些程序包。

利用根用户权限,从 FreeRTOS 下载的根目录发出以下命令:

./vendors/marvell/WMSDK/mw320/sdk/tools/bin/installpkgs.sh

您可以在 Linux 主机上配置权限以允许 flashprogramload 操作,而不执行 sudo。要执行此操作,请发出以下命令:

./vendors/marvell/WMSDK/mw320/sdk/tools/bin/perm_fix.sh
注意

如果您使用的是 Eclipse IDE,则必须配置这些权限。

设置工具链

默认情况下,此主板的 FreeRTOS 端口将配置为使用 GNU 工具链。要使 Makefile 调用正确的编译器工具链,必须将 GNU 编译器工具链二进制文件包含在用户的 PATH 变量中。此外,GNU 工具链二进制文件必须将 arm-none-eabi- 作为前缀。

可将 GCC 工具链与 GNU Debugger (GDB) 结合使用,以利用与 JTAG 交互的 OpenOCD 软件进行调试。

在 Linux 计算机上设置 GCC 工具链

  1. Launchpad 下载工具链 tarball。文件名为 gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2

  2. 将文件复制到所选目录。确保目录路径不包含空格。

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

    tar –vxf file-name
  4. 将工具链二进制文件添加到系统 PATH。

    例如,打开 $HOME 目录中的 .profile 文件,然后将以下行追加到该文件的结尾:

    PATH="$PATH:path/gcc-arm-none-eabit-4_9_2015_q3/bin"

    其中,pathgcc-arm-none-eabit-4_9_2015_q3 文件夹的完整目录路径。

注意

Ubuntu 的一些分发版本包含 Debian 版本的 GCC 交叉编译器。如果您的分发版本包含本机交叉编译器,请将其删除,然后按照步骤操作以设置 GCC 编译器工具链。

设置 OpenOCD

需要 OpenOCD 版本 0.9。如果主机上安装了早期版本,请使用分发版本的卸载过程将其删除。

您可以使用标准 Linux 程序包管理器安装 OpenOCD。例如:

apt-get install openocd

您的计算机上安装的 OpenOCD 的默认版本取决于 Linux 内核的版本。

如果您无法使用程序包管理器安装 OpenOCD 版本 0.9,请按照下列步骤操作:

  1. OpenOCD.org 下载 OpenOCD 版本 0.9 源代码。

  2. 提取 openocd 下载,然后将目录更改为提取的文件夹。

  3. 启用 FTDI 和 JLink:

    ./configure --enable-ftdi --enable-jlink
  4. 创建 openocd:

    make install

安装 CMake

需要 CMake 生成系统来为此设备生成 FreeRTOS 演示和测试应用程序。FreeRTOS 支持版本 3.13 及更高版本。

您可以从 CMake.org 下载最新版本的 CMake。同时提供源代码和二进制分发。

有关将 CMake 与 FreeRTOS 结合使用的详细信息,请参阅将 CMake 与 FreeRTOS 结合使用

建立串行连接

在主机和主板之间建立串行连接

  1. 将 USB 电缆的一端连接到主机,并将其另一端连接到主板。

    您的主机将检测到主板。您可以从命令行发出 dmesg 命令,也可以打开 /var/log/messages 文件以验证是否已检测到主板。一条类似于以下内容的消息指明连接成功:

    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
    注意

    Marvell 开发板有一个 FTDI 芯片,可以向主机公开两个 USB 接口。第一个接口 (ttyUSB0) 面向 MCU 的 JTAG 功能。第二个接口 (ttyUSB1) 面向 MCU 的物理 UARTx 端口。

  2. 使用以下设置打开与 ttyUSB1 接口的串行连接:

    终端设置

    波特率

    115200

    数据

    8 位

    奇偶校验

    停止

    1 位

    流控制

    例如,如果您使用的是 minicom,请执行以下操作:

    1. 在设置模型下启动 minicom:

      minicom -s
    2. 转至 Serial Port Setup (串行端口设置)

    3. 配置以下设置:

      | 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

      转到 Exit (退出) 以开始显示来自串行控制台的消息。

    有关安装终端仿真器以设置串行连接的更多信息,请参阅安装终端仿真器

构建、刷写和运行 FreeRTOS 演示项目

您可以使用 CMake 和 FreeRTOS 的 M320 端口附带的实用程序脚本从命令行生成、刻录和运行 FreeRTOS 演示项目。也可以使用 IDE 生成项目。

使用 CMake 生成演示构建文件

从 FreeRTOS 下载的根发出以下命令可使用 CMake 生成演示生成文件:

cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -B build-directory -DAFR_ENABLE_TESTS=0

或者

cmake -DVENDOR=marvell -DBOARD=mw322 -DCOMPILER=arm-gcc -S . -B build-directory -DAFR_ENABLE_TESTS=0

您应该可以看到类似于如下所示的输出内容:

使用 Make 构建演示

发出以下命令来生成演示:

cd build-directory
make all -j4

您应该可以看到类似于如下所示的输出内容:

您可以使用一组类似的命令来生成测试项目:

cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -B build-directory -DAFR_ENABLE_TESTS=1

或者

cmake -DVENDOR=marvell -DBOARD=mw322 -DCOMPILER=arm-gcc -S . -B build-directory -DAFR_ENABLE_TESTS=1
cd build-directory
make all -j4
注意

每当您在 aws_demos 项目和 aws_tests 项目之间切换时,都必须使用 cmake 命令构建生成文件。

刷写应用程序

flashprog.py 脚本用于对主板的闪存进行编程。脚本用 Python 2.7 进行编写。

在将演示应用程序映像刻录到主板之前,请使用布局文件和 Boot2 启动加载程序来准备主板的闪存。

加载布局文件和 Boot2 启动加载程序

  1. 将目录更改为 FreeRTOS 下载的根目录。

  2. 使用 -l--boot2 选项运行 flashprog.py Python 脚本:

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

    根据 vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/mw300/layout.txt 中定义的默认布局配置,flashprog 脚本将布局写入闪存。布局保存有关闪存的分区信息。

    脚本还将启动加载程序写入闪存。启动加载程序位于 vendors/marvell/WMSDK/mw320/sdk/boot2/bin/boot2.bin。在微控制器的固件映像刻录到主板后,启动加载程序会加载此映像。

    您应该可以看到类似于如下所示的输出内容:

在将布局文件和启动加载程序闪存到主板后,将某个固件刻录到主板。Wi-Fi 芯片组要求在闪存中有自己的固件。

刻录 Wi-Fi 固件

  1. 将目录更改为 FreeRTOS 下载的根目录。

  2. 使用 --wififw 选项运行 flashprog.py Python 脚本:

    ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --wififw ./vendors/marvell/WMSDK/mw320/wifi-firmware/mw30x/mw30x_uapsta_W14.88.36.p135.bin

    flashprog 脚本将固件刻录到主板。

    您应该可以看到类似于如下所示的输出内容:

通过将布局、启动加载程序和 Wi-Fi 固件刻录到主板,您可以将演示应用程序刻录到主板并运行它。

刻录和运行演示

  1. 将目录更改为 FreeRTOS 下载的根目录。

  2. 使用 --mcufw-r 选项运行 flashprog.py Python 脚本:

    ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/flashprog.py --mcufw ./build/marvell/mw320/aws_demos.bin -r

    flashprog 脚本将演示刻录到主板。使用 -r 选项运行脚本将重置主板。

    重置主板。

    您应看到演示应用程序的日志。该输出值应该类似于以下内容:

    注意

    要刻录 aws_tests 应用程序,请使用同一命令,但指定 aws_tests.bin 文件而非 aws_demos.bin

    如果仅更改应用程序,则无需重新加载布局、启动加载程序和 Wi-Fi 固件。如果更改布局,则可能需要重新加载所有组件。

在生成、刻录和运行演示时,您应看到与以下内容类似的输出:

在云上监控 MQTT 消息

您可以使用 AWS IoT 控制台中的 MQTT 客户端监控您的设备发送到 AWS 云的消息。

使用 AWS IoT MQTT 客户端订阅 MQTT 主题

  1. 登录 AWS IoT 控制台

  2. 在导航窗格中,选择测试以打开 MQTT 客户端。

  3. Subscription topic (订阅主题)中,输入 iotdemo/#,然后选择 Subscribe to topic (订阅主题)

故障排除

连接到 GNU Debugger

连接到 GNU Debugger (GDB)

  1. 更改目录:

    cd freertos/vendors/marvell/WMSDK/mw320
  2. 使用 arm-none-eabi-gdb 命令连接到 GDB:

    arm-none-eabi-gdb -x ./sdk/tools/OpenOCD/gdbinit ../../../../build/vendors/marvell/boards/mw300_rd/aws_demos.axf

    如果您调试 FreeRTOS 测试应用程序,则改为以 aws_tests.axf 为目标。

将应用程序加载到 SRAM

您可以将演示加载到设备的静态随机访问内存 (SRAM),然后使用 ramload.py 脚本在设备上执行应用程序。使用 ramload.py 加载和执行应用程序比使用 flashprog.py 脚本加载到闪存更快,这使它成为迭代开发的更有效方法。

注意

ramload.py 脚本使用 Python 2.7 进行编写。

加载到 SRAM

  1. 将目录更改为 FreeRTOS 下载的根目录。

  2. aws_demos.axf 文件上运行 ramload.py Python 脚本:

    ./vendors/marvell/WMSDK/mw320/sdk/tools/OpenOCD/ramload.py ./build/vendors/marvell/boards/mw300_rd/aws_demos.axf

    您应看到演示应用程序的日志。该输出值应该类似于以下内容:

注意

在重启时,将擦除加载到 SRAM 的映像。

启用其他日志

您可能需要启用其他日志记录消息来解决在开始使用此主板时遇到的问题。

启用主板特定的日志

  1. 打开正在处理的项目的 main.c 文件(例如 aws_testsaws_demos)。

  2. 允许在 prvMiscInitialization 函数中调用 wmstdio_init(UART0_ID, 0)

启用 Wi-Fi 日志

  1. 打开 vendors/marvell/WMSDK/mw320/sdk/src/incl/autoconf.h

  2. 启用宏 CONFIG_WLCMGR_DEBUG

使用 IDE 开发和调试

设置 IDE

您可以使用 IDE 来开发和调试应用程序,以及可视化项目。

举例来说,如果您使用的是 Eclipse IDE,则使用 perm_fix.sh 脚本配置一些权限:

./vendors/marvell/WMSDK/mw320/tools/bin/perm_fix.sh

设置 Eclipse

  1. Oracle 安装 Java 运行时环境 (JRE)。

    需要 JRE 才能运行 Eclipse。JRE 版本(32 位或 64 位)必须与安装的 Eclipse 版本(32 位或 64 位)匹配。

  2. Eclipse.org 下载适用于 C/C++ 开发人员的 Eclipse IDE。支持 Eclipse 版本 4.9.0 及更高版本。

  3. 提取下载的存档文件夹,然后运行特定于平台的 Eclipse 可执行文件以启动 IDE。

使用 IDE 构建演示

您可以在 IDE 中打开和生成演示项目的生成文件,而不是直接从命令行使用 make 生成演示。在 IDE 中打开文件可帮助您在生成项目之前可视化项目。

注意

每当您在 aws_demos 项目和 aws_tests 项目之间切换时,都必须使用 cmake 命令构建生成文件。

使用 Eclipse 生成项目

  1. 打开 Eclipse。

  2. 选择您的工作区来创建项目。

  3. Select a wizard (选择向导) 页面上,展开 C/C++,然后选择 Makefile Project with Existing Code (带现有代码的 Makefile 项目)

  4. Import existing code (导入现有代码) 页面上,浏览找到 aws_demos 源代码的位置,选择 aws_demos,然后选择 Finish (完成)

  5. Project Explorer (项目资源管理器) 中,右键单击 aws_demos,然后生成项目。

    成功的构建操作将生成 aws_demos.bin 可执行文件。

有关 FreeRTOS 入门的常规故障排除信息,请参阅 问题排查入门