This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
环境、我有一个 CC2538通过 USB 连接至运行 Yocto Linux 的单板计算机的定制板。 所有依赖项(protobuf)均已安装、并且 TI Linux 网关应用程序以及演示应用已编译并运行。
CC2538正在运行以下固件:
/ti/Zigbee_3_0_Linux_Gateway_ 1_0_1/Firmware/ZNP/CC2538_GW_ZNP_EM_Standalone_USB.hex
可在以下固件版本的路径/dev/ttyACM0中找到它
```
root:tools#./gw_soc_fw_version_query.bin /dev/ttyACM0
使用串行端口:/dev/ttyACM0
收到的系统版本。
传输协议版本:2
产品 ID:0
软件版本:2.7.2
软件版本:0
(未指定版本)
```
我已修改 NPI_Gateway.cfg 以具有此器件路径和 config.ini 以将 permit_join 设置为1、并将 PAN ID 设置为0x1337。
演示应用和其他应用中的所有内容看起来都很好、但当我在演示应用中按下"P"以允许加入时、我的路由器设备都无法加入网络。
我将 CC2531 USB 软件狗设置为数据包监听器、让它看同一个通道、这就是我的 CC2538中的所有信标所呈现的样子。
它看起来像一把抽烟枪,协会许可证总是错误的,即使在我按下演示应用程序中的"P"后,信标被发送几秒钟,以允许加入,并在 config.in 中让 permit_join=1。
起初、我认为问题是关键和安全问题、或者设备位于不同的通道上、或者 PAN ID 在某个位置设置错误。 但这个问题是将一切东西都立即从栅极上停止。
演示应用和 TI 堆栈非常复杂、我不确定从何处查看需要更改哪些内容来强制启用加入许可。
海恩斯、您好!
请首先确认您已执行 Zigbee_3_0_Linux1_0_1\Documents\Z-Stack Linux_Gateway_网关-快速入门指南和用户指南中的所有步骤。 本地网关样例应用程序屏幕和日志显示的所有内容都正确无误。 您甚至可以观察到[SEND] 05:25:36:02:00:00:3C:01 Returns [SRSP] 01:65:36:00、这是 ZDO_MGMT_permit_Join_Req Monitor and Test API的预期。 这可能是 CC2538固件或器件的问题。 您使用的是什么 CC2538封装以及您是否曾使用 CC2538EMK 进行过测试? 在对 ZNP 固件进行编程之前、您是否确保擦除所有器件存储器? 尝试查看是否可以使用 Z-Tool 构建 Zigbee 网络并使用现有 ZNP 固件和定制板加入器件、以下是 社区成员提供的博客说明。
此致、
瑞安
感谢您的建议、我取得了一些进展。
该电路板使用 CC2538SF53RTQT。
我没有使用 CC2538EMK、 一些早期开发是使用相同的单板计算机(在开发板上)和 CC2531 USB 软件狗完成的。 不过、我们使用的 CC2538的布局基于此处的 CC2538EMK 布局。
https://www.ti.com/lit/df/tidr187/tidr187.pdf?ts = 1712675466113
现在来看进度。
我使用相同的 ZNP hex 文件重新刷入 CC2538、然后重新启动 TI Linux 网关和演示应用。 在演示应用程序上按"P"后、我非常高兴看到我的路由器设备(以及 Bee 3)加入我的 CC2552网络。
在浏览过监听器的日志后,我发现信标中的关联许可位瞬间为真,这最终允许我的 XBee 加入。 之后的密钥交换很顺利、之后几分钟内链路状态更新了。
然后,在没有任何改变的情况下,我从网络中移除了 XBee 路由器,重新启动了所有的事情,并尝试复制该过程。 又失败了...
从那时起,我只看到关联许可是假的。
因此、我继续进行了故障排除、并获得了更多可证实您怀疑根本原因与 CC2538上的固件有关的观察结果。
我看到的另一件奇怪的事情是、
在 config.ini 中、当我更改 PAN ID (例如、从0x1337更改为0x1338)。 演示应用始终会将 PAN ID 显示为0x1337、即使在重新启动 CC2538和我的单板计算机后也是如此。
更改 PAN ID 的唯一方法是完全重新刷新 CC2538、然后运行 TI Linxux Zigbee Stack。 不过、之后我无法更改、除非我再次重新刷写 CC2538。
这 意味着 CC2538中有一些非易失性存储器、而程序 ROM 除外、它会卡在特定值(因此、对其进行刷新是唯一的更改方法)。
这似乎与我的关联许可问题有关。 我可以想象、有一个变量存储在非易失性存储器中、无论 TI Linux Zigbee Stack 发送什么命令、都会导致加入许可卡在0。
我的选项
我可以考虑两种方法来解决这个问题:
1.使用不使用非易失性存储器的版本重新编译 ZNP 源代码。 (我对每次下电上电后从干净电源开始的一切都很满意。 但是、我从未使用过 ZNP 源代码、甚至没有安装 TI 的 IDE、这会给我带来更多的开发风险。
2.使用 TI Linux Zigbee 堆栈中的某种命令来重置 CC2538非易失性存储器中的所有内容。 如果 Z-tool 可以在 Linux 下运行、可以通过 API 进行实验、查看是否存在这样的命令、但不使用 Z-tool 则更为繁琐。 我无法轻松地将电路板的 USB 信号连接到 Windows 机器以使用那里的 Z-tool。
这 意味着在 CC2538中除了程序 ROM 之外、有一些非易失性存储器卡在特定值(因此重新刷新它是更改它的唯一方法)。 [/报价]我认为是正确的、"重新启动一切"会导致 CC2538 ZNP 器件和 Linux 主机之间的非易失性(NV)闪存设置不一致。
1.这需要您下载 Z-stack 3.0.2并 在 IAR EWARM 8.22.1中编译\projects\ZStack\ZNP\CC2538应用程序、同时从 znp.cfg 中删除 NV_RESTORE
2.具有 ID 0x03 (ZCD_NV_STARTUP_OPTION)和值0x03后跟 SYS_RESET 类型0x00的 SYS_OSAL_NV_WRITE 将清除 CC2538 ZNP NV 存储器。 我在前面提供的链接中进一步详细说明了这一点。 您可以 修改 ZNP_MISC.c osal_nv_write 和 znpReset 用法以满足您的需求。
此致、
瑞安
非常感谢、您对1的建议。 为我做到了。
我在 ZNP_MIC.c 中修改了 znpReset、始终执行硬复位并清除非易失性存储器(Hackish、但我稍后会尝试不太激进的方法)。
然后、我修改了 osal_ZStack_server_znp.c、以便在调用 zspbInit (taskID++)之前调用 znpReset (1、1、0)。
我一定是在演示应用中发现了一些问题,因为配对的 XBee 路由器不再出现在设备列表中;但是,我可以看到,它已经根据自己的关联指示和我的监听器捕获的流量加入了网络。 (无论如何、我不需要演示应用程序长期使用)。
我相信还会有其他困难、但这可以解决我遇到的直接问题。
另外、对于任何将来的观众 、为了如何 加入 Xbee 3 (或者运行完整 ZigBee 堆栈的类似 XBee)与 TI 协调员来说、这些都是要在 Xbee 上使用的 AT 设置。
https://www.digi.com/support/knowledge-base/zigbee-home-automation
最重要的是使 ZS = 2。
此外、XBee 的 Pan ID 应按反向字节序设置为您的 TI 协调员的 EXTPANID
对我来说:
我需要在 XBee 中将我的 ID 参数设置为以下内容:
或者只需设置 ID=0并允许 Xbee 加入任何网络、然后检查 OP at 参数以查看操作 PAN ID 是什么。