由于二进制文件的大小为32 MB,编程最多可能需要10分钟,具体取决于PC的规格和探测器。
SLN-LOCAL-IOT套件装在包装盒中,如下所示。在包装盒内,除了套件外,您还可以找到快速入门卡,“快速入门!”以及USB C型转双A型线缆,如图1所示。一旦通过USB线缆供电,该套件就是预编程了随时可运行的音频播放控制演示。
图1. SLN-LOCAL-IOT内含物。
除了上面所列的物品之外,SLN-LOCAL-IOT开发套件的所有者还可以访问一个软件包,包含SLN-LOCAL-IOT MCUXpresso SDK、预编译的发行二进制文件和制造工具。
第2.2节详细介绍了如何使用快速入门卡上的下载代码自行下载这些文件。
将USB Type-C连接器插入SLN-LOCAL-IOT套件,并将双Type-A连接器插入您的PC。图2说明了如何使用USB线缆连接套件。
图2. 将USB线缆插入PC和SLN-LOCAL-IOT套件中。
套件首次通电时,您会看到LED灯遍历各种颜色模式的循环,如图3所示。这是引导过程各个阶段的状态指示灯,从内部ROM的芯片循环到引导程序,再到引导加载程序,最后到运行应用。
图3. RGB LED状态指示灯。
设备开始监听前的最后一步是,将LED红灯打开大约2秒,然后关闭。一旦LED熄灭,演示就会运行并监听唤醒词。
要测试演示,请说“嘿,恩智浦”唤醒词,然后从音频回放集发出一个命令(例如“下一首曲目”),参见第1.3节获得可用命令的完整列表。SLN-LOCAL-IOT套件通过在内置扬声器上播放短语“Intent Detected(检测到的意图)”,对每个有效命令做出可听见的响应。在第1.4节和第1.5节中,我们将说明如何通过串行终端唯一地确认每个命令。开发人员还可以修改软件以创建对命令的不同物理响应,例如在处理器上切换GPIO以控制开关,通过扬声器播放不同的音频文件或闪烁不同颜色的LED灯。
该套件附带四个命令集,用于控制音频播放(audio)、智能家居(iot)、洗衣机(wash)和一些通用命令(misc)。一次只能激活一个命令集。Audio是默认命令集。激活的命令集可以通过串行终端接口进行更改(参见第1.5节)。通用命令用于概念验证和原型开发,这些开发需要在其他三个命令集中的命令不可用。
请联系恩智浦讨论为定制命令集和唤醒词创建语音识别模型的成本和过程。i.MX RT106L解决方案可以支持六十多种不同语言的命令集,其中包含三十多个命令。
将串行终端应用程序连接到枚举的USB串行设备接口(115200-8-N-1)。图4是串行终端设置的快照。
图4.串行终端端口设置。
按下键盘上的Enter键,您将看到SHELL>>提示。键入help,显示可用命令。图5显示了可用的命令,以及每个命令的描述。
图5. Shell界面。
当您使用声音控制演示时,状态消息将显示在终端窗口中,显示已识别出哪个命令。如果使用了PLAY命令,您应该看到图6中的消息。
图6.“嘿,恩智浦”唤醒字和“Play(播放)”命令的状态消息。
键入命令,列出活动命令集和可用命令,如图7所示。
图7. 音频播放控制命令。
如果要更改为其他命令集,请使用changeto命令。例如,切换到IoT命令集将使用changeto iot,如图8所示。您可以在图9和图10中找到其他两个命令集。
图8.更改为IoT命令集和命令列表。
图9.更改为Misc命令集和命令列表。
图10. 更改为洗衣机命令集和命令列表。
Shell界面提供了一种机制来更改音量并打开/关闭麦克风。此外,如果您想在没有Shell的情况下更改音量,可以使用SW1(增大音量)和SW2(减小音量)。
图11显示了这些开关在套件中的位置,图12是截屏图,是先通过Shell更改音量,然后使用开关后的截图。
图11. SLN-LOCAL-IOT套件上的SW1和SW2。
图12. 设置音量,范围为从0至10。
该套件的默认音量为50%。音量在整个功率循环中保持不变。
使用串行终端上的micsoff可静音麦克风,如图13所示。要取消静音,请使用micson。
图13. 静音/取消静音命令。
麦克风静音后,LED灯变为橙色,如图14所示。
图14. 麦克风静音时LED为橙灯。
In Section 1. Plug It In, we have shown the unboxing and out-of-box demo experience for those who use the kit first time. 本节介绍了集成开发环境(IDE)和解决方案的软件开发包。然后,在后面的部分中,我们将描述如何构建一个简单的演示项目,并介绍有关本地语音控制解决方案的更深层次的开发指南。
MCUXpresso IDE为开发人员带来了一个易于使用的基于eclipse的开发环境,适用于基于Arm Cortex-M内核的恩智浦微控制器。它提供高级编辑、编译和调试功能,增加了MCU专用的调试视图、代码跟踪和分析、多核调试和集成配置工具。借助业界领先的Arm®和SEGGER®的开源和商用调试探测器,其调试连接支持所有基于恩智浦的MCU的开发和评估套件,包括SLN-LOCAL-IOT套件
要免费下载NXP的MCUXpresso IDE,请访问:www.nxp.com/MCUXpresso
选择PRODUCTS(产品)选项卡下的MCUXpresso IDE。
转到DOWNLOADS(下载)选项卡,并选择LATEST VERSION(最新版本)的工具。要求用户注册一个免费的恩智浦用户帐户。
MCUXpresso安装程序下载完成后,双击可执行文件,按照安装说明进行操作并保留默认选项。
启动MCUXpresso IDE,定义演示区位置,并按下OK按钮,如图15所示。
图15. MCUXpresso IDE演示区。
Segger J-Link是SLN-LOCAL-IOT套件的推荐调试器。用户需要确保安装的J-Link软件版本高于V6.60。可以从www.segger.com/downloads/jlink中下载各种操作系统的J-Link软件和文档包。
请按照以下步骤下载基于MCU的本地语音控制解决方案的软件包。
该软件包包括图16所示的项目。该软件包含用户运行演示应用和开发自定义解决方案所需的一切。
图16. 软件包的文件夹结构。
MCUXpresso SDK是一个全面的软件支持包,旨在采用恩智浦微控制器来简化和加速应用开发。
SLN-LOCAL-IOT SDK是为本地语音控制解决方案量身定制的MCUXpresso SDK。用户可以在软件包的SDK文件夹中找到SDK,它是一个名为SLN-LOCAL-IOT.zip的.zip文件。此定制SDK可用于与i.MX RT106L设备和SLN-LOCAL-IOT套件的特定硬件一起,开发新的本地语音控制解决方案。SDK的组件包括RTOS、中间件(USB,TCP / IP)、驱动程序(MCU和外部组件)和参考软件工具。
不幸的是,SLN-LOCAL-IOT SDK目前在 www.nxp.com/mcuxpresso上的MCUXpresso SDK Builder中不可用。相反,定制SDK只在按照2.2节中描述的操作说明所下载的软件包中可用。
要将SLN-LOCAL-IOT SDK安装到MCUXpresso IDE中,只需将SLN-LOCAL-IOT.zip文件拖放到MCUXpresso IDE底部的Installed SDKs(已安装的SDK)选项卡中。图17显示了安装SDK后的屏幕截图。
图17. 已安装的SDK选项卡。
在本节中,我们将展示如何在MCUXpresso IDE中导入/构建/运行示例项目,而SLN-LOCAL-IOT SDK中已经提供了这些项目。当检测到命令时,只需让LED闪烁,用户就能体验如何定制演示应用。
前提条件:J-Link调试器适用于本节中的3.3 设定SLN-LOCAL-IOT套件和3.4恢复出厂设置部分。如果没有这样的调试器,请使用4.2通过MSD模式进行固件更新中所述的大容量存储设备(MSD)模式。在应用项目构建之后,可以将应用图像拖放到闪存中。
借助已安装的SDK,用户可以导入示例应用作为开发起点。
要导入示例项目,请从IDE左下角的Quickstart(快速入门)窗格中选择Import SDK example(s)…(导入SDK示例),如图18所示。
图18. 正在导入现有的SDK项目。
用户应该看到如图19所示的弹出窗口。选择sln_local_iot选项,然后选择Next(下一步)按钮继续。
图19. 选择SLN-LOCAL-IOT套件。
导入向导,如图20所示,将显示所有可以导入的项目。
图20. 选择要导入的项目。
选择demo_apps > local_commands_demo导入演示应用项目。
成功导入项目后,它将列在项目浏览器中,可供构建和运行。
还有其他项目可以导入、构建和运行。但是,我们在本节中主要介绍引导程序和引导加载程序项目。如需了解所有项目的更多详情,建议用户查看可从www.nxp.com/mcu-local中下载的开发指南。
Bootstrap(引导程序)项目是第一个运行的闪存驻留应用程序。引导程序是一个最小的FreeRTOS应用程序,负责引导加载程序验证。引导程序固件旨在对产品的使用周期进行修复,因为任何损坏的映像都将导致设备无法启动或被阻塞。
引导加载程序项目是第二阶段的应用程序,可管理签名验证并加载主应用程序。此外,引导加载程序还负责新的主应用固件的大容量存储设备(MSD)拖放和无线(OTW)更新。使用MSD模式,用户可以简单地将新固件拖放到SLN-LOCAL-IOT套件中,该套件通过USB C型和双A型线缆连接到PC。使用OTW更新模式,用户可以通过有线连接更新固件。目前,SLN-LOCAL-IOT工具包支持UART接口,但它可以扩展到支持SPI、TCP套接字、I2C,甚至是无线连接。有关引导加载程序的更多信息,详见第4节。了解详情。那些对引导加载程序感兴趣的人,请参阅本节。
如需了解引导程序和引导加载程序的更多详情,请查看可从www.nxp.com/mcu-local中下载的开发指南。
local_commands_demo是主要应用程序,它演示了SLN-LOCAL-IOT套件的本地语音控制功能。
要构建项目,请先在项目资源管理器中单击项目名称。Quickstart(快速启动)窗格中选择Build(构建)选项,如图21所示。
图21. 构建应用
如果导入了其他项目,则可以相同的方式构建。
作为简单的演示体验,我们将在导入的演示项目中添加一个LED闪烁功能。当检测到命令时,LED将分别以白色、红色和蓝色三个周期闪烁。
打开sln_local_iot_local_commands_demo > source文件夹下的main.c文件。在app_task()中,只需在ASR_COMMAND_DETECTED: {……}中添加RapidBlinkLED();即可,如图22所示。
图22. 在演示应用中添加RapidBlinkLED()。
本节介绍如何将编译后的演示项目编程到SLN-LOCAL-IOT套件中。
确保将10引脚J-Link连接器连接到SLN-LOCAL-IOT套件背面的i.MXRT JTAG连接器,如图23所示。
图23. SLN-LOCAL-IOT套件背面的i.MXRT调试接口。
单击将编程到SLN-LOCAL-IOT套件中的项目名称。单击Quickstart(快速入门)窗格中的Debug(调试)按钮,如图24所示。
图24. 启动调试会话。
用户应该看到如图25所示的弹出窗口。选择连接到套件的J-Link探测器,然后按OK。
图25. 探测器选择对话。
这将启动刷机工具,然后继续将图像加载到闪存中。编程状态显示在另一个弹出窗口中,如图26所示。完成后,将启动并运行调试器。然后用户可以步进、运行或设置断点。
图26. J-Link编程窗口。
在开发过程中可能会出现一些问题。恩智浦提供了完整的32 MB应用二进制文件,适用于作为SLN-LOCAL-IOT软件包一部分的开箱即用演示。将该二进制文件编程到SLN-LOCAL-IOT套件中,将擦除整个闪存并将其替换为出厂设置。
要将套件恢复到出厂状态,请使用MCUXpresso IDE中的内置闪存编程器。选择图27所示图像中的图标可打开闪存工具。
图27. 正在打开GUI Flash工具。
Flash GUI工具将自动填写与当前所选项目关联的字段。
图28. GUI Flash工具。
打开Flash GUI工具后,用户可能会看到一条错误消息,如图28所示。如果选择了要闪存的文件,该信息将消失。
选择Filesystem(文件系统)按钮,可打开文件选择窗口,然后从SLN-LOCAL-IOT软件包的Binaries(二进制)文件夹中选择local_commands_demo_full32mb.bin文件。确保已选择文件扩展名类型*.bin。图29显示了二进制文件选择步骤的屏幕截图。
图29. 选择二进制。
在Base Address(基地址)字段,将地址更改为 0x60000000以选择闪存的基地址。单击Run…将启动编程操作。
由于二进制文件的大小为32 MB,编程最多可能需要10分钟,具体取决于PC的规格和探测器。
第2.3节中下载的软件包包含用于洗衣机的图形用户界面(GUI)仿真器。该仿真器可用来演示洗衣机控制。当SLN-LOCAL-IOT套件检测到命令时,仿真器将在屏幕上显示检测到哪个命令。请注意,GUI仅适用于Microsoft Windows。
确保SLN-LOCAL-IOT套件已插入并等待唤醒词。
打开软件包中的工具/GUI文件夹。文件夹结构如图16所示。双击.exe文件以执行模拟器。您会看到串行终端上的命令集已更改为wash(洗涤),如图30所示,并且屏幕上显示了洗衣机图像,如图31所示。
在Windows上以管理员身份运行洗衣机仿真器。这使GUI可以检测套件的UART端口。
图30. 打开GUI时更改为清洗命令集。
图31. 洗衣机模拟器
说“嘿,恩智浦”,然后是一个洗涤命令–正常洗涤、强力洗涤、精细洗涤、白色洗涤和取消。仿真器指示检测到哪个命令。
引导加载程序应用通过USB大容量存储设备(MSD)或在线(OTW)模式支持固件更新。这使用户无需J-Link探测器即可重新闪存主应用程序的二进制文件。本节介绍如何通过USB MSD模式更新主应用程序,下一节介绍OTW模式。
固件更新仅适用于主要应用程序,而不适用于引导程序和引导加载程序。如果引导程序或引导加载程序需要更新,用户必须使用J-LINK探测器。
SLN-LOCAL-IOT套件的闪存中有两个应用库。
在编译主应用程序时,用户必须正确配置库地址。这样可确保设备安全地跳转到一个存储位置的新应用映像,而不会影响另一存储位置。
如果目前运行的应用程序在库A中,则必须将新映像链接到库B。
要将地址从库A更改为库B,请在MCUXpresso IDE项目浏览器中,右击sln_local_iot_local_commands_demo (或用户的应用程序项目名称) > Project Settings > Memory,如图32所示。
选择Edit Memory(编辑内存),这将打开Memory Configuration Editor(内存配置编辑器)。
将应用库A的闪存类型地址更改为0x6030 0000,并将应用库B的闪存类型地址更改为0x60D0 0000。
图32. 编辑存储器配置。
在构建应用之前,用户需要确保MCUXpresso项目作为构建过程的结果生成一个.bin文件。右击项目名称,然后打开Properties(属性),如图33所示。
图33. 项目属性。
在菜单中展开C/C++ Build,然后单击Settings(设置)。选择Build(构建)步骤选项卡,其中可以编辑构建后步骤。单击Edit(编辑),它将显示构建后步骤的命令。图34显示了如何打开构建后步骤窗口。
图34. 编辑构建后步骤。
命令字符 “#”禁用以下所有命令。为了在构建后的过程中生成.bin文件,请删除字符“#”并单击OK。删除“#”后得到的命令必须如图35所示:
图35. 生成.bin文件的构建后命令。
如果构建过程成功完成,将生成一个.bin文件,并将其放置在MCUXpresso项目的Debug(调试)文件夹中。
现在,用户可以通过USB MSD模式将生成的图像编程到SLN-LOCAL-IOT套件中。
重新打开SLN-LOCAL-IOT套件的电源,同时按下SW2,直到粉色LED灯发亮,如图36所示。在MSD模式下,粉色LED灯每隔3秒打开和关闭一次。
图36. MSD更新模式和SW2位置。
导航到PC的文件浏览器,并确认SLN-LOCAL-IOT套件已作为一个USB大容量存储驱动器来安装。已安装的套件显示在文件资源管理器上,如图37所示。
图37. 作为USB大容量存储驱动器安装的SLN-LOCAL-IOT套件。
将生成的.bin文件拖放到MSD驱动器上。这将启动下载过程并将.bin文件写入闪存。将图像设定到闪存后,将开始执行命令。
OTW更新是将新的应用固件从远程计算机推送到设备的过程。该设备可以通过UART、SPI、TCP套接字或I2C进行连接。使用闪存中的新固件更新设备时,假定已通过所有必要的检查,设备将重新启动到新应用中。
SLN-LOCAL-IOT套件的OTW更新是通过使用简单的JSON接口驱动的,可轻松在生产线上实现主机端代码。该套件当前受UART支持,但可以扩展为支持其他接口,例如TCP套接字、SPI和I2C。
传输的消息有两种类型:请求和响应。每次传输包含两部分:4字节大小的字段和JSON消息。这使得OTW数据接口可在各种接口之间兼容。如需了解请求-响应流和传输格式结构的更多详细信息,请查看可从www.nxp.com/mcu-local下载的开发指南。
恩智浦提供了工厂自动化环境,可用于对生产线上的设备进行安全编程。该脚本集合称为Ivaldi。
Ivalidi是一个无需J-Link即可负责制造编程和重新编程的软件包。它使用i.MX RT106L引导ROM的串行下载器模式与称为Flashloader的应用进行通信,该应用已编程到RT106L中。Ivaldi的创建专注于客户开发和制造周期的构建基础架构。其主要重点为:
如需了解制造工具的更多详情,请查看可从www.nxp.com/mcu-local下载的开发指南。
可从www.nxp.com/mcu-local中找到更多资源,包括开发指南、快速入门指南,以及硬件和软件设计文件。请访问此链接,并探索更多有关基于MCU的本地语音控制解决方案!