为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。
技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–
#1. DFU简介
- DFU全称是Device Firmware Upgrade,是一种通过USB升级设备程序的机制,能用来升级以下软件组件:
- 固件协议栈
- VM应用程序
- VM文件系统内的其它文件(语音提示音、额外语言包)
- PS Keys
- DFU协议被USB实施者论坛标准化为一个设备类规范。CSR兼容这个规范,且包含加密检查
- 在制造时设备烧录的程序有RSA公钥
- DFU文件用RSA私钥加密,确保只有为此产品定制的DFU文件能被终端用户使用
#2. DFU升级过程
- Loader是出厂时烧录进芯片的
- PS Keys存储了系统的配置
- Firmware是固件协议栈
- VM文件系统包含了VM app和语音提示音
##2.1. 详细执行过程
这个章节列出了在使用DFU机制时的选择和限制:
- loader不能被升级
- 这使得DFU升级过程是安全的,loader总是存在且原封不动,因此在升级失败后DFU过程仍可重复
- 固件协议栈可以被升级(但不是必须的)
- 固件协议栈可以不包含在DFU文件里,这种情况下固件不会被更新。
- 如果默认boot模式没有主机接口,必须包含固件协议栈(否则产品只有协议栈,没有VM,没有主机接口,因此不能工作)
- 任何DFU文件内的PS Keys都可以被修改
- VM文件系统可以被升级(但不是必须的)
- 如果VM文件系统存在于DFU文件内,VM文件系统被替换成新的
- 不能单独升级VM文件系统内的文件,文件必须是连续的且没有间隙
##2.2. DFU升级工具
DFU升级工具有两种:
- DFUWizard:需要用户安装CSR DFU驱动才能开始DFU过程
- HidDfu:不需要用户安装驱动,使用USB HID接口执行DFU
##2.3. PS Keys
PS Keys的类型有很多种:
- 未保护固件(FW)和虚拟机(VM)Keys:
- 这些Keys不需要被签名,但签名也不会有任何问题
- 被保护FW Keys
- 这些Keys被保存在loader内的FW公钥认证
- 被保护VM Keys
- 这些Keys被保存在被保护FW Keys内的VM公钥认证
- 虚拟Keys,有着专门用途
##2.4. DFU事件序列
DFU事件序列如下:
- 设备正常运行在独立模式
- USB插入,设备被枚举成USB设备
- 一个用户USB命令或按键序列切换到DFU模式(这导致用户在mode 0内reboot,用户接口在这个模式内必须可用)
- DFUWizard命令设备切换到Loader模式,设备reboot且loader被激活(当使用HidDfu时不需要这个步骤)
- DFU文件被下载到设备且由loader处理
- 设备reboot回到mode 0(当使用HidDfu时不需要)
- 设备reboot回到独立模式
- 设备检测到到USB连接且枚举为一个USB设备
#3. 生成DFU文件
官方手册的步骤比较详细,但每次生成代码需要手动操作。我写了一个批处理文件,实现了编译、烧录、生成DFU、生成release文件一键操作。
##3.1. 设置CSR安装路径
:: set CSR install path
set dfutoolspath="C:\ADK4.0.0\tools\bin"
set adkpath="C:\ADK4.0.0"
set debugtransport=SPITRANS=USB SPIPORT=0
set adkversion=adk