微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Z-Stack 3.0 CC2538-ZNP 获取不到对的IEEE地址

Z-Stack 3.0 CC2538-ZNP 获取不到对的IEEE地址

时间:10-02 整理:3721RD 点击:

1、如题,谁能告诉我这个IEEE地址到底在哪个地址(从0x00200000偏移地址开始)藏着? 为什么zmain_ext_addr里面就获取不到对的地址呢? aExtendedAddress全局数据后面全部都是0x00,但是CC2538 ZNP工作都正常。

2、是不是根据编译出来的.hex文件烧进去不同,IEEE地址保存的位置就不同?

3、我用的是C:\Texas Instruments\Z-Stack 3.0.0\Projects\zstack\ZNP\CC2538\ZNP.eww工程,工作在UART模式

您可以参考论坛置顶贴内的说明 https://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx

在CC2530/CC2538/CC2630中分为两个IEEE地址,一个称为Primary IEEE地址,另外称为Secondary地址。Primary IEEE地址是存放在芯片的Information Page里面,这个地址是TI向IEEE协会购买的,每个芯片的地址都是唯一的。并且用户只能Read这个值,没办法擦除/修改。在协议栈中直接通过读地址可以获得 osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN)。 Secondary地址是存放在CC2530里的Flash最后一个Page里面,用户可以进行Read/Write. 通过函数HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);。

协议栈运行是,是如何选择Primary IEEE地址或者Secondary地址作为设备的MAC地址的,具体在函数zmain_ext_addr(void)操作。

1) 从NV中读取 IEEE地址,如果已经存在(都不为0xFF),就使用该地址作为MAC地址了。

2) 如果1)中没有,从Secondary IEEE地址存放位置读取,如果有(都不为0xFF),把该地址写入到NV中,以后就用该地址作为MAC地址了。

3) 如果2)中没有,从Primary IEEE地址存放位置读取,如果有(都不为0xFF),把该地址写入到NV中,以后就用该地址作为MAC地址了

4) 如果3)中没有,就随机产生一个64位的变量,写入到NV中,并作为MAC地址。

调试了两天,也问了e2e的YIkai Chen,他自己试了几次他说没问题,他还怀疑我的问题。我让Michael.Zhang也在CC2538 ZNP工程上试了,也发现了同样的问题,不过测试每次都要全部擦除,不然直接IAR debug调试NV是不会擦除的。

我想我已经描述的很清楚了,

e2e 连接:https://e2e.ti.com/support/wireless_connectivity/zigbee_6lowpan_802-15-4_mac/f/158/t/652262

这是CC2538 ZNP工程 ZMain.c源码文件里面的一个bug,分析一下zmain_ext_addr函数实现,就看出问题了,虽然从HAL_INFO_IEEE_ADDR可以读取到IEEE地址,但是4个高字节和4个低字节是反过来的,ZNP工程里面的代码,也没有进行调换,这样就写入到NV里面,那么IEEE地址一定前4个字节和后4个字节肯定颠倒了。

对比了TI2538ZNP和TI2538DB两个目录下的ZMain.c代码,以及注释,才知道有个叫IEEE OUI的东西。

这个bug解决方法也特别简单,把TI2538DB目录下的Zmain.c 拷贝到TI2538ZNP目录,重新编译,就这么简单解决了,但是一开始我是坚信TI给的示例代码肯定都是经过测试的,不会有问题,所以折腾了很久。

就问你坑不吭...哈哈

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top