Android:TI 型号2640 R2F低功耗蓝牙芯片 OAD升级

问题:蓝牙芯片从2541更新为2640 R2F后进行OAD升级?

OAD简介及流程:

1.包含固件升级功能的固件中都会有OAD服务

(1)蓝牙芯片2541的OAD服务及特征如下:

UUID:0xF000FFC0-0451-4000-B000-000000000000

OAD服务中有两个特征:

OAD Image Identify(UUID:0xF000FFC1-0451-4000-B000-000000000000)

OAD Image Block (UUID:0xF000FFC2-0451-4000-B000-000000000000)

(2)蓝牙芯片2640 R2F的OAD服务及特征如下:

UUID:0xF000FFC0-0451-4000-B000-000000000000

OAD服务中有三个特征:

OAD Image Identify(UUID:0xF000FFC1-0451-4000-B000-000000000000) 

OAD Image Block(UUID:0xF000FFC2-0451-4000-B000-000000000000)

OAD Image Control(UUID:0xF000FFC5-0451-4000-B000-000000000000)

1.蓝牙芯片2541的升级流程如下。

(1)开启C1的通知,可以向C1中写0或1,如果写入0时有数据返回,说明当前的硬件固件为镜像A,

如果写入0没有数据返回,但是写入1有数据返回, 说明当前的硬件固件为镜像B.

(2)向C1中写入要发送的固件包的配置信息,如:镜像A或B,升级包的大小等等。

(3)开启C2的通知,按照每次发送18bytes数据,发送固件升级包给要升级的设备。18bytes中前2bytes作为block id,

16bytes作为实际文件流数据。

2.蓝牙芯片2640 R2F的升级流程如下。

(1)设置MTU的大小,和设备协定好发送升级包一包数据的大小。成功的连接上设备之后,在回调方法

public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState)
{
        if (newState == BluetoothProfile.STATE_CONNECTED)
    {

            boolean ret = gatt.requestMtu(244);
          
        }

调用如上图所示方法,如果不调用的话,设备允许接收的一包升级包的大小可能为20个字节。

(2)开启C5的通知,向C5发送01的请求写入的block size的大小,返回3bytes大小的数据,第二个字节表示要发送的

升级包的一包数据的大小。

(3)开启C1的通知,向C1发送要发送的升级包的包头的信息,如OAD图像识别值,BIM版本,图像标题版本等等,

返回值如果为0,表示设备有接收此升级包的条件,可以升级。

(4)向C5发送03的指令,请求开始OAD升级,返回值为6bytes,第二个字节为status,如果为00,后面的4bytes则是设备

请求的升级包的块号。

(5)向C2发送过程1收到的回复标明的包大小一包包的升级包,其中前四个字节为设备请求的块号,返回值设备会通过C5返回,还是6bytes,第二个字节表示接收上一包的状态,后四个字节标明请求的下一包的块号。

(6)发送完升级包的最后一包后会收到设备通过C5发来的0e的消息,即整个升级包已经接收成功,接着通过C5发送04的消息给设备,通知设备启用发送过去的升级包。然后设备就开始升级了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误是由于在调用`load()`函数时没有传入`Loader`参数引起的。在Python3.9版本之前的PyYAML中,`load()`函数需要传入一个`Loader`参数来解析YAML文件。而在Python3.9版本之后,`load()`函数的参数已经改变,不再需要`Loader`参数。引用。 解决这个错误可以有两种方法: 方法1: 将Python版本降至3.7及以下。在Python3.7及以下的版本中,`load()`函数的参数仍然需要传入`Loader`。这样就能够解决该错误。引用。 方法2: 直接使用`safe_load()`函数来替换`load()`函数。`safe_load()`函数在加载YAML文件时会使用默认的安全加载器,可以避免潜在的安全风险。通过打开文件并使用`safe_load()`函数来解析YAML文件,可以将文件数据转化为列表或字典。引用。 使用这两种方法之一,你就可以解决`load() missing 1 required positional argument: 'Loader'`错误了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [load() missing 1 required positional argument: ‘Loader‘ (.yaml文件读取错误)](https://blog.csdn.net/weixin_44312422/article/details/122684597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [load() missing 1 required positional argument: ‘Loader](https://blog.csdn.net/weixin_42127450/article/details/121901698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值