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流程相关推荐

  1. 如何使用蓝牙实现OTA固件升级

    作为一种低成本的近距离无线连接协议,蓝牙在现实生活中的应用非常广泛,各种嵌入式.物联网设备随处可见.基于这一特性,我们今天讲一下如何使用蓝牙实现OTA固件升级. 一.概述 所谓DFU(Device F ...

  2. csr8670 修改key_CSR8670 DFU user guide

    DFU 使用 1) 产生 DFU keys : dfukeygenerate.exe -o keys 或 dfukeygenerate.exe -o keys -r random.txt 生成 key ...

  3. CSR8670 /CSR8675 升级文件DFU制作

    本文主要讲解在ADK_CSR867x.WIN4.4.0.17下, 验证CSR8670 sink程序的HID DFU功能, 用的工具为ADK_CSR867x.WIN.4.4.0.17\tools\bin ...

  4. CSR8670获取来电号码及开发流程

    平台:CSR8670 SDK:ADK4.1 场景:CSR8670作为HF,当AG连接上后,获取来电的号码 结论:如果不关注流程的,很简单,直接通过下面的设置并且Write Device就可以了. 不断 ...

  5. NRF52832 nRF Toolbox DFU升级详细流程

    NRF52832 nRF Toolbox DFU升级详细流程 升级前的流程:(此处待完善) 1.从机广播 广播数据包长度31, 蓝牙MAC地址(e5:f6:b1:61:f8:04), BLE_GAP_ ...

  6. 记录一下CSR蓝牙做DFU的流程

    分类: 蓝牙学习2011-11-07 14:01 3592人阅读 评论(4) 收藏 举报 interfacedostoolstablelistserver DFU Manual 一.DFU flow ...

  7. QCC30DFU流程android说明,qcc512x qcc302x qcc303x earbud 软件GAIA OTA DFU 空中升级实现方法以及升级步骤...

    QCC512x QCC302x QCC303x earbud 软件GAIA OTA DFU 空中升级实现方法以及升级步骤 概述 OTA只能升级部分,不是所有的都可以OTA.如PSKEY区,蓝牙地址,蓝 ...

  8. CSR8670的DFU功能

    为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...

  9. csr8670--sink工程的大致工作流程分析(以speaker为例)一

    今天是14号 15号更新,说明,刚开始看程序有点复杂 没办法,必须看代码  建议首先先把ADK3.5.1中的例程tutorials看完,对学习很有帮助 1.csr中的消息机制 1.1 adk3.5.1 ...

最新文章

  1. Kong APIGW — Admin API 核心逻辑对象
  2. UA MATH524 复变函数5 代数运算、可微性与积分基础例题
  3. C# 控件开发中常用属性整理
  4. C++ Primer 第10章 pair类型
  5. 服务器分虚拟空间,服务器怎样分虚拟主机
  6. 开发测试服务器配置信息,node服务端中台实现及开发测试生产环境配置
  7. ManyToManyField的注意事项和如何建立索引
  8. java中que_java中==和eques比较
  9. [PYTHON]python 基础笔记(1)
  10. Java获取当前Linux系统ip,cpu和内存使用情况,进程信息并保存至数据库
  11. 20191222每日一句
  12. 三人表决器程序c语言,“三人表决器”逻辑功能PLC程序设计(有梯形图 指令表)...
  13. PNP三极管和NPN三极管的开关电路(EC极性接线判断简单明了)简单的技巧:三极管上箭头所在方向的二极管,只要二极管正向导通,那么三极管上下就能导通。
  14. tomcat 日志报错 java.lang.UnsupportedClassVersionError: com/wlt/controller/IndexController
  15. 获取win10锁屏壁纸
  16. s3fs挂载对象存储到本地
  17. 分布式与云化的主要区别
  18. Redis重大版本整理(Redis2.6-Redis6.0)
  19. 虚拟机从路由器获取宽带拨号账号密码
  20. 设计一个智能客服系统

热门文章

  1. 小型变频器电流显示误差解决方案
  2. 什么是分布式配置中心?
  3. Markdown官方文档[翻译]
  4. Android各种沉浸式状态栏实现
  5. 【Python项目】Python基于tkinter实现笔趣阁小说下载器(附源码)
  6. 回应“考研生没核酸报告错过考试”:曾通过4种方式告知
  7. 1.2 Linux环境安装Perl
  8. springboot+jsp汽车在线销售系统
  9. 021-企业站:纽曼移动端微官网实战
  10. 打包编译 Error:(23,34) java: 找不到符号符号:类 xxx位置:程序包 xxx.xxx