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的消息给设备,通知设备启用发送过去的升级包。然后设备就开始升级了。

你可能感兴趣的:(OAD升级)