CSR8670 DFU流程
1.概述
DFU全称是Device Firmware Upgrade,即设备固件升级,可以通过USB升级设备程序的机制。能用来升级以下软件组件:
· 固件协议栈
· VM应用程序
· VM文件系统内的其它文件(语音提示音、额外语言包)
· PS Keys
DFU协议由USB实现者论坛作为设备类规范进行标准化,QTIL实现符合标准,包括安全检查:
· 设备在制造时使用RSA公钥加密
· DFU文件使用RSA私钥签名,以确保最终用户只能使用特定产品的DFU文件
Loader是出厂时烧录进芯片的,PS Keys存储了系统的配置,Firmware是固件协议栈,VM文件系统包含了VM app和语音提示音。
2.使用DFU机制时可用的选项和限制
(1)Loader无法更新:
· 这使得DFU过程是安全的,加载程序始终存在且完好无损,因此在尝试失败后可以重复DFU过程。
(2)Firmware可以更新(但不必更新):
· DFU文件中可能缺少stack,在这种情况下,固件不会更新。
· 如果默认boot模式没有主机接口,则始终包括固件堆栈(否则产品只有堆栈,没有虚拟机,没有主机接口,将不工作)。
(3)DFU文件内的PS Keys都可以被修改。
(4)VM文件系统可以更新(但不必更新):
· 如果VM文件系统存在于DFU文件内,VM文件系统被替换成新的。
· 不能单独升级VM文件系统内的文件,文件必须是连续的且没有间隙。
3.DFU升级工具
(1)DFUWizard:需要用户安装CSR DFU驱动才能开始DFU过程。
(2)HidDFU(HidDfuCmd):不需要用户安装驱动,使用USB HID接口执行DFU。HidDfuCmd应用程序是一个命令行工具,用于使用USB HID接口升级设备。
4.PS Keys类型
(1)未受保护的固件(FW)和虚拟机(VM)keys:
· 这些keys不必签名,但使用FW或VM密钥签名不会导致任何问题。
(2)受保护的FW keys:
· 这些keys由loader中存储的FW公钥进行验证。
(3)受保护的VW keys:
· 这些keys由存储在受保护的FW keys密钥中的VM公钥验证。
5.环境准备
(1)安装外部Flash的CSR8670、CSR8675开发板
(2)ADK4.0或更高的版本
(3)要升级的文件
(4)可从命令行访问 的 \tools\bin文件夹中的ADK工具
6.生成生产固件
打开sink工程后,需配置按键以进入以下事件:
Enter DFU Mode(USB DFU)
Enter Driverless DFU Mode(USB-HID DFU)
未签名的loader和stack包含在\firmware\assisted\unified\gordon(gordon是CSR8670,rick文件夹是CSR8675)中,从与loader_unsigned.xdv文件相同的位置运行以下步骤。或者将gordon文件夹下 loader_unsigned.xdv/.xpv <和stack_unsigned.xdv/.xpv复制到另一个文件夹并从那里运行命令。
用于生成DFU文件的工具包含在安装目录下tools\bin文件夹中。(如:ADK_CSR867x.WIN4.2\tools\bin),这些工具通常具有以下命令结构:
Dfutoolname <output file name> <input file name> <input key>
(1)创建DFU密钥对
dfukeygenerate -o keys,生成keys.private.key和keys.public.key
(2)将用于验证stack真实性的密钥插入loader
dfukeyinsert -v -o loader_signed -l loader_unsigned.xdv -ks keys.public.key ,生成loader_signed.xdv和loader_signed.xpv
(3)使用与插入到loader中的密钥对应的密钥在stack上签名
dfusign -v -o stack_signed -s stack_unsigned.xpv -ks keys.private.key,生成stack_signed.xdv和stack_signed.xpv
(4)将用于验证VM文件系统真实性的密钥插入PS Keys
dfukeyinsert -v -o image_signed -ps image.psr -ka keys.public.key,生成image_signed.psr
(5)使用与插入到PS Keys文件中的密钥相对应的密钥对vm文件系统进行签名
dfusign -v -o image_signed -h output.fs -ka keys.private.key,生成image_signed.fs
(6)构建二进制镜像文件
vmbuilder -size merge.xpv stack_signed.xpv image_signed.fs,生成merge.xpv
生成的镜像文件包括:
1)插入密钥的loader
2)签名的Firmware Stack
3)签名的VM文件系统
签名PS Keys生成的image_signed.psr没有内置到生成的二进制镜像中,因此要生成生产图像,还需执行:
1)使用BlueFlash将merge.xpv文件下载到目标设备上
2)使用PSTool合并image_signed.psr
3)使用BlueFlash Dump出生产固件
7.生成DFU文件
(1)签署要包含在DFU文件中的PS Keys文件
dfusign -v -o dfu_vm_signed -pa example_DFU_vm.psr -ka keys.private.key,生成dfu_vm_signed.app.psr
dfusign -v -o dfu_fw_signed -ps example_DFU_fw.psr -ks keys.private.key,生成dfu_fw_signed.stack.psr
(2)对.fs文件进行签名
dfusign -v -o image_signed -h image.fs -ka keys.private.key,生成image_signed.fs
(3)生成DFU文件
dfubuild -v -pedantic -f image.dfu -uv -up -s stack_signed.xpv -d stack_signed.xdv -h image_signed.fs -p3 . dfu_fw_signed.stack.psr dfu_vm_signed.app.psr,生成image.dfu
8.DFU升级
8.1 USB升级(DFUWizard)
DFUWizard工具包含在安装目录下tools\bin文件夹中。(如ADK_CSR867x.WIN4.2\tools\bin),DFUWizard是一个图形化用户界面程序,首先按键让设备进入DFU模式,按照提示操作即可。
8.2 USB-HID升级(HidDfuCmd)
工具包含在安装目录下tools\bin文件夹中。(如:ADK_CSR867x.WIN4.2\tools\bin),按键让设备进入DFU模式,使用命令行执行以下命令:
HidDfuCmd upgrade 0a12 fffe 0 0 image.dfu,选择Yes,等待两分钟左右(有进度提示),升级完成。
CSR8670 DFU流程相关推荐
- 如何使用蓝牙实现OTA固件升级
作为一种低成本的近距离无线连接协议,蓝牙在现实生活中的应用非常广泛,各种嵌入式.物联网设备随处可见.基于这一特性,我们今天讲一下如何使用蓝牙实现OTA固件升级. 一.概述 所谓DFU(Device F ...
- csr8670 修改key_CSR8670 DFU user guide
DFU 使用 1) 产生 DFU keys : dfukeygenerate.exe -o keys 或 dfukeygenerate.exe -o keys -r random.txt 生成 key ...
- CSR8670 /CSR8675 升级文件DFU制作
本文主要讲解在ADK_CSR867x.WIN4.4.0.17下, 验证CSR8670 sink程序的HID DFU功能, 用的工具为ADK_CSR867x.WIN.4.4.0.17\tools\bin ...
- CSR8670获取来电号码及开发流程
平台:CSR8670 SDK:ADK4.1 场景:CSR8670作为HF,当AG连接上后,获取来电的号码 结论:如果不关注流程的,很简单,直接通过下面的设置并且Write Device就可以了. 不断 ...
- NRF52832 nRF Toolbox DFU升级详细流程
NRF52832 nRF Toolbox DFU升级详细流程 升级前的流程:(此处待完善) 1.从机广播 广播数据包长度31, 蓝牙MAC地址(e5:f6:b1:61:f8:04), BLE_GAP_ ...
- 记录一下CSR蓝牙做DFU的流程
分类: 蓝牙学习2011-11-07 14:01 3592人阅读 评论(4) 收藏 举报 interfacedostoolstablelistserver DFU Manual 一.DFU flow ...
- QCC30DFU流程android说明,qcc512x qcc302x qcc303x earbud 软件GAIA OTA DFU 空中升级实现方法以及升级步骤...
QCC512x QCC302x QCC303x earbud 软件GAIA OTA DFU 空中升级实现方法以及升级步骤 概述 OTA只能升级部分,不是所有的都可以OTA.如PSKEY区,蓝牙地址,蓝 ...
- CSR8670的DFU功能
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- csr8670--sink工程的大致工作流程分析(以speaker为例)一
今天是14号 15号更新,说明,刚开始看程序有点复杂 没办法,必须看代码 建议首先先把ADK3.5.1中的例程tutorials看完,对学习很有帮助 1.csr中的消息机制 1.1 adk3.5.1 ...
最新文章
- Kong APIGW — Admin API 核心逻辑对象
- UA MATH524 复变函数5 代数运算、可微性与积分基础例题
- C# 控件开发中常用属性整理
- C++ Primer 第10章 pair类型
- 服务器分虚拟空间,服务器怎样分虚拟主机
- 开发测试服务器配置信息,node服务端中台实现及开发测试生产环境配置
- ManyToManyField的注意事项和如何建立索引
- java中que_java中==和eques比较
- [PYTHON]python 基础笔记(1)
- Java获取当前Linux系统ip,cpu和内存使用情况,进程信息并保存至数据库
- 20191222每日一句
- 三人表决器程序c语言,“三人表决器”逻辑功能PLC程序设计(有梯形图 指令表)...
- PNP三极管和NPN三极管的开关电路(EC极性接线判断简单明了)简单的技巧:三极管上箭头所在方向的二极管,只要二极管正向导通,那么三极管上下就能导通。
- tomcat 日志报错 java.lang.UnsupportedClassVersionError: com/wlt/controller/IndexController
- 获取win10锁屏壁纸
- s3fs挂载对象存储到本地
- 分布式与云化的主要区别
- Redis重大版本整理(Redis2.6-Redis6.0)
- 虚拟机从路由器获取宽带拨号账号密码
- 设计一个智能客服系统
热门文章
- 小型变频器电流显示误差解决方案
- 什么是分布式配置中心?
- Markdown官方文档[翻译]
- Android各种沉浸式状态栏实现
- 【Python项目】Python基于tkinter实现笔趣阁小说下载器(附源码)
- 回应“考研生没核酸报告错过考试”:曾通过4种方式告知
- 1.2 Linux环境安装Perl
- springboot+jsp汽车在线销售系统
- 021-企业站:纽曼移动端微官网实战
- 打包编译 Error:(23,34) java: 找不到符号符号:类 xxx位置:程序包 xxx.xxx