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文件

生成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,等待两分钟左右(有进度提示),升级完成。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值