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 ...
最新文章
- fwm环境APP菜品数据加载失败的优化操作
- ADO.NET编程小错误
- 在ASP.NET中怎么用SESSION判断用户是否登录
- 【docker】修改docker容器配置,设置/修改端口映射
- 漫画:什么是狭义相对论?
- 如何实现同一个页面里面两个页面的相互切换(window.onscroll)
- POJ - 1847 Tram(dijkstra)
- python判断密码强度_python – 检查密码的强度(如何检查条件)
- matlab guide 打开图像并将图像显示到界面
- LeetCode题 - 83. 删除排序链表中的重复元素 python实现
- spark work启动失败
- sort和qsort函数的用法
- window打开IIS
- 计算机二级做的完吗,大学计算机二级都没过 毕业后却做起了IT。。。。。
- [Advance] How to debug a program (下):示例
- Windows和ubuntu互传文件
- python3下使用有道翻译网页版实现翻译功能~~~附源码
- 8.22 ps课堂练习
- C/C++开发,无可避免的多线程(篇二).thread与其支持库
- python pyecharts绘制旭日图Sunburst