JN5169在IEE802.15.4协议上的在线升级问题 (一)

最近在NXP官网上看到了,使用JN51X内部flash存储两个app,然后选择一个合适的app运行,突发奇想,应该可以实现在线升级的功能,再进一步优化,直接实现OTA功能。

官网的例程链接https://www.nxp.com/cn/products/wireless/proprietary-ieee-802.15.4-based/support-resources-for-jn516x-mcus:SUPPORT-RESOURCES-JN516X-MCUS

JN=AN-1218里面的Doc有一个比较详细的操作文档,大概的意思就是,把\JN-AN-1228\Updated LD files\JN5169\Build里面的一个叫AppBuildStart.ld的文件替换正在使用的SDK包的文件,目前以我使用的是JN-SW-4163为例bstudio_nxp\sdk\JN-SW-4163\Chip\JN5169\Build 里面AppBuildStart.ld。

现在把工程加载到BeyondStdio开发环境里面,注意要把makefile文件修改一下,官网下载的直接是N-SW-4168,我们需要改成JN-SW-4163,然后选择JN5169编译下,如图:

如果编译不成功,说是有一个什么stack_size的没有定义,那就比较悲剧了,应该是开发环境没有配置好。好像先可以使用zigbee3.0的greenpower的例程编译后,就可以了,具体我也不太记得了。这里有一个可以编译通过的环境链接:

链接:https://pan.baidu.com/s/11EgsJUv43ZS8RIe1CHGYuQ 
提取码:gzwm 
 

 

-----------------------------------------------------------------------分割符号----------------------------------------------------------------------------------

说明环境配置是没有问题的了。

浏览程序之后你就会发现一个传说中的魔法字。

uint8 au8MagicBytes[16] = {
        0x12, 0x34, 0x56, 0x78,
        0x11, 0x22, 0x33, 0x44,
        0x55, 0x66, 0x77, 0x88,
        0x08, 0x01, 0x00, 0x00}; //这个是appID 就是根据这个调转的

这就是重中之重,在官方固化在JN5169的代码里面就是依靠这些来区别(在每一sector的开头12字节符合的话则说明这是一个app),flash是否存在一个可执行的app。上一个图

遗憾的是,官方并不把一些资料开源。但幸运的时我们可以载这例程序找到2个重要的函数

u32REG_SysRead(REG_SYS_FLASH_REMAP); //获取flash映射表

vLoadBootImage(uint32 u32AppId)//选择想要执行的app程序
JN5169里面一个有16个Sector,一个32k,一共刚好512k。这里请忽视该例程使用的指针直接获取flash里面的值。我们使用JN-UG-3087-JN516x Integrated Peripherals API 文档里面的。有关于flash的API。

这里比较有意思的是,官方的bool代码在调用vLoadBootImage()函数执行别的app时,它会把那个app映射到对应的Sector里面。这样映射的块可以通过 u32REG_SysRead 来知道正常的情况是这样的0x76543210。如果现在运行了在sector10的60k的代码就变成了0x765432ba;(就是把在运行的app的sector放到最前面去)。

了解这些之后,我们要实现在线升级就变得有理有据了。

目前我的做法是把flash 分部分0---4,5----9 ,10---14  ,15。0---4烧录一个自己写的bool,这个bool里面主要实现串口和无线的初始化,以及在运行之前检查flash内存在几个app,然后选择一个最高的appID执行。15的sector目前使用来充当日志表。

-----------------------------------------------------------------------分割符号----------------------------------------------------------------------------------

现在还差一个问题,要把什么样的东西能烤到块里面并且能正常运行呢?

其实只要把我们的开发环境里面生成的.bin文件,用二进制打开,然后把前面2字节删除,就会发现后面就是    0x12, 0x34, 0x56, 0x78,  0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,0x88 0x08, 0x01, 0x00, 0x00.......,没错我们只需要直接把它烧录到flash里面就是一个有效的能运行的app。注意appID不能一样。

具体怎么才能把这个.bin文件拷贝到flash里面呢?这里可以提供两种方法:使用Uart或者RF,只要定义好通信的方式,例如发一帧,应答一帧,再发一帧即可。(可能需要一个上位机软件咯)这里推荐使用QT写一个简单的专门给JN5169升级的的串口工具

可以在我的空间搜索到哦
  本人写好之后,在线升级一遍又一遍完全没有问题,ota也完全没有问题。
   

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值