CC2530芯片的IEEE Mac地址

        2.4G的CC253X芯片由TI公司生产,可以很容易建立在基于IEEE802.15.4标准协议上面,现今多数Zigbee传感节点都是用CC253X的芯片。

        CC253X的IEEE地址共分为三种:Primary IEEE, Secondary IEEE和Random IEEE。其中Primary IEEE地址在生产时已经由TI预先确定,无法更改,而对于Secondary IEEE地址用户则可以更改,如果无法获取Primary IEEE 和 Secondary IEEE时,则会是用第三种随机地址来代替自己的Mac地址。

(1)Primary IEEE

      首先了解一下芯片Flash Information Page ,芯片存储闪存数据信息的起始地址为0x7800,所以在ioCC2530.h头文件中定义的Flash Information Page的起始位置,#define P_INFOPAGE  PXREG( 0X7800 ),

另外,Primary IEEE地址就存储在该page中,其存储的位置偏移量为0xC, 所以要拿到Primary IEEE的地址,只需

uint8 *macaddrptr = (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET);
for(int i=0;i<8;i++)
{
     devmacaddr[i] = macaddrptr[i];
}

 其中P_INFOPAGE = 0x7800,即存储地址的起始位置,HAL_INFOP_IEEE_OSET为0xC,是地址存放位置的偏移量,因为地址为8个字节,所以读取向后读取8个字节就是其Mac地址。

(2)Secondary IEEE

       根据CC253X的数据手册,Secondary IEEE存放在flash的最后偏移量为0x18(24)的地方,对于F-256的CC253X,其flash有256K,即246*1024=262144字节,所以其地址存放在262144-24=262120=0x3FFE8的位置,因为地址长度为8个字节,所以地址的范围为0x3FFE8~0x3FFEF。

获取地址的函数:

HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);

 其中HAL_FLASH_IEEE_PAGE = 127,即最后一页,HAL_FLASH_IEEE_OSET = (2048-16-8)=2024,即偏移量。由于是最后一页,所以要对MEMCTR(存储控制寄存器)进行控制。具体代码如下:

void HalFlashRead(uint8 pg, uint16 offset, uint8 *buf, uint16 cnt)
{
  // Calculate the offset into the containing flash bank as it gets mapped into XDATA.
  uint8 *ptr = (uint8 *)(offset + 0x8000) + ((pg % 16) * 2048);//每块的为16页,((pg % 16) *                                                               //  2048)求出最后一块中地址                                                                //所在那一页之前的所有地址,                                                               //加上地址所在那一页的偏移量
  uint8 memctr = MEMCTR;  // Save to restore.

  pg /= HAL_FLASH_PAGE_PER_BANK;  // Calculate the flash bank from the flash page.

  // Calculate and map the containing flash bank into XDATA.
  MEMCTR = (MEMCTR & 0xF8) | pg;   //将存储控制器指向最后一块
  while (cnt--)
  {
    *buf++ = *ptr++;
  }
  MEMCTR = memctr;

}

 

猜你喜欢

转载自qu66q.iteye.com/blog/2084481