fengqiangboy / flutter-nordic-dfu

Flutter Nordic dfu
MIT License
109 stars 76 forks source link

download file '.bin' #11

Closed LiangLuDev closed 5 years ago

LiangLuDev commented 5 years ago

下载的文件后缀为.bin,可以直接传输.bin文件吗?我压缩为zip,也是提示 DFU_FIRMWARE_NOT_FOUND。

mac 环境

fengqiangboy commented 5 years ago

不可以的,需要使用nordic的官方工具生成zip包,具体生成方法可以看看这里 https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/creating-zip-package-for-dfu

LiangLuDev commented 5 years ago

@fengqiangboy https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library/issues/346 我看好像可以直接传bin文件,我不是很懂iOS,求指点 image

fengqiangboy commented 5 years ago

这个接口我以前没用过,得空了看看先~

LiangLuDev commented 5 years ago

感谢老哥操作。

LiangLuDev commented 5 years ago

@fengqiangboy 老哥 问题一下,dfu service 的uuid可以自定义吗?我们的uuid好像跟你们的不一样

fengqiangboy commented 5 years ago

不可以的,nordic的库中有定义uuid的地方,不过改了也不好,你们可以用nrf-connect这个软件先把升级调通吧

LiangLuDev commented 5 years ago

@fengqiangboy 我用厂商自带的App升级没问题。用这个库,提示dfu service not found

LiangLuDev commented 5 years ago

原来是不同厂商使用不同的升级通道。

fengqiangboy commented 5 years ago

原来是不同厂商使用不同的升级通道。

额?不是Nordic的吗?

shuizhuyu1015 commented 2 years ago

好老的问题了,但是最近遇到了,换了芯片之后固件包从以前的.zip文件改为.bin文件了,是否可以支持.bin文件的发送更新呢?

shuizhuyu1015 commented 2 years ago

下载的文件后缀为.bin,可以直接传输.bin文件吗?我压缩为zip,也是提示 DFU_FIRMWARE_NOT_FOUND。

mac 环境

不知大佬后续怎么做的,更新.bin文件可以吗

fengqiangboy commented 2 years ago

好老的问题了,但是最近遇到了,换了芯片之后固件包从以前的.zip文件改为.bin文件了,是否可以支持.bin文件的发送更新呢?

好像nordic的官方原生版本就不支持bin文件吧,这个库只是桥接了一下原生的库,所以支持不支持完全看原生库了

shuizhuyu1015 commented 2 years ago

好老的问题了,但是最近遇到了,换了芯片之后固件包从以前的.zip文件改为.bin文件了,是否可以支持.bin文件的发送更新呢?

好像nordic的官方原生版本就不支持bin文件吧,这个库只是桥接了一下原生的库,所以支持不支持完全看原生库了

看到nordic官方可以支持bin,要不大佬有时间支持下?安排上?😄 https://github.com/NordicSemiconductor/Android-DFU-Library/tree/main/documentation

final DfuServiceInitiator starter = new DfuServiceInitiator(mSelectedDevice.getAddress()) .setDeviceName(mSelectedDevice.getName()) .setKeepBond(keepBond); // If you want to have experimental buttonless DFU feature (DFU from SDK 12.x only!) supported call // additionally: starter.setUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(true); // but be aware of this: https://devzone.nordicsemi.com/question/100609/sdk-12-bootloader-erased-after-programming/ // and other issues related to this experimental service.

// For DFU bootloaders from SDK 15 and 16 it may be required to add a delay before sending each // data packet. This delay gives the DFU target more time to perpare flash memory, causing less // packets being dropped and more reliable transfer. Detection of packets being lost would cause // automatic switch to PRN = 1, making the DFU very slow (but reliable). stater.setPrepareDataObjectDelay(300L);

// Init packet is required by Bootloader/DFU from SDK 7.0+ if HEX or BIN file is given above. // In case of a ZIP file, the init packet (a DAT file) must be included inside the ZIP file. if (mFileType == DfuService.TYPE_AUTO) starter.setZip(mFileStreamUri, mFilePath); else { starter.setBinOrHex(mFileType, mFileStreamUri, mFilePath).setInitFile(mInitFileStreamUri, mInitFilePath); } final DfuServiceController controller = starter.start(this, DfuService.class); // You may use the controller to pause, resume or abort the DFU process.

DipsySu commented 2 years ago

感谢楼主造的这个轮子.

看了源码, 如果想要支持bin文件升级; 那么在安卓的startDfu方法中, 将setZip方法换成setBinOrHex就可以了;

不过需要一个额外的参数.这个参数是一个枚举值, 不过我从nrf connect中看使用bin 或者 hex 文件进行dfu的话, 这个额外的参数一般都是 DfuBaseService.TYPE_APPLICATION;

我看了一下ios的库, 也是同样的逻辑.

我想应该可以暴露出来一个方法, 实现bin进行dfu; 或者在startDfu中添加额外参数区分是zip或者bin升级. 来实现不同的 DfuServiceInitiator对象;

image

image