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

热门文章

  1. 511遇见易语言API模块视频教程进程取ID数组
  2. Python面向对象编程 __init__()方法
  3. jQuery 修改样式
  4. 告别Flashget
  5. 基于ssm框架家教中介服务网站
  6. “垮掉”的90后,可能是中国心智最健全的一代人
  7. 计算方法--方程求根
  8. 家谱链-用技术传承历史
  9. 用HTML、CSS写一个酷炫的动态搜索框
  10. 图片去水印有什么好的工具吗?怎么去除水印?