NXP

小米39元 无线开关破解(NXP JN5169 zigbee开发实战)

2019-07-12 11:29发布

class="markdown_views prism-atom-one-light">

前言

话说小米的39元无线开关,买了两个回来,想着说zigbee alliance的规范规定各家的zigbee应该都是在协议栈ZCL层面兼容的,没想到必须配小米的网关才能使用,而且网关价格不菲,就心想能不能破解一下,实现脱离网关控制灯具开关。
直接拿小米的无线开关,ubiqua抓取了一下空中无线数据包,发现默认是工作在11信道上,而且TCLK不用说了用的zigbee alliance推荐的。又测试了一下能否加入TI CC2538协调器创建的网络,是可以加入的,但是没有key exchange动作,基本表明小米是给予zigbee Pro 2.x版本开发的,并不是最新的3.0协议栈。加入以后按一下面板上按键,只能发出Basic cluster的report attribute,奇怪的是按下和弹起分别发送一次report attribute,不解为何这样做,不费电吗。
另外发现有一颗电阻没有作用,但是还是贴着,出货量非常大的情况下,这不都是成本吗

实现目的

  • 目的非常简单,我们知道,zigbee除了单播模式之外,还有组播和广播,笔者就想让小米无线开关工作在组播模式,并且分组号还可以配置,这样就完全可以脱离网关了,但是空中抓包分析发现,小米默认report attribute的时候,目的短地址是0x0000,也就是协调器的地址,所以必须网关来转发数据。

开发准备工作

  • 先盗两张外观图:
    背面带外壳图
正面不带外壳图
  • 再上硬件线序图
    在这里插入图片描述
  • 固件烧写方法是,把ISP脚和地短接然后上电,就直接进入ISP模式了,使用NXP提供的JN51xxProgrammer.exe命令行烧写工具就可以烧写固件了,熟悉ISP机制的朋友都不陌生)

NXP JN5169 2.x协议栈开发

  • 提起zigbee,目前网上多数都是关于在TI平台开发的资料,在NXP平台开发的几乎没有,不知道为什么如此冷门,貌似NXP的技术支持也不像TI e2e那样简单易用。
笔者开始时尝试了最新的NXP 3.0协议栈,似乎入网阶段有bug,导致无法入网,暂时放弃,直接使用2.x协议栈进行开发(NXP jn5169开发环境搭建见链接,2.x盒和3.0搭建方式一样),前后断断续续花了5天时间,搞定了最新的固件,直接烧写进去,完全可以组播控制了,也不需要网关。