JN5169 JN-AN-1217-Zigbee-3-0-Base-Device

Posted Calvin Chan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JN5169 JN-AN-1217-Zigbee-3-0-Base-Device相关的知识,希望对你有一定的参考价值。

一、JN-AN-1217 介绍

        JN-AN-1217 提供了示例应用,以演示使用 NXP JN516x 或 JN517x 无线微控制器的 ZigBee 3.0 网络中基本设备的功能和操作。 一个示例应用程序可以用作:

  • 使用可在 JN516x/7x 评估套件的节点上运行的提供的预构建二进制文件的演示。
  • 使用提供的C 源文件和相关项目文件进行自定义应用程序开发的起点。

        JN-AN-1217 中描述的设备为协调器、路由器和终端设备提供了 ZigBee 基本设备行为规范的标准强制性功能。它们没有实现完整的真实设备,但提供了 ZigBee 基础设备的强制性功能,可以在其上构建和进一步开发应用程序。

        ZigBee 3.0 无线网络包括许多在硬件平台上实现以形成节点的 ZigBee 软件设备。JN-AN-1217 涉及在 NXP JN516x 和 JN517x 平台上实施 ZigBee 基础设备。

JN-AN-1217 提供了以下 ZigBee 逻辑设备类型的示例实现:

  • 协调员
  • 路由器
  • 终端设备

        上述设备类型的示例不是真实世界的设备,如 ZigBee 照明和占用设备规范中定义的设备,但提供了 ZigBee 基本设备行为规范所需的基本行为。它们作为模板提供,进一步开发为真实的物理设备。 ZigBee 基础设备在 ZigBee 3.0 设备用户指南 [JN-UG-3114] 中进行了介绍和详细说明。

        ZigBee 基本设备行为规范提供了用于形成、加入和维护 ZigBee 3.0 网络的定义、程序和方法。它还定义了服务发现的方法,将操作集群的客户端和服务器绑定在一起,以实现物理设备的功能。

二、设备描述

1、路由器

        本节介绍如何在 ZigBee 3.0 网络中调试和操作路由器应用程序。 要使用此应用程序,您必须已将应用程序 Router_NtagIcode_JN51xx_DR1175.bin 编程到装有 DR1175 照明/传感器扩展板的载板上的 JN516x/7x 模块中。

① 路由器功能

路由器应用程序的功能在下面进行了描述和说明。
在这里插入图片描述
在这里插入图片描述

        路由器可以加入现有网络,也可以决定自己形成分布式网络供其他节点加入。 有关集中式信任中心网络和分布式网络之间差异的详细信息,请参阅 ZigBee 设备用户指南 [JN-UG-3114]。

        路由器支持 ZigBee 基本设备行为规范中定义的基本设备的强制性集群和功能。 为了演示“查找和绑定”功能,路由器还支持将开/关集群作为服务器。

② 组建或加入网络

        路由器既可以加入现有网络,也可以在没有网络的情况下形成分布式网络供其他设备加入。

a、使用网络引导加入现有网络

        一旦网络开放以接受新加入者(网络上的设备的网络转向),出厂新路由器就可以加入现有网络。 这是通过以下方式实现的:

  1. 在已经在网络上的设备之一上触发网络转向。
  2. 然后重置(使用 RST 或 RESET 按钮)或打开路由器设备的电源。

        这将导致路由器启动网络发现和关联过程。关联之后是安全材料的交换和信任中心链接密钥的更新(如果加入集中信任中心网络。

        如果加入不成功,可以通过重新通电重新尝试。 或者,可以遵循形成分布式网络的过程。

b、使用 NFC 加入现有网络

        路由器可以通过与 ZigBee 物联网网关主机交换 NFC 数据加入或移动到现有网络,如应用说明 ZigBee 物联网网关主机与 NFC (JN-AN-1222) 中所述。 这提供了一种将新设备引入这种网络的快速方便的方法。

        确保为 NFC 设置硬件。

c、组建分布式网络

        Router 可以在没有开放网络加入的情况下组成分布式网络。要在全新出厂的设备上实现此目的:

  • 按下载板上的 DIO8/GPIO4 按钮(该按钮也用于启动网络转向以及查找和绑定,如下所述)。

        路由器将使用随机网络密钥形成网络并开始运行。 要允许其他设备加入此网络,请按照下一节中的说明进行操作。

③ 允许其他设备加入网络

        一旦路由器成为网络的一部分,就必须打开网络以允许其他设备加入(网络上的网络转向)。 去做这个:

  • 按下载板上的 DIO8/GPIO4 按钮(同一个按钮也用于启动查找和绑定)

        然后路由器将向网络广播管理许可加入请求,以打开“许可加入”窗口 180 秒。 现在可以在要加入网络的设备上触发网络引导过程(对于不在网络上的设备)。

④ 绑定设备

        Router 支持 On/Off 集群作为服务器,实现 Finding 和 Binding 过程作为Target。要将 Finding 和 Binding 作为目标触发,请执行以下操作:

  1. 按下所有目标设备载板上的 DIO8/GPIO4 按钮(同一个按钮也用于启动 Network Steering)。
  2. 在启动器设备上开始查找和绑定。

        这将导致路由器自我识别 180 秒,而发起者将尝试找到识别设备,查询它们的功能并在具有匹配操作集群的设备上创建绑定。作为该过程的一部分,路由器可以接收添加组命令和/或绑定请求命令。

        报告是 ZigBee 3.0 中的一项强制性功能。路由器支持 On/Off 集群作为服务器,并且该集群的 OnOff 属性是 ZigBee Base Device Behavior Specification 中定义的可报告属性。路由器拥有用于报告 OnOff 属性状态的默认配置。一旦希望接收这些定期和变化报告的设备创建了远程绑定,路由器将开始向此绑定设备发送报告。报告的频率取决于各个目标设备的默认报告配置,在本例中为 60 秒。接收报告的设备可以通过发送报告配置命令来请求更改。

⑤ 操作设备

        本演示中该设备的操作功能由 On/Off 集群提供。 由于设备支持 On/Off 集群服务器,它的操作是被动的,它响应绑定设备发送的命令。 它通过切换 DR1175 照明/传感器扩展板上的白灯来响应来自绑定控制器设备的 OnOff Toggle 命令。

⑥ 重新加入网络

        作为路由器,当该设备在非出厂状态下重新启动时,它只会恢复其先前状态的运行。 所有应用程序、绑定、组和网络参数都保存在非易失性存储器中。

⑦ 恢复出厂设置

        路由器可以返回到其出厂新状态(擦除除传出网络帧计数器之外的所有持久数据),如下所示:

  • 按住DIO8/GPIO4 按钮并按下载板上的RST 按钮。

        然后路由器将在旧网络上广播离开指示,然后删除所有持久数据(传出网络帧计数器除外)并执行软件重置。

        有两种支持的无线命令可用于从网络中删除设备 - 它们是:

  • 无需重新加入的网络离开请求
  • ZDO 管理网络离开请求,无需重新加入

        基本集群的重置命令将导致 ZCL 重置为其出厂新默认值,重置所有属性和配置的报告。 这不会从网络中删除设备 - 所有网络参数、组和绑定都将保留在原位。

2、协调器

        本节介绍如何在 ZigBee 3.0 网络中调试和操作 Coordinator 应用程序。 要使用此应用程序,必须已将应用程序二进制文件编程到相关的物理设备中——以下任一项:

  • Coordinator_JN51xx_DR1199.bin 插入装有 DR1199 通用扩展板的载板上的 JN516x/7x 模块
  • Coordinator_JN51xx_DONGLE.bin 到 JN5169/79 USB Dongle

① 协调器功能

Coordinator 应用程序的功能在下面进行了描述和说明。

在这里插入图片描述
在这里插入图片描述
        协调器负责最初形成网络,然后通过信任中心功能管理允许哪些其他设备加入网络并向允许加入的设备分发安全材料。协调器支持 ZigBee 基本设备行为规范中定义的基本设备的强制性集群和功能。

        为了演示“查找和绑定”功能,协调器还支持 On/Off 集群作为客户端。

Coordinator 提供了两种触发其功能的方法:

  • 使用来自连接到协调器硬件的主机终端上的串行接口的命令——如果协调器应用程序被编程到 JN5169/JN5179 USB Dongle,这是唯一可用的接口。 串行接口不区分大小写。
  • 使用DR1199 通用扩展板上的按钮——这显然只有在将协调器应用程序编程到载板上的JN516x/7x 模块时才可用。

② 组建网络

        根据所使用的硬件,可以通过以下任一方式从出厂时的新协调器(不在网络上的网络转向)形成网络:

  • 按下DR1174/OM15028 载板上的按钮DIO8/GPIO4。
  • 在串行接口(Dongle 或载板)上输入“form”。

        然后协调器将启动一个网络。 使用数据包嗅探器(例如,在 JN5169 USB Dongle 上),然后可以在操作通道上观察周期性链接状态消息。

③ 允许其他节点加入

        网络形成后,必须打开网络以允许其他设备通过以下任一方式加入(网络上的网络转向),具体取决于所使用的硬件:

  • 按下DR1199 通用扩展板上的按钮SW2。
  • 在串行接口(Dongle 或载板)上输入“steer”。

        然后协调器将向网络广播管理许可加入请求,以打开“许可加入”窗口 180 秒。 现在可以在要加入网络的设备上触发网络引导过程(对于不在网络上的设备)。

④ 绑定节点

        “查找和绑定”是控制设备通过匹配操作集群来查找受控设备并在绑定表中创建条目的过程。 Coordinator 支持将 Finding 和 Binding 作为尝试找到要绑定的目标的“发起者”。出于演示的目的,Coordinator 支持 On/Off 集群作为客户端,因此 Finding 和 Binding 过程将寻找支持 On/Off 集群作为服务器的设备以创建绑定。

        要作为发起方开始查找和绑定,首先在任何“目标”设备上触发查找和绑定,然后在协调器(发起方)上执行以下任一操作:

  • 按下DR1199 通用扩展板上的按钮SW4。
  • 在串行接口(Dongle 或DR1199)上输入“find”。

        当目标的查找和绑定完成并创建了绑定时,协调器将向目标设备发送识别关闭命令,以表示目标的过程完成。根据正在创建的绑定类型(单播或组播),可以向目标设备发送添加组命令。

        报告是 ZigBee 3.0 中的一项强制性功能。希望从操作服务器接收定期和更改报告的设备应在目标设备上为自己创建远程绑定。此协调器将向具有开/关集群服务器的目标发送绑定请求。然后它将从该设备接收定期和变化报告,报告 On/Off 集群的 OnOff 属性 (0x0000) 的状态。报告的频率取决于各个目标设备的默认报告配置。接收报告的设备可以通过发送报告配置命令来请求更改。

⑤ 操作设备

        本演示中该设备的操作功能由 On/Off 集群提供。 您现在可以通过以下任一方式向绑定设备(在绑定表中)发送 OnOff Toggle 命令:

  • 按下DR1199 通用扩展板上的按钮SW1。
  • 在串行接口(Dongle 或DR1199)中输入“toggle”。

        此命令对绑定设备的影响取决于与设备上的开/关集群相关的功能——对于本演示中的路由器,它将切换一个灯。

⑥ 重新加入网络

        作为协调器,当此设备在非出厂状态下重新启动时,它只会恢复其先前状态的操作。 所有应用程序、绑定、组和网络参数都保存在非易失性存储器中。

⑦ 恢复出厂设置

        根据所使用的硬件,可以通过以下任一方式将协调器返回到其出厂新状态(擦除除传出网络帧计数器之外的所有持久数据):

  • 按住DIO8/GPIO4 按钮并按下载板上的RST 按钮
  • 在串行接口(Dongle 或DR1199)上输入““factory reset”

⑧ 串行接口命令汇总

按钮串行命令操作
SW1Toggle向绑定设备发送 OnOff Toggle 命令
SW2Steer触发网络上设备的网络转向
SW3Form为不在网络上的设备触发网络形成
SW4Find触发查找和绑定作为发起者
Reset+DIO8Factory Reset将设备恢复出厂设置,擦除持久数据
ResetSoft Reset触发软件复位(不丢失数据)
-Print将 Aps 密钥表打印到终端
-Code < MAC > < Install Code >将安装代码提供到 Aps 密钥表中

        串口设置为使用 115200 波特率,8 个数据位,1 个停止位,无奇偶校验。 串行命令不区分大小写。 安装代码可以输入为 16 个十六进制字节,没有分隔符、逗号或冒号。

3、终端设备

        本节介绍如何在 ZigBee 3.0 网络中调试和操作终端设备应用程序。 要使用此应用程序,您必须已将应用程序 EndDevice_NtagIcode_JN51xx_DR1199.bin 编程到装有 DR1199 通用扩展板的载板上的 JN516x/7x 模块中。

① 终端设备功能

        终端设备应用程序的功能在下面进行了描述和说明。
在这里插入图片描述
在这里插入图片描述
        终端设备是一个休眠的“空闲时关闭接收”设备。它无法形成网络或成为加入网络的其他设备的父设备。 终端设备支持 ZigBee 基础设备行为规范中定义的基础设备的强制性集群和功能。

        为了演示“查找和绑定”功能,终端设备还支持作为客户端的开/关集群。

        到/来自终端设备的所有通信都通过其父协调器或路由器传递,并且终端设备必须定期向父设备发送轮询请求,以便接收可能正在等待它的任何消息。 终端设备实现混合睡眠模式 - 在最初唤醒后的短时间内,它将执行一系列 warm sleep 周期,然后在定时器或 DIO 更改时将其唤醒,但在此之后它将进入深度睡眠模式直到唤醒 通过 DIO 更改。

② 加入网络

a、使用网络引导加入现有网络

        一旦网络开放以接受新加入者(网络上的设备的网络转向),出厂新的终端设备就可以加入现有网络。 这是通过以下方式实现的:

  1. 在已经在网络上的设备之一上触发网络转向。
  2. 按下终端设备的 DR1199 通用扩展板上的按钮 SW2。

b、使用 NFC 加入现有网络

        终端设备可以通过与 ZigBee 物联网网关主机交换 NFC 数据加入或移动到现有网络,如应用说明 ZigBee 物联网网关主机与 NFC (JN-AN-1222) 中所述。 这提供了一种将新设备引入这种网络的快速方便的方法。

        确保为 NFC 设置硬件。

        此过程的说明包含在应用说明 (JN-AN-1222) 中。

③ 允许其他设备加入网络

        一旦终端设备成为网络的一部分,终端设备就可以请求打开网络以允许其他设备加入(网络上的网络转向)。去做这个:

  • 按下终端设备的 DR1199 通用扩展板上的按钮 SW2。

        然后,终端设备将向其父设备单播管理许可加入请求。 然后,父设备会将其重新广播到网络并打开“允许加入”窗口 180 秒。 现在可以在要加入网络的设备上触发网络引导过程(对于不在网络上的设备)。 终端设备能够向新加入者开放网络,但它不能成为这些新加入者的父设备。

④ 绑定设备

        终端设备支持“查找和绑定”作为尝试查找要绑定到的目标的发起方。出于演示的目的,终端设备支持 On/Off 集群作为客户端,因此 Finding 和 Binding 过程将寻找支持 On/Off 集群作为服务器的设备以创建绑定。

        要在终端设备上作为发起方触发查找和绑定,首先在任何目标设备上触发查找和绑定,然后在终端设备上执行以下操作:

  • 按下终端设备的 DR1199 通用扩展板上的按钮 SW4

        当目标的查找和绑定完成并创建绑定时,终端设备将向目标设备发送识别关闭命令,以表示此目标的过程已完成。根据正在创建的绑定类型(单播或组播),可以向目标发送添加组命令。报告是 ZigBee 3.0 中的强制性功能,但请求将报告发送到设备不是强制性的。作为休眠设备,终端设备很可能处于休眠状态并且无法接收任何报告,因此该设备不会在目标设备上创建绑定以供它们发送报告。

⑤ 操作设备

        本演示中该设备的操作功能由 On/Off 集群提供。 您现在可以向绑定的绑定设备(在绑定表中)发送 OnOff Toggle 命令,如下所示:

  • 按下DR1199 通用扩展板上的按钮SW1。

        此命令对绑定设备的影响取决于与设备上的开/关集群相关的功能——对于本演示中的路由器,它将切换一个灯。

⑥ 重新加入网络

        作为终端设备,当该设备在非出厂状态下重启时,它会发送网络重新加入请求以重新建立与其前一个父设备的联系。 如果失败,它将尝试加入网络上将托管它的任何路由器。 在开机和从深度睡眠中唤醒时尝试重新加入。 所有应用程序、绑定、组和网络参数都保存在非易失性存储器中。

⑦ 恢复出厂设置

        终端设备可以返回到其出厂新状态(擦除除传出网络帧计数器之外的所有持久数据),如下所示:

  • 按住DIO8/GPIO4 按钮并按下载板上的RST 按钮。

        然后,终端设备将向其父设备单播离开指示,该设备将将此消息重新广播到旧网络。 终端设备然后将删除所有持久数据(除了传出网络帧计数器)并执行软件重置。

        有两种支持的无线命令可用于从网络中删除设备 - 它们是:

  • 无需重新加入的网络离开请求
  • ZDO 管理网络离开请求,无需重新加入

        基本集群的重置命令将导致 ZCL 重置为其出厂新默认值,重置所有属性和配置的报告。 这不会从网络中删除设备 - 所有网络参数、组和绑定都将保留在原位。

三、安装代码

        ZigBee 基础设备允许设备使用唯一的安装代码而不是众所周知的默认链接密钥加入网络。 此安装代码仅用于初始加入,并在加入后立即被信任中心替换为新的唯一链接密钥,以确保信任中心和单个设备之间的未来通信。 安装代码的长度为 16 个字节。

        每个加入的设备(路由器或终端设备)都必须有一个唯一的安装代码。 如何在真实设备中生成和配置此代码超出了本应用笔记的范围。 出于演示的目的,每个加入的设备都将创建一个安装代码,该代码是其 8 字节 IEEE/MAC 地址重复一次。 例如,IEEE/MAC 地址为 00158D000035C9B8 的设备将生成以下安装代码:

00:15:8D:00:00:35:C9:B8:00:15:8D:00:00:35:C9:B8

        在使用安装码的设备加入网络之前,需要将该设备的 IEEE/MAC 地址和安装码添加到网络的信任中心。 串行接口提供了执行此操作的命令。 该命令的格式为:

Code <MAC Address> <Install code>
  • < MAC Address > 是设备的IEEE/MAC 地址(MSB 在前,字母字符不区分大小写)。
  • < Install code > 是安装代码(MSB 在前,字母字符不区分大小写,字节之间可以用冒号(‘:’)、逗号(‘,’)或空分隔)。

对于具有上述 IEEE/MAC 地址的设备,命令为:

Code 00158D000035C9B8 00,15,8D,00,00,35,C9,B8, 00,15,8D,00,00,35,C9,B8

        在信任中心提供安装代码和 IEEE/MAC 地址后,可以遵循将新设备加入网络的正常程序。

        使用安装代码加入新设备后,它将被新的信任中心链接密钥替换(安装代码将被丢弃且不会存储以供重复使用)。 如果设备恢复出厂设置,则在信任中心中重新提供安装代码之前,它将无法与网络重新关联。

        要构建本应用说明中的设备以使用安装代码进行连接,请编辑每个设备的命令行以设置构建选项 ICODE=1,然后清理并重建每个设备。

四、使用应用说明进行开发

JN-AN-1217-Zigbee-3-0-Base-Device 文件目录结构
在这里插入图片描述
JN-AN-1217-Zigbee-3-0-Base-Device 项目工程结构
在这里插入图片描述

1、通用代码

本节列出并描述了提供本应用笔记中所有设备通用功能的源文件,这些文件保存在 Common/source 目录中。

文件名描述
App.zpscfgApp.zpscfg 是 ZigBee 堆栈的配置文件。 对于应用程序中的每个设备,它定义了所有必需的堆栈参数、表大小、服务器等。该文件作为构建过程的一部分进行处理,并创建要构建到每个设备中的特定于设备的源文件。
app_buttons.capp_buttons.c 提供了一个接口来读取扩展板上的开关/按钮并将按钮按下事件发布到应用程序事件队列。
app_events.happ_events.h 包含应用程序事件的类型定义。
app_ntag_aes.capp_ntag_aes.c 包含驱动 NFC 调试数据交换并在从 NTAG 读取有效数据时启动加入过程的代码。 此代码使用较旧的 NTAG 数据格式,该格式采用 AES 加密并且未在默认版本中使用。
app_ntag_icode.capp_ntag_icode.c 包含驱动 NFC 调试数据交换并在从 NTAG 读取有效数据时启动加入过程的代码。 此代码使用较新的 NTAG 数据格式,该格式采用 ZigBee 安装代码加密并用于默认构建。
app_pdm.capp_pdm.c 为持久数据管理器 (PDM) 提供错误事件回调,以便将 PDM 的状态通知给应用程序。
PDM_IDs.hPDM_IDs.h 为 PDM 中的所有数据记录提供唯一标识符。

2、NTAG 文件夹(AES 格式)

包含用于 NFC 的公共 API 的 NTAG 库和头文件保存在 NTAG 目录中。 此代码使用较旧的 NTAG 数据格式,该格式采用 AES 加密并且未在默认版本中使用。

3、NFC 文件夹(ZigBee 安装代码格式)

包含 NFC 公共 API 的 NFC 库和头文件保存在 NFC 目录中。 此代码使用较新的 NTAG 数据格式,该格式采用 ZigBee 安装代码加密并用于默认构建。

这些 API 和 app_ntag_icode.c/h API 的文档可以在本应用笔记的 Doc 目录中的 NFC.chm 帮助文件中找到。

4、协调器应用代码

本节列出并描述了 Coordinator 应用程序代码的源文件,这些文件在应用程序的 Source 目录中提供。 您可能希望使用此代码作为您自己的应用程序开发的基础。

文件名描述
app_main.capp_main.c 承载主程序循环,并定义和初始化系统资源、队列、计时器等。
app_start.capp_start.c 管理 JN516x/7x 芯片启动,调用初始化函数并启动主程序循环。
app_coordinator.capp_coordinator.c 承载应用程序和基本设备回调的事件处理程序。在基础设备完成任何所需的处理后,基础设备回调接收基础设备事件和 AF 堆栈事件。然后这些事件可以由应用程序进一步处理。事件包括传递给 ZCL 以进行处理和网络管理事件(例如“网络形成”和“新节点已加入”)的数据指示,以便让应用程序了解网络状态。处理应用程序事件队列以接收按钮按下事件。
app_zcl_task.capp_zcl_task.c 托管特定于设备的 ZCL 初始化和回调函数。 ZCL 回调将收到的 ZCL 命令和响应的结果通知应用程序,以便应用程序可以采取适当的操作。 ZCL 滴答定时器用于为 ZCL 提供滴答以管理与定时器相关的事件或状态转换。
app_serial_commands.capp_serial_commands.c 提供串行接口的命令解释器 - 在适当的情况下,串行命令创建应用程序按钮按下事件以触发所需的操作。
uart.cuart.c 接收并处理串行接口上​​传输的字符。
irq_JN516x.sirq_JN516x.s 定义支持和服务哪些 JN516x 硬件中断,以及优先级。这是由两个表定义的 - 一个中断优先级表和一个处理程序函数表。该文件不用于 JN517x。
bdb_options.hbdb_options.h 定义基本设备使用的参数,例如主要和次要通道掩码。
zcl_options.hzcl_options.h 定义了 ZCL 的特性,例如支持哪些集群,是客户端还是服务器,以及支持哪些可选命令和属性。所选集群的必需命令和属性将自动包含在内。

① 命令行构建选项

以下命令行选项可用于配置构建的设备:

命令描述
JENNIC_CHIP_FAMILY=JN516x为 JN516x 微控制器构建
JENNIC_CHIP_FAMILY=JN517x用于构建 JN517x 微控制器
JENNIC_CHIP=JN5169为 JN5169 微控制器构建
JENNIC_CHIP=JN5168为 JN5168 微控制器构建
JENNIC_CHIP=JN5164为 JN5164 微控制器构建
JENNIC_CHIP=JN5179为 JN5179 微控制器构建
JENNIC_CHIP=JN5178为 JN5178 微控制器构建
JENNIC_CHIP=JN5174为 JN5174 微控制器构建
DR=DR1199为基于 DR1199 扩展板的硬件构建(默认)
DR=DONGLE为基于 USB 加密狗的硬件构建
GROUPS=0构建以便绑定命令使用单播传输
GROUPS=1构建以便绑定命令使用组播传输
ICODES=0进行构建,以便不使用安装代码
ICODES=1进行构建,以便使用安装代码

5、路由器应用代码

本节列出并描述了路由器应用程序代码的源文件,这些文件在应用程序的源目录中提供。 您可能希望使用此代码作为您自己的应用程序开发的基础。

文件名描述
app_main.capp_main.c 承载主程序循环,并定义和初始化系统资源、队列、计时器等。
app_start.capp_start.c 管理 JN516x/7x 芯片启动,调用初始化函数并启动主程序循环。
app_router_node.capp_router_node.c 承载应用程序和基本设备回调的事件处理程序。在基础设备完成任何所需的处理后,基础设备回调接收基础设备事件和 AF 堆栈事件。然后这些事件可以由应用程序进一步处理。事件包括传递给 ZCL 以进行处理和网络管理事件(例如“网络形成”和“新节点已加入”)的数据指示,以便让应用程序了解网络状态。处理应用程序事件队列以接收按钮按下事件。
app_zcl_task.capp_zcl_task.c 托管特定于设备的 ZCL 初始化和回调函数。 ZCL 回调将收到的 ZCL 命令和响应的结果通知应用程序,以便应用程序可以采取适当的操作。 ZCL 滴答定时器用于为 ZCL 提供滴答以管理与定时器相关的事件或状态转换。
app_reporting.capp_reporting.c 为设备的报告功能提供支持。当收到配置报告命令时,它管理报告配置的恢复和任何更改的保存。
irq_JN516x.sirq_JN516x.s 定义支持和服务哪些 JN516x 硬件中断,以及优先级。这是由两个表定义的 - 一个中断优先级表和一个处理程序函数表。该文件不用于 JN517x。
bdb_options.hbdb_options.h 定义基本设备使用的参数,例如主要和次要通道掩码。
zcl_options.hzcl_options.h 定义了 ZCL 的特性,例如支持哪些集群,是客户端还是服务器,以及支持哪些可选命令和属性。所选集群的必需命令和属性将自动包含在内。

① 命令行构建选项

以下命令行选项可用于配置构建的设备:

命令描述
JENNIC_CHIP_FAMILY=JN516x为 JN516x 微控制器构建
JENNIC_CHIP_FAMILY=JN517x用于构建 JN517x 微控制器
JENNIC_CHIP=JN5169为 JN5169 微控制器构建
JENNIC_CHIP=JN5168为 JN5168 微控制器构建
JENNIC_CHIP=JN5164为 JN5164 微控制器构建
JENNIC_CHIP=JN5179为 JN5179 微控制器构建
JENNIC_CHIP=JN5178为 JN5178 微控制器构建
JENNIC_CHIP=JN5174为 JN5174 微控制器构建
ICODES=0进行构建,以便不使用安装代码
ICODES=1进行构建,以便使用安装代码
APP_NTAG_ICODE=0构建不支持 NTAG/NFC(ZigBee 安装代码格式)
APP_NTAG_ICODE=1构建 NTAG/NFC(ZigBee 安装代码格式)支持(这是默认选项)
APP_NTAG_AES=0构建不支持 NTAG/NFC(AES 加密格式)(这是默认选项)
APP_NTAG_AES=1使用 NTAG/NFC(AES 加密格式)支持构建

6、终端设备应用代码

本节列出并描述了终端设备应用程序代码的源文件,这些文件在应用程序的源目录中提供。 您可能希望使用此代码作为您自己的应用程序开发的基础。

文件名描述
app_main.capp_main.c 承载主程序循环,并定义和初始化系统资源、队列、计时器等。
app_start.capp_start.c 管理 JN516x/7x 芯片启动,调用初始化函数并启动主程序循环。
app_end_device_node.capp_end_device_node.c 承载应用程序和基本设备回调的事件处理程序。在基础设备完成任何所需的处理后,基础设备回调接收基础设备事件和 AF 堆栈事件。然后这些事件可以由应用程序进一步处理。事件包括传递给 ZCL 以进行处理和网络管理事件(例如“网络形成”和“新节点已加入”)的数据指示,以便让应用程序了解网络状态。处理应用程序事件队列以接收按钮按下事件。
app_zcl_task.capp_zcl_task.c 托管特定于设备的 ZCL 初始化和回调函数。 ZCL 回调将收到的 ZCL 命令和响应的结果通知应用程序,以便应用程序可以采取适当的操作。 ZCL 滴答定时器用于为 ZCL 提供滴答以管理与定时器相关的事件或状态转换。
irq_JN516x.sirq_JN516x.s 定义支持和服务哪些 JN516x 硬件中断,以及优先级。这是由两个表定义的 - 一个中断优先级表和一个处理程序函数表。该文件不用于 JN517x。
bdb_options.hbdb_options.h 定义基本设备使用的参数,例如主要和次要通道掩码。
zcl_options.hzcl_options.h 定义了 ZCL 的特性,例如支持哪些集群,是客户端还是服务器,以及支持哪些可选命令和属性。所选集群的必需命令和属性将自动包含在内。

① 命令行构建选项

以下命令行选项可用于配置构建的设备:

命令描述
JENNIC_CHIP_FAMILY=JN516x为 JN516x 微控制器构建
JENNIC_CHIP_FAMILY=JN517x为 JN517x 微控制器构建
JENNIC_CHIP=JN5169为 JN5169 微控制器构建
JENNIC_CHIP=JN5168为 JN5168 微控制器构建
JENNIC_CHIP=JN5164为 JN5164 微控制器构建
JENNIC_CHIP=JN5179为 JN5179 微控制器构建
JENNIC_CHIP=JN5178为 JN5178 微控制器构建
JENNIC_CHIP=JN5174为 JN5174 微控制器构建
GROUPS=0构建以便绑定命令使用单播传输
GROUPS=1构建以便绑定命令使用组播传输
ICODES=0进行构建,以便不使用安装代码
ICODES=1进行构建,以便使用安装代码
APP_NTAG_ICODE=0构建不支持 NTAG/NFC(ZigBee 安装代码格式)
APP_NTAG_ICODE=1构建 NTAG/NFC(ZigBee 安装代码格式)支持(这是默认选项)
APP_NTAG_AES=0构建不支持 NTAG/NFC(AES 加密格式)(这是默认选项)
APP_NTAG_AES=1使用 NTAG/NFC(AES 加密格式)支持构建

五、IO 说明

1、按键 IO

按键接口代码在 Common/Source 文件夹下的 app_buttons.c / h 文件
在这里插入图片描述
在 app_buttons.h 文件内,可以看到按键 IO 的具体定义

#if (defined BUTTON_MAP_DR1199)
    #if (defined APP_NTAG_ICODE) || (defined APP_NTAG_AES)
        typedef enum {
            APP_E_BUTTONS_BUTTON_1 = 0,
            APP_E_BUTTONS_BUTTON_SW1,
            APP_E_BUTTONS_BUTTON_SW2,
            APP_E_BUTTONS_BUTTON_SW3,
            APP_E_BUTTONS_BUTTON_SW4,
            APP_E_BUTTONS_NFC_FD
        } APP_teButtons;
        #define APP_BUTTONS_NUM             (6UL)
        #if (JENNIC_CHIP_FAMILY == JN516x)
            #define APP_BUTTONS_BUTTON_1          (8)
            #define APP_BUTTONS_BUTTON_SW1        (11)
            #define APP_BUTTONS_BUTTON_SW2        (12)
            #define APP_BUTTONS_BUTTON_SW3        (17)
            #define APP_BUTTONS_BUTTON_SW4        (1)
            #define APP_BUTTONS_NFC_FD            (0)
        #elif (JENNIC_CHIP_FAMILY == JN517x)
            #define APP_BUTTONS_BUTTON_1          (4)
            #define APP_BUTTONS_BUTTON_SW1        (12)
            #define APP_BUTTONS_BUTTON_SW2        (13)
            #define APP_BUTTONS_BUTTON_SW3        (18)
            #define APP_BUTTONS_BUTTON_SW4        (5)
            #define APP_BUTTONS_NFC_FD            (17)
        #endif
        #define APP_BUTTONS_DIO_MASK                ((1 << APP_BUTTONS_BUTTON_1) | (1 << APP_BUTTONS_BUTTON_SW4) | (1 << APP_BUTTONS_BUTTON_SW3) | (1 << APP_BUTTONS_BUTTON_SW2) | (1 << APP_BUTTONS_BUTTON_SW1) | (1 << APP_BUTTONS_NFC_FD))
        #define APP_BUTTONS_DIO_MASK_FOR_DEEP_SLEEP (                              (1 << APP_BUTTONS_BUTTON_SW4)| (1 << APP_BUTTONS_BUTTON_SW3)  | (1 << APP_BUTTONS_BUTTON_SW2) | (1 << APP_BUTTONS_BUTTON_SW1) | (1 << APP_BUTTONS_NFC_FD))
    #else
        typedef enum {
            APP_E_BUTTONS_BUTTON_1 = 0,
            APP_E_BUTTONS_BUTTON_SW1,
            APP_E_BUTTONS_BUTTON_SW2,
            APP_E_BUTTONS_BUTTON_SW3,
            APP_E_BUTTONS_BUTTON_SW4,
        } APP_teButtons;

        #define APP_BUTTONS_NUM             (5UL)
        #if (JENNIC_CHIP_FAMILY == JN516x)
            #define APP_BUTTONS_BUTTON_1          (8)
            #define APP_BUTTONS_BUTTON_SW1        (11)
            #define APP_BUTTONS_BUTTON_SW2        (12)
            #define APP_BUTTONS_BUTTON_SW3        (17)
            #define APP_BUTTONS_BUTTON_SW4        (1)
        #elif (JENNIC_CHIP_FAMILY == JN517x)
            #define APP_BUTTONS_BUTTON_1          (4)
            #define APP_BUTTONS_BUTTON_SW1        (12)
            #define APP_BUTTONS_BUTTON_SW2        (13)
            #define APP_BUTTONS_BUTTON_SW3        (18)
            #define APP_BUTTONS_BUTTON_SW4        (5)
        #endif
        #define APP_BUTTONS_DIO_MASK        ((1 << APP_BUTTONS_BUTTON_1)|(1 << APP_BUTTONS_BUTTON_SW4)|(1 << APP_BUTTONS_BUTTON_SW3) | (1 << APP_BUTTONS_BUTTON_SW2) | (1 << APP_BUTTONS_BUTTON_SW1))
        #define APP_BUTTONS_DIO_MASK_FOR_DEEP_SLEEP        ((1 << APP_BUTTONS_BUTTON_SW4)|(1 << APP_BUTTONS_BUTTON_SW3) | (1 << APP_BUTTONS_BUTTON_SW2) | (1 << APP_BUTTONS_BUTTON_SW1))
     #endif
#elif (defined BUTTON_MAP_DR1175)
    #if (defined APP_NTAG_ICODE) || (defined APP_NTAG_AES)
        typedef enum {
            APP_E_BUTTONS_BUTTON_1 = 0,
            APP_E_BUTTONS_NFC_FD
        } APP_teButtons;
        #define APP_BUTTONS_NUM                 (2UL)
        #if (JENNIC_CHIP_FAMILY == JN516x)
            #define APP_BUTTONS_BUTTON_1        (8)
            #define APP_BUTTONS_NFC_FD          (0)
        #elif JN5169 ZigBee 3.0 协议栈之 ZigBee 网络参数

JN5169 ZigBee 3.0 协议栈之 ZPS 配置编辑器

JN5169 NXP ZigBee PRO 无线网络应用所需的常见操作

在 BeyondStudio for NXP 使用 Gawk(for JN5169)

在 BeyondStudio for NXP 使用 Gawk(for JN5169)

在 BeyondStudio for NXP 使用 Gawk(for JN5169)