TI CC254x BLE设备的空中下载(OAD)开发者指南

需积分: 9 5 下载量 166 浏览量 更新于2024-07-19 收藏 485KB PDF 举报
"TI CC254x的OAD(Over-the-Air Download)技术文档,是BLE Developer's Guide的一部分,版本1.2,主要针对使用CC254x SOC的开发者,介绍了如何在应用程序中实现TI自定义OAD Profile功能,以实现无线固件更新。" TI CC254x OAD功能详解: OAD是一种通过蓝牙低功耗(BLE)协议进行空中固件更新的技术,旨在无需物理接触编程接口的情况下,使已部署设备的代码得以更新。这种功能降低了设备维护的成本,提高了用户体验。 1. 目的: 该文档的主要目的是帮助使用TI BLE栈的开发者,在基于CC254x系统级芯片(SOC)的任何样例或专有应用中成功集成和实施TI的OAD Profile功能。 2. 功能概述: OAD作为一个扩展的栈特性,采用客户端-服务器机制运作。其中,一个设备作为OAD图像服务器(OAD Manager),负责提供新的固件更新;另一个设备作为OAD图像客户端(OAD Target),接收并安装这些更新。OAD允许设备在保持正常运行的同时,安全地下载和验证新固件。 3. 假设条件: 文档假设BLE固件映像管理器(BIM)永远不会需要更新。BIM是引导代码的一部分,它处理复位中断向量,并决定运行哪个有效的映像(Image-A或Image-B)。 4. 定义、缩写和术语: - API:应用程序编程接口,允许软件组件之间交互的接口。 - BIM:Boot Image Manager,负责处理启动流程和选择运行的映像。 - BEM:Boot Encrypted Manager,BIM的加密版本,用于处理加密启动过程。 - EBL:Encrypted Bootload,用于加密目标设备的映像。 - DL:Down-Loaded,表示已下载的候选远程控制(RC)映像,待安装到OAD Target上。 在实际应用中,OAD流程通常包括以下步骤: 1) OAD Manager广播固件更新通知,OAD Target接收到通知后请求更新。 2) OAD Manager发送分块的固件更新包,每个包都带有校验信息。 3) OAD Target逐块接收、验证并存储更新数据。 4) 当所有块接收并验证无误后,OAD Target安全地切换到新固件并执行更新。 TI CC254x的OAD功能提供了高效且安全的无线固件更新解决方案,对于那些难以物理访问或者需要远程维护的BLE设备尤其有价值。通过遵循文档中的指导,开发者可以充分利用这个特性,优化产品生命周期管理和客户服务。

oad configuration information from configs/recognition/st_gcn_aaai18/kinetics-skeleton/test.yaml [ ] 0/86, elapsed: 0s, ETA:Traceback (most recent call last): File "/home/zrb/anaconda3/envs/open-mmlab/bin/mmskl", line 7, in <module> exec(compile(f.read(), __file__, 'exec')) File "/home/zrb/mmskeleton/tools/mmskl", line 123, in <module> main() File "/home/zrb/mmskeleton/tools/mmskl", line 117, in main call_obj(**cfg.processor_cfg) File "/home/zrb/mmskeleton/mmskeleton/utils/importer.py", line 24, in call_obj return import_obj(type)(**kwargs) File "/home/zrb/mmskeleton/mmskeleton/processor/recognition.py", line 47, in test output = model(data) File "/home/zrb/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__ result = self.forward(*input, **kwargs) File "/home/zrb/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 150, in forward return self.module(*inputs[0], **kwargs[0]) File "/home/zrb/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__ result = self.forward(*input, **kwargs) File "/home/zrb/mmskeleton/mmskeleton/models/backbones/st_gcn_aaai18.py", line 94, in forward x = self.data_bn(x) File "/home/zrb/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__ result = self.forward(*input, **kwargs) File "/home/zrb/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/nn/modules/batchnorm.py", line 81, in forward exponential_average_factor, self.eps) File "/home/zrb/anaconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/nn/functional.py", line 1656, in batch_norm training, momentum, eps, torch.backends.cudnn.enabled RuntimeError: running_mean should contain 60 elements not 54

2023-07-24 上传