jn5168 zigbee协议栈固定位置存放installation code

硬件平台:JN5168(周立功ZM5168P2模块)

开发IDE:JN-SW-4041-SDK-Toolchain-v1.1

协议栈:JN-SW-4064-ZigBee-SmartEnergy1.x-v993

应用层:JN-AN-1135-Smart-Energy-HAN-Solutions 4v2


在项目中用到了ZSE协议栈,由于每个jn5168模块需要使用不同的installation code,大量生产时又不可能每个模块都先编译一次再烧写,所以最好的办法是在生产时用一个公版固件,烧写前替换公版固件里的installation code生成一个新的固件然后烧进去。

替换installation code就需要它在固件里的存放位置是固定的,如果只是定义一个全局数组来存放installation code那么每次代码编译链接地址就有可能发生改变,这样每次都需要确定installation code在固件里的地址才能进行替换,比较麻烦而且容易出错。解决办法就是定义一个固定的段来存储installation code,这样无论代码进行怎样的改动编译,installation code在固件里的位置都不会改变。

使用固定段两种方法:

方法一:我们自己定义一个名为ro_install的段

1. 在任意源文件中定义:

PUBLIC uint8 installation_code[8]  __attribute__ ((section (".ro_install"))) = {

                 //installation_code 数组对应.ro_install这个段

0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb
};


2. 修改makefile在  -j .ro_se_cert 后面添加 -j .ro_install  有两处


3. 修改D:\project\Jennic\Stack\SE\Build\AppBuildSEZBProDep_JN5168.ld 在


        /* start location 0x54 */
        .ro_mac_address (ALIGN((. - _enc_offset), 16) + _enc_offset):
        {
        _FlsMACAddress = ABSOLUTE(.);
        *(.ro_mac_address) /* Mac Address 8 bytes*/
        . = ALIGN (0x10);
        } > flash  


之后添加      
        
        .ro_install (ALIGN((. - _enc_offset), 16) + _enc_offset):
        {
        _FlsMACAddress = ABSOLUTE(.);
        *(.ro_install) /* installation code 8 bytes*/
        . = ALIGN (0x10);
        } > flash   


方法二:使用协议栈已经定义好的段

由于协议栈没有使用.ro_se_customData这个段,所以我们可以用它来存放install code
在任意源文件中定义:

PUBLIC uint8 installation_code[]  __attribute__ ((section (".ro_se_customData"))) = {
0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb
};


在程序的其它地方就可以通过installation_code这个数组来使用。定义好之后编译工程,然后通过ultraEdit等16进制编辑器打开生成的bin文件然后搜索aa ff ff ff ff ff ff bb就得到了installation code在固件中的地址然后替换它就可以了。

在生产时可以在治具上位机系统上写程序打开存储installation code的文件,读出一个替换一次公版固件然后再烧写,这样就可以自动替换烧写。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值