oad(http://www.ti.com/cn/lit/swra580 ), 即over the air download,是通过无线的方式远程更新固件的一种方法。on chip,就是片上, 升级的对象不需要外挂flash, 通过芯片片内flash完成新固件存储及老固件向新固件的切换。on chip oad方案因为不需要外部接口就能够实现固件的更新,在传感器,智能门锁,电力监控等无线应用广受欢迎。
在ti新发布的cc1310 片内oad工程里, 由于很多细节没有说明, 用户使用过程可能出错. 这里将结合ti cc1310 sdk 1.60.00.21 版本(http://www.ti.com.cn/tool/cn/simplelink-cc13x0-sdk), 讲解在工程编译和oad测试过程中的注意事项.
试验提前准备:
两个cc1310的launchpad评估板(http://www.ti.com.cn/tool/cn/launchxl-cc1310 )
cc1310 软件开发包:simplelink_cc13x0_sdk_1_60_00_21(http://www.ti.com.cn/tool/cn/simplelink-cc13x0-sdk )
工具:uniflash烧写工具(http://www.ti.com.cn/tool/cn/uniflash )
串口工具:hterm
python环境及工具:python 2.7
cc1310片内oad例程编译
cc1310 片内oad的例程在上述sdk的文件夹examples\rtos\cc1310_launchxl\easylink中, 对应有采集器(rfwsnconcentratoroadserver)和节点(rfwsnnodeintflashoadclient)两个例程; 我们将其导入到ccs(7.0 以上版本)中.
这里需要注意的第一个点,在sdk的文文件夹\examples\rtos\cc1310_launchxl\easylink\hexfiles\onchipoad中已经有已经编译好的固件, 这个固件目前不能够和工程编译的固件混合使用. 你可以只使用已经编译好的进行测试,或者只使用工程编译好的.
我们首先编译好采集器工程(无需任何修改),并将工程下载到cc1310 launchpad 1 中;
接着, 按照工程内的readme.md指导(第136~145行)设置,我们编译节点工程, 发现报错,如下图, 错误原因可使用存储不足;
针对这个,我们可以从工程编译生成的.map文件察看具体的存储的细节,可以看出是.const太大导致。
我们如果将之前工程设置的feature_oad_onchip取消,重新编译,察看正常的.map文件, 可以发现主要占用.const空间的主要被smartrf_settings_predefined.obj占用,经过检查后,发现主要是无线rf的补丁导致,而这部分补丁针对我们对oad的验证没有关系。
恢复到readme.md的工程设置后,打开工程目录文件夹smartrf_settings中的smartrf_settings_predefined.c,将下面四个rf_mode变量修改如下, 接着重新编译工程。
rf_mode rf_prop_lrm =
{
.rfmode = rf_mode_proprietary_sub_1,
.cpepatchfxn = 0,
.mcepatchfxn = 0,
.rfepatchfxn = 0,
};
rf_mode rf_prop_ook =
{
.rfmode = rf_mode_proprietary_sub_1,
.cpepatchfxn = 0,
.mcepatchfxn = 0,
.rfepatchfxn = 0,
};
rf_mode rf_prop_hsm =
{
.rfmode = rf_mode_proprietary_sub_1,
.cpepatchfxn = 0,
.mcepatchfxn = 0,
.rfepatchfxn = 0,
};
rf_mode rf_prop_sl_lr =
{
.rfmode = rf_mode_proprietary_sub_1,
.cpepatchfxn = 0,
.mcepatchfxn = 0,
.rfepatchfxn = 0,
};
成功编译,从下图可以看到编译后的程序大小为57k,满足不能大于60k的限制。
这里需要说明的一点是,readme.md里面说的另外一点nodefwversion修改应该是在oad_client.c而不是nodetask.c中;
cc1310片内oad例程bin固件生成及加载测试
因为这个工程的设置是针对image文件,如果直接下载到芯片是没办法正常运行的(因为芯片的复位向量没有可执行程序,需要借助bim来跳到image程序入口),需要将编译好的固件和boot管理的bim固件结合在一起,步骤如下
先mergy bim和节点固件(请将两个固件拷贝至python的目录后执行)
python /usr/bin/hexmerge.py -o rfwsnnodeintflashoadclient_cc1310_launchxl_all_v1.hex --overlap=error rfwsnnodeintflashoadclient_cc1310_launchxl_tirtos_ccs.hex bim_intflash_cc1350lp.hex
接着,因为bim需要检验image的crc文件,需要通过下面的命令将生成的hex转换成bin。(需要下载安装一个crc计算组件crcmod https://pypi.python.org/pypi/crcmod/1.7#downloads)
python oad_image_tool_13x0.py -t onchip -i production -v 0x0100 -m 0x1000 -ob rfwsnnodeintflashoadclient_cc1310_launchxl_all_v1.bin rfwsnnodeintflashoadclient_cc1310_launchxl_all_v1.hex
我们通过uniflash, 把bin文件下载到节点launchpad 2后,节点固件就可以正常工作了。你可以看到launchpad的指示灯闪烁,从launchpad 2串口可以看到sce的adc信息。我们开启采集器launchpad 1,可以看到节点已经和采集器建立通讯,可以正常工作了。
这里还需要注意的是通过oad_image_tool_13x0.py -v生成的版本号只是采集器端available fw显示的版本号,不是实际的固件版本号。
下一步是将升级需要的程序加载到采集器端。首先,我们需要根据readme.md的说明设置成image b。 接着,通过上述的python工具,将编译生成的.hex 文件转换成.bin文件。注意oad_image_tool_13x0.py 的-m参数需要设置成0x10000。之后,我们在采集器评估板右键选择update available fw, 再同时按下左键和右键,采集器进入加载固件界面,如下:
接着断开采集器的串口,我们将结合python把需要更新的节点固件传递到采集器的外部flash。 这里,因为python的脚本是针对linux写的,为了在windows能够工作,请先安装模块pyserial并修改脚本oad_write_bin.py (目录c:\ti\simplelink_cc13x0_sdk_1_60_00_21\tools\easylink\oad)。python的安装不在文档讨论范围。pyserial的下载安装可参考http://blog.csdn.net/oxp7085915/article/details/52191698
修改后的脚本参考如下(已经用黄色mark)
#!/usr/bin/python
import serial, sys, io, os
import serial.tools.list_ports
plist =list(serial.tools.list_ports.comports())
if len(plist) python c:\ti\simplelink_cc13x0_sdk_1_60_00_21\tools\easylink\oad\oad
_write_bin.py c:\ti\simplelink_cc13x0_sdk_1_60_00_21\examples\rtos\cc1310_launchxl\easylink\hexfiles\onchipoad\ccs\rfwsnnodeintflashoadclient_cc1310_launchxl_app_v2.bin
传输完成后,重新打开串口连接采集器串口,按launchpad右键出现update available firmware后,再同按左键同时按下右键,然后可看到v02的固件已经可供使用。
接下来通过采集器launchpad右边按键选择update node firmware,再按左键同时按下右键执行选择。可以看到升级开始和完成。
升级完成后,通过send fw ver req可以看到固件已经从v01更新到v02了。
总结
本文,针对ti最新发布的cc1310片内oad解决方案,描述了在对应工程编译,链接,测试过程中需要注意到的点,并成功实现了片内oad功能。
介绍一种基于数据包交换的互连体系结构RapidIO
起动机有哪三部分组成
四轴飞行器的结构原理及发展方向
嵌入式四轴遥控小车开发(附带程序)
西门子CPU-1200在线和诊断工具
工程编译和OAD测试过程中的注意事项
快速跟踪其人工智能实施的五种方法
理想、长城、极氪、小米宣布!合作英伟达!
浅谈虚拟现实技术的一些惊人用途
断电断网报警器可以解决哪些问题
魅族pro7最新消息,魅族pro7什么时候上市?魅族pro7配置参数全曝光!黄章:“我们只针对小米6”
RFID对物流管理信息化有什么帮助
苹果和三星手机中的环境光和接近传感器对比分析
协作机器人EC66宣传片全球震撼首发
苹果6和坚果pro2哪个好?如何挑选适合的手机
华为荣耀9怎么样?荣耀9颜值与性能并存的毕业季换机首选,玻璃材质的外壳手感丝滑,让你拿得起却舍不得放下
电源插座安装规范_电源插座安装注意事项
长方集团为何如此急于出售惠州长方?
荣耀20i对比美颜APP 哪个更强
减速电机齿轮磨齿加工方法