设备固件更新应用程序
DFU应用程序允许在新DK上刷写新固件。整个过程分为三个步骤
- 选择带有适当固件的zip文件。
- 选择带有打开引导器的BLE设备。
- 开始固件上传。
设置屏幕允许更改用于上传固件的DFU库参数。
iOS DFU Library
安装
对于Cocoapods
- 创建/更新包含以下内容的Podfile
target 'YourAppTargetName' do
use_frameworks!
pod 'iOSDFULibrary'
end
- 安装依赖项
pod install
-
打开新创建的
.xcworkspace
-
使用
import iOSDFULibrary
将库导入您的任何类中,然后开始您的项目工作
对于Carthage
- 在您的项目根目录中创建一个新的Cartfile,包含以下内容
github "NordicSemiconductor/IOS-DFU-Library" ~> x.y //Replace x.y with your required version
- 使用carthage构建
carthage update --platform iOS //also OSX platform is available for macOS builds
- Carthage 将在 Carthage/Build/ 下构建 iOSDFULibrary.framework 和 ZipFramework.framework 文件,您现在可以将所有这些文件复制到您的项目中并使用该库。此外,如果需要重新符号化崩溃日志,Carthage 还会构建 *.dsym 文件。您可能希望将这些文件与您的构建捆绑在一起以便将来使用。
对于 Swift 包管理器
// swift-tools-version:5.5
import PackageDescription
let package = Package(
name: "<Your Product Name>",
dependencies: [
.package(
url: "https://github.com/NordicSemiconductor/IOS-DFU-Library",
.upToNextMajor(from: "<Desired Version, e.g. 4.11.1>")
)
],
targets: [.target(name: "<Your Target Name>", dependencies: ["NordicDFU"])]
)
设备固件更新 (DFU)
nRF5x 系列芯片基于闪存,因此它们代表了目前最灵活的解决方案。nRF5x 系列及其相关软件架构和 S-Series SoftDevices 的一个关键特性是空中固件升级 (OTA-DFU) 的可能性。见图 1。OTA-DFU 允许通过云向现场的产品发布和下载固件更新,使得 OEM 能够修复现有产品的漏洞并引入新功能。这为使用 nRF5x 系列的 SoC 开发产品带来了额外的安全和灵活性。
此仓库包含一个用于 iOS 8+ 平台的经过测试的库,该库可用于在 iPhone 或 iPad 上通过 nRF5x 设备进行设备固件更新。
DFU 库被设计得非常易于将设备包含到您的应用程序中。它与所有 Bootloader/DFU 版本兼容。
服务更改特性
为了使 DFU 能够与 iOS 一起工作,目标设备必须具有在 通用属性 服务中的指示属性 服务更改 特性。如果没有这个特性,iOS 会假定这个设备的服务永远不会更改,在切换到 DFU 启动加载器模式后不会使它们无效。
服务更改特性的行为
- 在配对设备上,必须通过服务更改特性的指示来表示属性表的更改。iOS 会自动启用 CCC 并处理此指示,并执行服务发现。在 SDK 8.0 及以后的 Legancy DFU 中正确处理了这个指示。
- 在非信任设备(未配对)上,iOS 每次设备断开连接时都会清除服务缓存。
从SDK 12输出的安全DFU
- SDK 12中的安全DFU实现不支持配对(无按钮样本在切换到DFU引导加载程序模式时不传递配对信息,引导加载程序也不发送S-C指示)。作为解决方案,引导加载程序开始使用增加1的MAC地址进行宣传,所以从手机的角度看,它是一个全新的设备,并且将执行全新的服务发现。当您的新固件即将更改服务列表时,您可以考虑将MAC地址再增加1,以确保缓存不会冲突(除非设备未配对且您具有服务更改特性,那么将不使用上面所述的缓存)。请注意,不可能对一个公共地址增加1(除非您注册了一个新的地址)。此外,设备可能以以下MAC地址出售,并且可能发生两台设备具有相同MAC地址的情况。请谨慎使用此功能。
从SDK 14输出的安全DFU
- SDK已添加无按钮DFU,并可共享绑定关系。使用此服务需要绑定关系。在DFU模式下地址不会更改,而是引导加载程序在进入DFU模式和应用程序模式时发送服务更改指示。对于已绑定的设备,建议使用此服务。
文档
请参见文档了解更多信息。
需求
此库与具有S系列软设备和已刷写DFU引导加载程序的nRF51和nRF52设备兼容。
DFU历史
传统的DFU
- SDK 4.3.0 - 通过蓝牙智能实施DFU的第一版本。DFU支持应用更新。
- SDK 6.1.0 - DFU引导加载程序支持软设备和引导加载程序更新。由于更新的引导加载程序可能依赖于新的软设备,因此这两个设备可以一起发送和安装。
- 非配对设备的无按钮更新支持。
- SDK 7.0.0 - 需要扩展初始化数据包。初始化数据包包含额外的验证信息:设备类型和修订版,应用程序版本,兼容的软设备以及固件CRC。
- SDK 8.0.0 - 应用程序更新后,可能可以保留配对信息。第一次启动新应用程序时,将向手机发送服务更改指示以刷新服务。新功能
- 对配对设备的无按钮更新支持
- 在应用程序和引导加载程序之间共享LTK。
安全DFU
- SDK 12.0.0 - 新版安全DFU已经发布。此库完全向后兼容,因此支持旧版和新版DFU。
- SDK 13.0.0 - 无按钮DFU(仍然是实验性)(使用不同的UUID)。不支持传输共享。引导加载程序将使用地址+1。
- SDK 14.0.0 - 无按钮DFU不再实验性。为配对设备添加了新的无按钮特性(需要配对,缓存清理依赖于服务更改指示)。
- SDK 15.0.0 - 增加了更高MTU的支持。
此库完全向后兼容,并支持新版本和旧版DFU。SDK 12中的实验性无按钮DFU服务从版本1.1.0开始支持。由于SDK 12中的此实验性服务不安全,您必须将 enableUnsafeExperimentalButtonlessServiceInSecureDfu 设置为true才能启用它,默认情况下它是关闭的。有关详细信息,请阅读方法文档。建议使用SDK 13(适用于非配对设备)或SDK 14(适用于配对设备)中的无按钮服务。两者都自DFU库1.3.0开始支持。
请查看平台文件夹以获取每个库的兼容性详细信息。
React Native
基于此库的不官方库用于iOS和Android,适用于React Native: react-native-nordic-dfu
Flutter
基于此库,提供适用于Flutter的iOS和Android库: flutter-nordic-dfu
Xamarin
Simple binding library for iOS is available on nuget: Laerdal.Xamarin.Dfu.iOS
Resources
- DFU介绍
- 如何创建初始化数据包
- nRF51开发套件(DK)(兼容Arduino Uno Revision 3)
- nRF52开发套件(DK)(兼容Arduino Uno Revision 3)
- nRF52840开发套件(DK)(兼容Arduino Uno Revision 3)