2994|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

CC1310空中升级笔记02 CC26xx_CC13xx_BLE_OAD_例程 [复制链接]

一,OAD Target代码流程梳理

它主要是实现程序文件的空中下载,边下载边写入到指定flash区域。

1. main.c

初始化。

/* Initialize ICall module */
ICall_init();

/* Start tasks of external images - Priority 5 */
ICall_createRemoteTasks();

OadTargetApp_createTask();

2. oad_target_app.c

整体流程是从空中收包,然后经过任务调度,写入flash块。

OadTargetApp_processOadWriteCB -> Queue_put(hOadQ, (Queue_Elem *)oadWriteEvt) -> OadTargetApp_taskFxn中while (!Queue_empty(hOadQ)) -> OAD_imgBlockWrite(oadWriteEvt->connHandle, oadWriteEvt->pData);

3. oad.c

OAD_imgBlockWrite(uint16_t connHandle, uint8_t pValue) -> OADTarget_writeFlash(imagePage, (blkNum OAD_BLOCK_SIZE), pValue+2, OAD_BLOCK_SIZE);

OAD_imgBlockWrite中传递进来的数据为18字节,前面2字节为镜像块的编号,后面16字节为程序文件。

OADTarget_writeFlash有两种方式,一种是写片内flash,一种是外扩flash。下面是片内的flash接口函数。传递进去的参数是page和偏移以及数据缓冲及长度,最终调用了最底层的flash写接口,这就是ti论坛上Siri说的“CC26xx or the CC13xx都支持读写flash”。

void OADTarget_writeFlash(uint8_t page, uint32_t offset, uint8_t *pBuf,
                          uint16_t len)
{
  uint8_t cacheState;

  cacheState = OADTarget_disableCache();

  FlashProgram(pBuf, (uint32_t)FLASH_ADDRESS(page, offset), len);

  OADTarget_enableCache(cacheState);
}
FLASH_ADDRESS这个宏就是绝对地址,因为宏中((page) << 12)会将页序号变成该页的绝对地址。

二,OAD BIM代码流程梳理

按照OAD的架构,分析完 OAD target,就到了 boot 部分了。我是拿CC1350的BIM工程来分析的,CC2640目前只有IAR版本,这对我移植到CC1310极不方便,于是就放下了。

这个BIM按照手册上的流程图,需要计算校验,判断最终下载下来的程序文件的合法性,接着进行跳转。但是我在CC1350没找到这个bim,用的是bim_dual_img,这个并没有计算什么校验,只是简单进行了两个镜像的相互跳转。
1. bim_main.c

D:\ti\simplelink\ble_sdk_2_02_01_18\src\examples\util\bim\cc1350\bim_main.c

// 在这里主要有两个步骤:1.判断flash,挑选镜像A或者B。 2.跳转、复位指针向量等。
疑问的是为什么从1E000开始,这里预留了1K以内做NV存储,不停从末尾取出4字节来判断,一旦ID=0x81则认为镜像B正确,否则就跳转到镜像A。

2. ccfg_app_ble.c

这是CC1350用的,和CC1310不同,因此要重点对比下。

D:\ti\simplelink\ble_sdk_2_02_01_18\src\examples\util\bim\cc1350\ccfg_app_ble.c
D:\ti\tirtos_cc13xx_cc26xx_2_20_01_08\products\cc13xxware_2_04_02_17240\startup_files\ccfg.c

// 在这个readme中写了CCFG的作用。
customer configuration area (ccfg section) is located at the end of the flash and reflect the hw configuration of the device.

3. cc13xx_bim_dual_img.cmd

D:\ti\simplelink\ble_sdk_2_02_01_18\src\common\cc26xx\ccs\cc13xx_bim_dual_img.cmd
对比BIM工程(cc13xx_bim_dual_img.cmd)和APP工程(cc13xx_dual_img.cmd),说明BIM工程的cmd文件有做了如下处理。

1.注释掉ResetISR
/–entry_point ResetISR /

2.存储映射(System memory map)


/* System memory map */
MEMORY
{
    IVEC_FLASH (RX) : origin = FLASH_BASE, length = IVEC_FLASH_LEN  //0 ~ 00C8

    /* BIM stored in and executes from internal flash */
    /* Flash Size 4 KB */
    FLASH (RX) : origin = BIM_BASE, length = FLASH_PAGE_LEN         // 1F000~20000 =2Week

    /* Application uses internal RAM for data */
    /* RAM Size 16 KB */
    SRAM (RWX) : origin = RAM_APP_BASE, length = 0x00002CFF
}
a.增加一个IVEC_FLASH(0x00000000~0x00C8)
b.FLASH (RX)修改为(0x0001F000~0x1000)
备注下Image的工程是在 ICALL_STACK0_START阶段结束。(Properties->ARM Linker->Advanced Options->Command File Preprocessing)
c.RAM长度缩小。
2CFF

3.sections
这里头不知道什么语法,总之是分配数据存放在flash还是ram。这个是个难点,暂无思路。

此帖出自无线连接论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表