How to get mac address of zigbee node
26 November 2014
How to get mac address of zigbee node
查阅资料可以知道,德州仪器公司对cc2530芯片mac地址做了约定,主要是以下几项:从Z-stack的NV中读取、从Second IEEE 的位置中寻找、在Primary IEEE 的位置寻找、由随机数产生器产生一个临时IEEE地址。
需要知道的是,CC2530芯片在TI出厂时已经预先烧写了 Primary IEEE address,并且不同的芯片基本可以保证MAC地址不同。所以对于一般应用,只需要从Primary IEEE地址中读取即可。 参考ZStack协议栈,只需要添加以下代码,就可以读取IEEE 地址:
uint8 *macaddrptr = (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET);
for(int i=0;i<8;i++)
{
devmacaddr[i] = macaddrptr[i];
}
其中
//device mac address
uint8 devmacaddr[8]; //保存设备MAC地址数组
如何以只读方式读取cc2530 mac 地址 下面简要分析一下代码,其中
/* Pointer to Start of Flash Information Page */
#define P_INFOPAGE PXREG( 0x7800 )
可以知道P_INFOPAGE是指向Flash信息存储页的指针,也就是信息存取区的首页地址。 如何以只读方式读取cc2530 mac 地址 其次,可以看到如下定义
#define HAL_INFOP_IEEE_OSET 0xC
这个就是IEEE地址在Flash信息存储页中的地址偏移量,通过加运算就可以计算出cc2530芯片的MAC(IEEE 地址)在Flash存储位置,这样子只需要通过赋值运算就可以读取到cc2530芯片64-bit的IEEE扩展地址。 如何以只读方式读取cc2530 mac 地址
打印IEEE地址
uint8 *macaddrptr = (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET);
uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
uint8 devmacaddr[8]; //保存设备MAC地址数组
for(int i=0;i<8;i++)
{
devmacaddr[i] = macaddrptr[i];
HalUARTWrite(0,&asc_16[devmacaddr[i]%256/16],1);
HalUARTWrite(0,&asc_16[devmacaddr[i]%16],1);
}
HalUARTWrite(0,"\n",1);
blog comments powered by Disqus