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

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

入门 m32xAmazon IoT入门套件

这些区域有:Amazon IoT初学者工具包是基于 88MW320/88MW322 的开发工具包,后者是恩智浦的最新集成 Cortex M4 微控制器,后者在单个微处理器芯片上集成了 802.11b/g/g/g/n Wi-Fi。开发套件通过 FCC 认证。有关更多信息,请参阅 。Amazon伙伴设备目录从我们的合作伙伴处购买一个。88MW320/88MW322 模块也通过了 FCC 认证,可用于定制和批量销售。

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

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

  • Ubuntu 16.04 主机平台

  • ARM 工具链版本 4_9_2015q3

  • Eclipse 4.9.0 IDE

交叉编译应用程序和开发工具包需要 ARM 工具链。SDK 利用工具链的最新版本来优化图像占用空间并将更多功能集成到更少的空间中。本指南假设您使用的是工具链的版本 4_9_2015q3。建议不要使用旧版本的工具链。开发套件已预先刷新了无线微控制器 Demo 项目固件。

设置硬件

使用迷你 USB 转 USB 电缆将 MW32x 板 Connect 到笔记本电脑。将迷你 USB 电缆 Connect 到主板上唯一存在的迷你 USB 连接器。您不需要更换跳线。

如果主板连接到笔记本电脑或台式计算机,则不需要外部电源。

此 USB 连接提供以下内容:

  • 控制台访问主板。在可用于访问控制台的开发主机上注册了虚拟 tty/com 端口。

  • JTAG 访问主板。这可用于将固件映像加载或卸载到主板的 RAM 或闪存中,或者用于调试目的。

设置开发环境

出于开发目的,最低要求是 ARM 工具链和 SDK 捆绑的工具。以下各节提供了有关 ARM 工具链设置的详细信息。

GNU 工具链

SDK 正式支持 GCC 编译器工具链。GNU ARM 的交叉编译器工具链可在GNU Arm 嵌入式工具链 4.9-2015-q3 更新.

默认情况下,构建系统配置为使用 GNU 工具链。Makefiles 假设 GNU 编译器工具链二进制文件在用户的 PATH 上可用,可以从 Makefiles 中调用。Makefiles 还假设 GNU 工具链二进制文件的文件名前缀为arm-none-eabi-.

海湾合作委员会工具链可以与 GDB 一起使用 OpenOCD 进行调试(与 SDK 捆绑在一起)。这提供了与 JTAG 接口的软件。

我们建议使用 gcc-arm 嵌入式工具链的 4_9_2015q3 版本。

Linux 工具链设置程序

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

  1. 下载可在以下位置提供的工具链 tarballGNU Arm 嵌入式工具链 4.9-2015-q3 更新. 该文件是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 并按照上述设置过程进行操作。

使用 Linux 开发主机

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

安装软件包

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

  • 导航到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”。

在本指南中,我们使用 mini 来查看串行控制台输出。你也可以使用其他串行程序,例如putty. 运行以下命令以在安装模式下执行 MINICOM。

minicom –s

在 mincom 中,导航到串行端口设置然后捕获以下设置。

| 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. 从以下位置下载 openocd 0.9.0 源代码http://openocd.org/.

  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 位)匹配。您可以从下载 JREJava SE 运行时环境 8 下载在甲骨文网站上。

  2. 从下载并安装 “适用于 C/C++ 开发人员的 Eclipse IDE”http://www.eclipse.org. 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

    运行cmake每次在aws_demos projectaws_tests project.

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

    1. 在刷新固件映像之前,请使用普通组件布局和 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实用程序,用与闪存 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_demosEclipse 项目。

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

    运行以下命令以处理aws_testsEclipse 项目。

    cmake -DVENDOR=marvell -DBOARD=mw320 -DCOMPILER=arm-gcc -S . -Bbuild -DAFR_ENABLE_TESTS=1
    提示

    运行cmake每次在aws_demos项目和aws_tests项目。

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

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

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

  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. 在刷新固件映像之前,请使用普通组件布局和 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实用程序,用与闪存 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

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

调试

  • 启动 Eclipse 并选择帮助然后选择安装新软件. 在使用菜单,选择所有可用的网站. 输入过滤器文本GDB Hardware. 选择C/C++ GDB 硬件调试选项并安装该插件。

故障排除

网络问题

请检查网络凭证。请参阅中的 “资源调配”构建并运行 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与 SDK 一起打包的命令文件。导航到 目录。

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