JN5169 JN-AN-1217-Zigbee-3-0-Base-Device
- 一、JN-AN-1217 介紹
- 二、設備描述
- 1、路由器
- ① 路由器功能
- ② 組建或加入網路
- a、使用網路引導加入現有網路
- b、使用 NFC 加入現有網路
- c、組建分布式網路
- ③ 允許其他設備加入網路
- ④ 系結設備
- ⑤ 操作設備
- ⑥ 重新加入網路
- ⑦ 恢復出廠設定
- 2、協調器
- ① 協調器功能
- ② 組建網路
- ③ 允許其他節點加入
- ④ 系結節點
- ⑤ 操作設備
- ⑥ 重新加入網路
- ⑦ 恢復出廠設定
- ⑧ 串行介面命令匯總
- 3、終端設備
- ① 終端設備功能
- ② 加入網路
- a、使用網路引導加入現有網路
- b、使用 NFC 加入現有網路
- ③ 允許其他設備加入網路
- ④ 系結設備
- ⑤ 操作設備
- ⑥ 重新加入網路
- ⑦ 恢復出廠設定
- 三、安裝代碼
- 四、使用應用說明進行開發
- 1、通用代碼
- 2、NTAG 檔案夾(AES 格式)
- 3、NFC 檔案夾(ZigBee 安裝代碼格式)
- 4、協調器應用代碼
- ① 命令列構建選項
- 5、路由器應用代碼
- ① 命令列構建選項
- 6、終端設備應用代碼
- ① 命令列構建選項
- 五、IO 說明
- 1、按鍵 IO
- 2、USB Dongle LED IO
- 3、路由器 White LEDs IO
- 4、IO 使用一覽表(JN516x)
- 六、開啟串口除錯輸出
一、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、使用網路引導加入現有網路
一旦網路開放以接受新加入者(網路上的設備的網路轉向),出廠新路由器就可以加入現有網路, 這是通過以下方式實作的:
- 在已經在網路上的設備之一上觸發網路轉向,
- 然后重置(使用 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 作為目標觸發,請執行以下操作:
- 按下所有目標設備載板上的 DIO8/GPIO4 按鈕(同一個按鈕也用于啟動 Network Steering),
- 在啟動器設備上開始查找和系結,
這將導致路由器自我識別 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”
⑧ 串行介面命令匯總
| 按鈕 | 串行命令 | 操作 |
|---|---|---|
| SW1 | Toggle | 向系結設備發送 OnOff Toggle 命令 |
| SW2 | Steer | 觸發網路上設備的網路轉向 |
| SW3 | Form | 為不在網路上的設備觸發網路形成 |
| SW4 | Find | 觸發查找和系結作為發起者 |
| Reset+DIO8 | Factory Reset | 將設備恢復出廠設定,擦除持久資料 |
| Reset | Soft Reset | 觸發軟體復位(不丟失資料) |
| - | 將 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、使用網路引導加入現有網路
一旦網路開放以接受新加入者(網路上的設備的網路轉向),出廠新的終端設備就可以加入現有網路, 這是通過以下方式實作的:
- 在已經在網路上的設備之一上觸發網路轉向,
- 按下終端設備的 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.zpscfg | App.zpscfg 是 ZigBee 堆疊的組態檔, 對于應用程式中的每個設備,它定義了所有必需的堆疊引數、表大小、服務器等,該檔案作為構建程序的一部分進行處理,并創建要構建到每個設備中的特定于設備的源檔案, |
| app_buttons.c | app_buttons.c 提供了一個介面來讀取擴展板上的開關/按鈕并將按鈕按下事件發布到應用程式事件佇列, |
| app_events.h | app_events.h 包含應用程式事件的型別定義, |
| app_ntag_aes.c | app_ntag_aes.c 包含驅動 NFC 除錯資料交換并在從 NTAG 讀取有效資料時啟動加入程序的代碼, 此代碼使用較舊的 NTAG 資料格式,該格式采用 AES 加密并且未在默認版本中使用, |
| app_ntag_icode.c | app_ntag_icode.c 包含驅動 NFC 除錯資料交換并在從 NTAG 讀取有效資料時啟動加入程序的代碼, 此代碼使用較新的 NTAG 資料格式,該格式采用 ZigBee 安裝代碼加密并用于默認構建, |
| app_pdm.c | app_pdm.c 為持久資料管理器 (PDM) 提供錯誤事件回呼,以便將 PDM 的狀態通知給應用程式, |
| PDM_IDs.h | PDM_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.c | app_main.c 承載主程式回圈,并定義和初始化系統資源、佇列、計時器等, |
| app_start.c | app_start.c 管理 JN516x/7x 芯片啟動,呼叫初始化函式并啟動主程式回圈, |
| app_coordinator.c | app_coordinator.c 承載應用程式和基本設備回呼的事件處理程式,在基礎設備完成任何所需的處理后,基礎設備回呼接識訓礎設備事件和 AF 堆疊事件,然后這些事件可以由應用程式進一步處理,事件包括傳遞給 ZCL 以進行處理和網路管理事件(例如“網路形成”和“新節點已加入”)的資料指示,以便讓應用程式了解網路狀態,處理應用程式事件佇列以接收按鈕按下事件, |
| app_zcl_task.c | app_zcl_task.c 托管特定于設備的 ZCL 初始化和回呼函式, ZCL 回呼將收到的 ZCL 命令和回應的結果通知應用程式,以便應用程式可以采取適當的操作, ZCL 滴答定時器用于為 ZCL 提供滴答以管理與定時器相關的事件或狀態轉換, |
| app_serial_commands.c | app_serial_commands.c 提供串行介面的命令解釋器 - 在適當的情況下,串行命令創建應用程式按鈕按下事件以觸發所需的操作, |
| uart.c | uart.c 接收并處理串行介面上??傳輸的字符, |
| irq_JN516x.s | irq_JN516x.s 定義支持和服務哪些 JN516x 硬體中斷,以及優先級,這是由兩個表定義的 - 一個中斷優先級表和一個處理程式函式表,該檔案不用于 JN517x, |
| bdb_options.h | bdb_options.h 定義基本設備使用的引數,例如主要和次要通道掩碼, |
| zcl_options.h | zcl_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.c | app_main.c 承載主程式回圈,并定義和初始化系統資源、佇列、計時器等, |
| app_start.c | app_start.c 管理 JN516x/7x 芯片啟動,呼叫初始化函式并啟動主程式回圈, |
| app_router_node.c | app_router_node.c 承載應用程式和基本設備回呼的事件處理程式,在基礎設備完成任何所需的處理后,基礎設備回呼接識訓礎設備事件和 AF 堆疊事件,然后這些事件可以由應用程式進一步處理,事件包括傳遞給 ZCL 以進行處理和網路管理事件(例如“網路形成”和“新節點已加入”)的資料指示,以便讓應用程式了解網路狀態,處理應用程式事件佇列以接收按鈕按下事件, |
| app_zcl_task.c | app_zcl_task.c 托管特定于設備的 ZCL 初始化和回呼函式, ZCL 回呼將收到的 ZCL 命令和回應的結果通知應用程式,以便應用程式可以采取適當的操作, ZCL 滴答定時器用于為 ZCL 提供滴答以管理與定時器相關的事件或狀態轉換, |
| app_reporting.c | app_reporting.c 為設備的報告功能提供支持,當收到配置報告命令時,它管理報告配置的恢復和任何更改的保存, |
| irq_JN516x.s | irq_JN516x.s 定義支持和服務哪些 JN516x 硬體中斷,以及優先級,這是由兩個表定義的 - 一個中斷優先級表和一個處理程式函式表,該檔案不用于 JN517x, |
| bdb_options.h | bdb_options.h 定義基本設備使用的引數,例如主要和次要通道掩碼, |
| zcl_options.h | zcl_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.c | app_main.c 承載主程式回圈,并定義和初始化系統資源、佇列、計時器等, |
| app_start.c | app_start.c 管理 JN516x/7x 芯片啟動,呼叫初始化函式并啟動主程式回圈, |
| app_end_device_node.c | app_end_device_node.c 承載應用程式和基本設備回呼的事件處理程式,在基礎設備完成任何所需的處理后,基礎設備回呼接識訓礎設備事件和 AF 堆疊事件,然后這些事件可以由應用程式進一步處理,事件包括傳遞給 ZCL 以進行處理和網路管理事件(例如“網路形成”和“新節點已加入”)的資料指示,以便讓應用程式了解網路狀態,處理應用程式事件佇列以接收按鈕按下事件, |
| app_zcl_task.c | app_zcl_task.c 托管特定于設備的 ZCL 初始化和回呼函式, ZCL 回呼將收到的 ZCL 命令和回應的結果通知應用程式,以便應用程式可以采取適當的操作, ZCL 滴答定時器用于為 ZCL 提供滴答以管理與定時器相關的事件或狀態轉換, |
| irq_JN516x.s | irq_JN516x.s 定義支持和服務哪些 JN516x 硬體中斷,以及優先級,這是由兩個表定義的 - 一個中斷優先級表和一個處理程式函式表,該檔案不用于 JN517x, |
| bdb_options.h | bdb_options.h 定義基本設備使用的引數,例如主要和次要通道掩碼, |
| zcl_options.h | zcl_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 (JENNIC_CHIP_FAMILY == JN517x)
#define APP_BUTTONS_BUTTON_1 (4)
#define APP_BUTTONS_NFC_FD (17)
#endif
#define APP_BUTTONS_DIO_MASK ((1 << APP_BUTTONS_BUTTON_1) | (1 << APP_BUTTONS_NFC_FD))
#define APP_BUTTONS_DIO_MASK_FOR_DEEP_SLEEP ( (1 << APP_BUTTONS_NFC_FD))
#else
typedef enum {
APP_E_BUTTONS_BUTTON_1 = 0
} APP_teButtons;
#define APP_BUTTONS_NUM (1UL)
#if (JENNIC_CHIP_FAMILY == JN516x)
#define APP_BUTTONS_BUTTON_1 (8)
#elif (JENNIC_CHIP_FAMILY == JN517x)
#define APP_BUTTONS_BUTTON_1 (4)
#endif
#define APP_BUTTONS_DIO_MASK (1 << APP_BUTTONS_BUTTON_1)
#endif
#else
#error "define a button map for the hardware"
typedef enum {
APP_E_BUTTONS_BUTTON_1
} APP_teButtons;
#define APP_BUTTONS_NUM (1UL)
#define APP_BUTTONS_BUTTON_1 (17)
#define APP_BUTTONS_DIO_MASK (1 << APP_BUTTONS_BUTTON_1)
#endif
typedef enum {
E_INTERRUPT_UNKNOWN,
E_INTERRUPT_BUTTON,
E_INTERRUPT_WAKE_TIMER_EXPIRY
} teInterruptType;
從代碼中可以看出,當芯片為 JN516x 時,定義了 BUTTON_MAP_DR1199 且關閉 NFC 和 AES 時,按鍵 IO 定義為:

BUTTON_MAP_DR1199 宏定義在每個專案檔案夾的 Build 檔案夾下的 Makefile 檔案,下面以協調器的為例:


需要開啟編譯命令支持:

2、USB Dongle LED IO
僅協調器支持 USB Dongle 板,USB Dongle 有兩個 LED,表示創建網路狀態和是否允許加入網路,


3、路由器 White LEDs IO
路由器 DR 為 DR1175 !!!

打開 app_led_interface.c 檔案

從代碼中可以看出,RGB_LED 和 White_LED 是以介面形式提供的,

按 F3 跳轉到函式宣告,這是 JN-SW-4170 SDK 提供的庫函式,

根據 SDK 我們找到 PlatformDIOAssignments.h 檔案

從 PlatformDIOAssignments.h 我們可以知道,當使用的是 JN516x 芯片時,WHITE_LED_TIMER 使用的是定時器 3 的 PWM 輸出,由此可知,路由器 White LEDs IO 為 DIO13,

4、IO 使用一覽表(JN516x)
| DIO | DR1199通用板 | DR1175點燈/傳感器 | USB Dongle |
|---|---|---|---|
| DIO0 | |||
| DIO1 | SW4 | ||
| DIO2 | |||
| DIO3 | |||
| DIO4 | |||
| DIO5 | |||
| DIO6 | |||
| DIO7 | |||
| DIO8 | BUTTON_1 | ||
| DIO9 | |||
| DIO10 | |||
| DIO11 | SW1 | ||
| DIO12 | SW2 | SHT1x (HTS):HTS_DATA | |
| DIO13 | 3個高亮白色LED | ||
| DIO14 | NFC I2C:SIF_CLK | PCA9634三色燈I2C:SIF_CLK | |
| DIO15 | NFC I2C:SIF_D | PCA9634三色燈I2C:SIF_D | |
| DIO16 | PCA9634_OE | LED_NWK_FORMED | |
| DIO17 | SW3 | SHT1x (HTS):HTS_CLK | LED_PERMIT_JOIN |
六、開啟串口除錯輸出
串口除錯輸出宏定義在每個專案檔案夾的 Build 檔案夾下的 Makefile 檔案,下面以協調器的為例:

只需要取消相應的注釋,重新編譯工程,燒錄程式,即可在串口列印相關的除錯資訊,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287681.html
標籤:其他
下一篇:簡易霓虹燈控制器
