Silicon Labs Zigbee EZSP-UART 入门

了解架构
在继续使用 EZSP-UART 之前,重要的是要了解 EZSP-UART 平台有几个层,所以让我们首先回顾一下每个层如何适合拼图,在哪里可以找到该层的代码,以及在哪里可以找到更多信息关于该层可以找到...

主机端
应用框架
它如何适应:您的应用程序将位于 ZCL(ZigBee 集群库)之上,这是一组应用程序框架代码,用于处理该设备实现所需的每个集群(一组应用程序/设备功能)。

它所在的位置:Silicon Labs 目前在 app/framework 文件夹中为您提供 ZCL 应用程序框架,其中包括对 Zigbee 配置文件支持的所有官方 ZCL 集群的支持,以及一个回调接口供您添加应用程序级行为在此之上。请注意,此框架与 Simplicity Studio 中的 AppBuilder 相关联,因此 AppBuilder 可以用作前端来快速配置框架,以包括对您正在实施的任何 ZigBee 设备类型的适当集群支持。

描述位置:有关 Silicon Labs 的 ZCL 应用程序框架的全面描述,请参阅应用程序框架开发人员指南 (UG391)。

EZSP 驱动程序
它如何适应:顶级应用程序代码(包括 ZCL 应用程序框架)正在调用 EZSP 驱动程序,该驱动程序利用 EZSP 命令/响应格式提供 EmberZNet 堆栈接口的串行抽象(在网络内运行协处理器 [NCP],例如加载了 NCP 固件的 EFR32 芯片)。

它位于何处:基本的 EZSP 驱动程序本身(处理驱动程序和应用程序框架之间的 EZSP 帧的编码和解码)位于 app/util/ezsp 中。请注意该目录中的 serial-interface-spi.c 和 serial-interface-uart.c 文件,它们处理与下一个较低层的接口。

描述位置:请参阅EZSP 参考指南 (UG100),了解 EZSP 帧格式和一般 EZSP 概念的说明。

ASH 框架
它如何适应:异步串行主机('ASH',是通用 EZSP 驱动程序(跨 SPI 和 UART 接口抽象出来)和低级 UART 之间的一种中间层。它主要是作为一种质量的-服务 [QoS] 协议,用于管理错误检查、CRC、ACK/NAK 定时、流控制等,这是必要的,因为 UART 更容易出错(并且由于其异步性质而更难以管理) ASH 框架将 EZSP 帧封装到更强大的 UART 协议中,并且偶尔会出于 QoS 目的执行一些自己的串行事务。

它所在的位置:此代码主要包含在 app/ezsp-uart-host 中,以及一些可以在主机上运行的 uart-test 程序,用于测试低级 UART/ASH 连接,而不涉及EZSP 驱动程序。在 hal/micro/generic 文件夹中还有一些 ASH 支持文件,这些文件在主机端代码和 Ember 为每个版本构建的 NCP 固件之间共享。

描述位置:有关 ASH 框架的描述,请参阅UART-EZSP 网关协议参考 (UG101)。

低级 UART 驱动程序
如何适应:上述层中的 ezsp-host-io.c 文件使用 POSIX termios 库调用与主机的 UART 接口。如果您碰巧在一个不存在此类 POSIX 库的主机架构上(例如,如果没有操作系统),您将不得不对 ezsp-host-io 模块进行一些黑客攻击,以与某种更定制的驱动程序接口用于您的微控制器的 UART 外围设备。该驱动程序应该负责将实际字节输入/输出串行队列并在适用时处理硬件流控制。如果您的目标串行端口使用 USB 转串行驱动程序,则 ASH 框架不知道其中的区别;您的低级 UART 驱动程序应该会自动处理。

它位于何处:实际的 UART 驱动程序通常是您的操作系统的一部分,因此除非您编写了自定义驱动程序,否则这很可能位于内核模块或 DLL 或您 [希望] 的其他一些预编译代码中不负责。

描述位置:虽然您的实际 UART 驱动程序将是特定于系统的,因此不在 Silicon Labs 的范围内,但您可以参考EZSP-UART 主机接口指南 (AN706)以了解有关如何将 ASH 框架绑定到您的特定的低级 UART 驱动程序和单元测试该部分,然后再进行 EZSP 级测试。

NCP侧
这就是事情的主机端,而 NCP 端基本上与所有这些相反,NCP 的“应用程序框架”只是一个简单的 EZSP 解释器,它将 EZSP 帧转换为 EmberZNet 堆栈库调用以完成必要的堆栈任务.

希望这个解释有助于正确看待问题,但如果您想了解更多信息,请务必查阅上面讨论的 HTML/PDF 参考资料,所有这些参考资料都链接自您的 EmberZNet 软件安装中的 documentation/index.html 页面。

试一试
现在您对 EZSP-UART 平台的组织方式有所了解,让我们讨论一下如何立即开始使用它。

为了在特定节点上使用 EZSP-UART 功能,节点必须加载适当的固件,即 EZSP-UART 网络协处理器 (NCP) 固件。该固件需要在 Simplicity Studio 中生成和构建。您的 NCP 应用程序还需要合适的引导加载程序,例如 UART XMODEM 或 EZSP SPI 引导加载程序。有关构建 NCP 应用程序的信息,请参阅AN1010:构建定制的 NCP 应用程序。如果您使用的是 WSTK 和标准 Silicon Labs 无线电板,例如 BRD4161,您可以使用默认设置生成您的 NCP,使用 NCP-SPI 或 NCP-UART 插件,具体取决于您的特定接口。

如果您将 EZSP-UART NCP 固件加载到您的芯片上,那么您可以使用 EZSP-UART 主机应用程序(例如从 EmberZNet 版本中提供的 Makefile 构建的可执行文件,或者在 Host 设置为“UNIX UART”时由 AppBuilder 生成的可执行文件Host') 通过 EZSP-UART 与 NCP 通信。

可以在基于 NCP 的 EmberZNet 堆栈安装中的 /app/ezsp-uart-host 中找到实现协议主机端的示例代码(基于称为 ASH [异步串行主机] 的串行库)。

EZSP UART NCP 应用程序的默认波特率如下:

使用硬件流控制 (RTS/CTS) 时为 115,200 bps

使用软件流 (XON/XOFF) 时为 57,600 bps

更改波特率(或其他 NCP 设置):使用适合您的 NCP 的设置修改该 NCP-UART 插件。

注意:请注意,强烈建议使用 EZSP-UART 进行硬件流控制,因此如果您的硬件没有实现此功能,则应使用 EZSP-UART 固件的 Xon/Xoff(软件流控制)版本, 或者确保将波特率保持在相当低的水平(38400 或更低)以减少通信错误的机会。

存在用于在 NCP 上设置其他 ASH 参数的其他 ASH 配置令牌。下表按制造令牌空间中的制造字寻址偏移列出了参数。请注意,任何包含 0xFFFF 数据的地址都会导致 ASHConfig 参数采用协议定义的默认值。

ASH 配置制造商Token存储位置

AshConfigValue Manufacturing word offset CIB bytes Description
baudRate 0x80 0x08040856/7 SerialBaudRate enum value (e.g: 6=9600, 8=19200, A=38400, C=57600, F=115200)
traceFlags 0x81 0x08040858/9 trace output control bit flags
unused0 0x82 0x0804085A/B
txK 0x83 0x0804085C/D max frames that can be sent w/o being ACKed (1-7)
randomize 0x84 0x0804085E/F enables randomizing DATA frame payloads
ackTimeInit 0x85 0x08040860/1 adaptive RX'ed ACK timeout initial value
ackTimeMin 0x86 0x08040862/3 adaptive RX'ed ACK timeout minimum value
ackTimeMax 0x87 0x08040864/5 adaptive RX'ed ACK timeout maximum value
maxTimeouts 0x88 0x08040866/7 ACK timeouts needed to enter the ERROR state
unused1 0x89 0x08040868/9
rebootDelay 0x8A 0x0804086A/B reboot delay before sending RstACK
unused2 0x8B 0x0804086C/D
unused3 0x8C 0x0804086E/F
unused4 0x8D 0x08040870/1
nrTime 0x8E 0x08040872/3 time after which a RX'ed nFlag expires
unused5 0x8F 0x08040874/5
unused6 0x90 0x08040876/7
unused7 0x91 0x08040878/9
unused8 0x92 0x0804087A/B
unused9 0x93 0x0804087C/D