iOS之BLE DFU升级

作者: CrazySteven | 来源:发表于2016-07-31 20:39 被阅读762次

    感觉已经没什么东西写了,最近给产品做了DFU升级,干脆就写这个吧。

    其实DFU升级是app端和驱动这边共同完成的,这个协议是自己定义的,所以每个公司的升级都不一样,但从根本上看都是一样的,就是把升级包发给固件,然后进行升级,下面就来简单的说下我们这边的步骤。

    1.发送升级指令

    就是给固件发送一个指令,告诉固件,进入升级模式,当然在这之前有的公司会先发送一个查询固件的版本,然后对比当前版本和最新版,看是否需要升级,如果需要,再发送升级指令。这时,固件一般会断开蓝牙,切换成升级模式。

    2.初始化校验

    当固件切换完模式以后,需要重新连接蓝牙,然后给固件再发送一个指令,告诉固件升级包的一些信息,作为校验用。当然,这一步也可以在发完升级包再发送,反正校验都是要收完全部升级包以后才能校验的。

    3.发送升级包

    这一步就是将升级包发送给固件了,由于蓝牙每次发送数据大小的限制,升级包一般都要分多次发送,每次发送一部分,当然,发送方式是和驱动这边约定好了,这里也可以做断点续传功能,就是当发送了一部分升级包断开时,下次可以接着上次没发完的继续发送升级包。

    4.校验重启

    当整个升级包都发送给固件以后,固件就会将升级包和第二步收到的升级包信息进行对比校验,校验成功后,固件就可以重启,把模式切换回正常使用模式了。
    对此,整个升级就完成了,还是前面说的,升级是和驱动这边共同完成的,双方定义如何升级,但总的都是获取升级包[1],发送给固件,固件进行升级这样。

    版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!


    1. 有的公司会把升级包放到服务器,也有的公司会在更新App时将固件升级包放到App里,毕竟固件升级的频率还是很低的,能不升级则尽量不要升级。

    相关文章

      网友评论

      • 孤峰_c929:请问下,发送完固件后,设备会自动重启吗?如果在app做固件升级,那是否就意味着校验完固件还有激活固件后,app就会出现强制退出现象呢?
        CrazySteven:@孤峰_c929 微信小程序?还是app?
        孤峰_c929:@CrazySteven 是的,设备重启会断开蓝牙,校验固件发送完毕之后,蓝牙就断开了,蓝牙一旦断开,小程序也跟着闪退了。但是设备响应的数据是可以通过抓包拿到的。我曾做个一个实验,在上传固件过程中,把设备蓝牙(不是手机蓝牙)断开,那小程序就立马闪退了,这个会是同一个原因吗?
        CrazySteven:@孤峰_c929 我当时做的只要发送完成数据包,然后设备重启会断开蓝牙,自动开始搜索匹配的蓝牙设备即可。。。app并不会闪退啊
      • wokenshin:你好,我这边给设备发送DFU命令,让设备进入DFU模式,然后设备就开始重启了,可是重启之后我这边手机扫描到设备后无法连接该设备。我们硬件这边有修改设备的信息,设备重启之后外设的name被修改过了。可是扫描到的设备还是先前的设备名 这个是缓存的原因吗?重启App之后没有这个问题。请问不重启App 可以解决吗?没有找到原因呢
        wokenshin:@CrazySteven 谢谢。 我目前是让硬件那边不修改蓝牙的名字来处理的。还在测试中
        CrazySteven:@wokenshin 不重启可以解决,好好研究下CoreBluetooth的API,我好久没弄了,记不大清了。。。
      • 逸风lovely:你好!请问有没有这方面的代码能做参考吗?我按照找个流程之后,再次连接正常模式的蓝牙的时候连不上,重启app 才行。我的QQ1072864875,万分感谢:blush:
        CrazySteven:@逸风lovely 那就让用户手动连接呗,连接不上的原因很多,要和嵌入式一起找问题,不一定是你这边的问题,多测几个设备。
        逸风lovely:@CrazySteven 升级好了后,退出升级模式,想重新连接原来的蓝牙,但是连不上
        CrazySteven:@逸风lovely 这个要看嵌入式那边是如何定义的,定义的不一样,实现起来也就不一样,没法借鉴的。。。
      • 67cb26e2116a:升级成功后,设备也自动重启了,但是发现连接不了蓝牙了,搜素也搜不到设备,要app重启才能连接到,请问这种情况你遇到过不
        CrazySteven:@Don_Yau 为什么会出现连接不了的情况呢?
        67cb26e2116a:@CrazySteven 这个问题我已经解决了
        CrazySteven:@Don_Yau 我的很正常啊

      本文标题:iOS之BLE DFU升级

      本文链接:https://www.haomeiwen.com/subject/hmcxsttx.html