特点
MAX78000FTHR是基于MAX78000的小型板微控制器单元(MCU)。
该 MCU 面向在边缘运行的人工智能 (AI) 应用程序。在这种情况下,“边缘”并不意味着技术的前沿(尽管这就是芯片);这意味着靠近需要它的地方,甚至靠近传感器,而不是在数据中心附近的某个地方。例如,边缘是在您的家中或汽车中,甚至是您穿的东西。在边缘运行的 AI 应用程序完全可以自行完成工作,而无需将复杂的计算分包给云服务。为此,它需要大量的处理能力,这就是为什么 MAX78000 将 ARM Cortex-M4 处理器与浮点单元 (FPU)、卷积神经网络 (CNN) 加速器和 RISC-V 内核组合成一个单个设备。
此外,生活在边缘的设备不应该消耗大量能量,因此 MAX78000 还专为超低功耗运行而设计。MAX78000节能且功能强大,据其制造商称,它可以在不到 1/100的时间内进行 AI 推理(即回答“这张照片中是谁?”或“那是什么声音?”等问题)其他嵌入式解决方案的能量。
卷积神经网络
CNN 是一种特殊的神经网络,其核心使用卷积。卷积是图像和信号处理中经常遇到的数学运算,您可以将其视为一种(匹配)滤波。CNN 是一组过滤器,用于检查输入信号的某些特征。CNN 在声音和图像处理应用中特别有用,因此 MAX78000 还集成了相机接口和用于流式音频的I2S也就不足为奇了。它的 CNN 针对 1D(声音)和 2D(图像和视频)处理进行了优化。
除了已经提到的模块和外设之外,MAX78000 还包括微控制器中常见的最常见外设以及一些与物联网安全相关的特殊功能,例如随机数发生器 (RNG) 和 AES 加密引擎。
MAX78000FTHR
是一个小型模块 — 66 × 23 mm — 具有 MAX78000、微型 VGA 摄像头、数字麦克风、立体声音频 I/O、microSD 卡插槽、1 MB QSPI RAM、SWD 调试器/编程器USB 端口和锂聚合物电池充电器。还有两个用户 RGB LED 和两个用户按钮以及与 Adafruit Feather 外形兼容的扩展连接器。一个单独的 JTAG 连接器可用于对 RISC-V 内核进行编程和调试。
MAX78000FTHR 板具有两个扩展连接器。微型摄像头位于 GPIO 引脚 P0_5 和 P0_6 的右侧;microSD 卡连接器位于电路板的背面。
当连接到计算机时,该板被识别为一个复合 USB 设备,包括一个 DAP 链接加上 CMSIS DAP WebUSB、一个大容量存储设备和一个串行端口。该板预装了音频关键字发现 (KWS) 演示。如果您启动串行终端并将其连接到开发板的串行端口,您将看到使用演示的说明。
你能用它做什么?
开箱即用,该演示可识别英文单词“Zero”到“Nine”、“Go”、“Stop”、“Left”、“Right”、“Up”、“Down”、“On”和“Off” . 当它检测到“Go”这个词时,演示会进入数字识别模式,在这种模式下,它会按照扬声器的指令闪烁 LED 灯的次数。也就是说,说“六”后,LED 会闪烁六次。“停止”返回正常模式。串行监视器显示有关演示对其性能的信心程度的信息。
为了超越预加载的演示应用程序(例如实现系统控制,如切换 GPIO 或通过另一个接口传输数据),需要一个开发环境。为此,Maxim 准备了 Maxim Micros SDK,您可以从他们的网站免费下载。
SDK 是一个基于 Eclipse 的工具链,也可以与 Maxim 的其他基于 ARM 的 MCU 一起使用。它包含 Eclipse IDE、MinGW、用于 ARM 和 RISC-V 处理器的 GCC 工具链、OpenOCD 和一些其他实用程序。此外,SDK 还包含库、示例和文档;简而言之,这就是您在 Windows 上运行所需的全部内容。
开始吧
启动 Eclipse MaximSDK 并选择或定义一个工作区。确保路径中没有空格。如果存在,则 Eclipse 将无法编译项目,或者您的工作区可能不在应有的位置。
当 IDE 打开时,您将看到一个可以忽略并关闭的欢迎屏幕。您现在可以创建新项目或导入现有项目。
要创建一个新项目,展开C/C++行并选择Maxim Microcontrollers向导,单击Next并输入项目名称。再次单击Next ,在打开的对话框中,将Chip type设置为MAX78000,board type 设置为FTHR_RevA,以及CMSIS-DAP的适配器类型。作为示例类型,选择与您计划做的最相似的内容,然后单击Finish创建项目。
选择合适的包
现在您必须首先修复该项目,因为即使您选择了 MAX78000FTHR 板,该项目也是为 MAX78000EVKIT 创建的。请记住这一点,因为 SDK 中的几乎所有内容都默认使用此工具包。有两种方法可以选择正确的电路板(您甚至可以同时使用两种方法,但效果不会更好):
- 在指定_makefile 使用的板部分中,取消注释_FTHR_RevA板并注释掉EvKit_V1(图 4)。完成后保存文件。
makefile 默认为 MAX78000EVKIT,在与 MAX78000FTHR 一起使用之前必须进行编辑。
编辑 build 命令,可通过C/C++ Build部分中的项目属性对话框访问。将BOARD=FTHR_RevA添加到构建命令框(图 5)并单击按钮Apply and Close。
如果您希望保持 makefile 不变,则将 MAX78000FTHR 板定义添加到项目的构建命令中。
可以肯定的是,在继续之前清理项目。Clean 可从Project菜单或在Project Explorer窗口中右键单击项目后使用。
现在构建并运行或调试项目。单击运行(带有白色三角形的绿点)或调试(小错误)可能会弹出一个名为Create, manage and run configurations的窗口。如果是,请展开GDB OpenOCD Debugging行并选择您的项目,然后再继续。
如果您在调试模式下启动,程序将在 main 开始处停止。使用“运行”菜单中的可用命令来逐步执行程序并检查变量。
导入示例
从“文件”菜单中,单击“导入…”以导入示例。展开第一行General,然后选择向导Existing Projects into Workspace。进入根目录。对于 SDK 示例,这是 MaximSDK\Examples\MAX78000。这将为您提供示例列表,您可以从中选择要导入的示例。如果您愿意,您甚至可以将它们全部导入。
要继续我们之前开始的关键字发现之旅,请取消全选,然后检查kws20_demo。还要检查将项目复制到工作区,因为我们要修改示例并且我们希望保留原始文件。
请注意,有一些项目需要不在其包含文件夹中的文件。复制项目时不会复制这些文件,编译将失败。您必须自己复制这些文件或编辑生成文件以修复这些文件的路径。例如,cats-dogs_demo项目需要Common文件夹,因此也复制该文件夹(而不是使用原始示例,或者更糟糕的是,将示例文件夹作为工作区)。
导入示例项目后,如上所述更改其目标板。构建示例并尝试一下。如果一切正常,您可以对其进行修改。
我更改了 KWS 演示,以便在听到On一词时使引脚 P2.3 变为高电平并在识别到单词Off时清除该引脚。根据关键字,LED 将为绿色 ( On ) 或红色 ( Off )。如果识别出另一个关键字,LED 变为蓝色,但引脚不改变状态。引脚 P2.4 表示信心。当推理置信度太低 (≤95%) 时,此引脚变为低电平。
最后,我添加了 UART2。此串行端口在扩展头上可用,因此它可以连接到另一个系统以处理通过此链接传入的数据。所有被识别概率高于 95% 的关键字都通过此链接发送。关键字On和Off以’Y,’开头,其他关键字以’N,’开头。如果置信度较低,则字符串以“?,”开头。随意将这种任意编码方案更改为对您的应用程序更有用的东西。
你可以从 GitHub下载我的项目。在那里,您还可以找到猫/狗检测器演示的引脚切换版本,它在 UART2 上输出额外数据。
MAX78000FTHR:需要考虑的事项
当您准备开始使用 MAX78000FTHR 时,请记住以下几点。
- I/O 端口上的电压电平默认为 1.8 V。当使用函数MXC_GPIO_Config配置引脚时,您可以通过填写mxc_gpio_cfg_t结构的vssel字段来更改每个引脚。对于 3.3 V,您需要MXC_GPIO_VSSEL_VDDIOH(默认为MXC_GPIO_VSSEL_VDDIO,末尾没有“H”)。
- UART2 的 TX 和 RX 等备用引脚功能也存在电压电平问题。但是,它们的引脚配置结构在某种程度上是只读的,因此您无法更改vssel字段。一种解决方法是首先复制结构,修改副本,然后像任何其他引脚一样使用它来(重新)配置引脚。如果您知道这样做的更好方法,请告诉我。
- 函数MXC_GPIO_OutPut不允许我设置引脚的值,我不得不使用MXC_GPIO_OutSet和MXC_GPIO_OutClr代替。原因似乎是传入的引脚值。零按预期工作,但不是 1。要使其工作,请将其传递为 -1(减一,即 0xffffffff)…
- Maxim在 GitHub 上为 MAX78000 板和工具创建了存储库,您可以在其中找到包括教程和示例在内的所有内容的最新版本。
- SDK 附带 MinGW 作为 Eclipse 的替代方案。因此,如果您更喜欢控制台而不是 IDE,那么您也已准备就绪。
- MAX78000FTHR 上的微型相机上可能有一些保护膜(图 6)。在尝试基于相机的应用程序之前,请务必将其删除。
开始试验
您现在已经准备好开始使用 MAX78000FTHR 板来试验机器学习和人工智能了。在这篇文章中,我们只触及了这个强大的板子的表面,接下来还会有一些更深入的文章。在这里,我们向您展示了如何设置开发环境以及如何修改一些示例,以便在自定义应用程序中使用预训练的 AI 示例。
我们尚未涉及的主题之一是 AI 培训。尽管这是一项耗时且耗费资源的任务,但如果您希望 AI 应用程序处理您的数据,则必须完成此任务。有关如何执行此操作的更多信息,请参见GitHub 上的 Maxim 存储库。