AnsweredAssumed Answered

Managing MAC addresses for your ZigBee/802.15.4 product

Question asked by Alan Led Collins Rivera Employee on Sep 11, 2014

A common production challenge is to manage to load a unique MAC addresses to all your products. See below some recommendations about this topic:


You can save the MAC address in an external memory or in a space in Flash and implement a way to copy them to the 802.15.4 initialization. For instance, you can reserve some bytes in flash memory where to store them and then modify your application to always copy them from this section.


You could also simply modify the .bin file to always contain the MAC address and the rest of the parameters you want. You just need to look for the RAM structure where this data is stored (search for “delim”) and modify whatever you need. This can be done either manually or via a software/pc tool (like test tool). I have seen customers that simply modify the MAC address in the bin file by looking at the RAM structure. Once loaded, the board will have the MAC address set in the bin file.


On Page 4-12 of the ZRFETRM ( you will find the guidelines for providing an indirect way of updating parameters (loaded at test):


•     Modify the target S-record (application.s19) file before the application gets loaded to the device. The s19 file can be loaded via the BDM debug tool or other applications

•     Define the custom parameter NVM byte locations as 0xFF (unprogrammed NVM state) in the source, so that if the application image is preloaded to the NVM these bytes can be programmed later via a test utility program - the user must be sure to know the actual physical address(es) of the parameters to be written later

•     Load the parameters as a block after the target application image has been loaded - use a utility running in RAM to write the parameters as a block.


In other words, you may create a pointer to a certain Flash memory location where you will be saving the MAC address, and then you just change the source code to get this address from that memory location, instead of getting it from the “mDefaultValueOfExtendedAddress_c” definition. You could, for instance, implement a way to write the flash memory using the UART. Choosing the memory location that you will use is completely up to you.