Nordic 如何进入Bootloader

164 阅读5分钟

Nordic所有的Service, Charactersitc and Descriptor

Service: 00001800-0000-1000-8000-00805f9b34fb
  Characteristic: 00002a00-0000-1000-8000-00805f9b34fb - Properties: ['read', 'write']
  Characteristic: 00002a01-0000-1000-8000-00805f9b34fb - Properties: ['read']
  Characteristic: 00002a04-0000-1000-8000-00805f9b34fb - Properties: ['read']
  Characteristic: 00002aa6-0000-1000-8000-00805f9b34fb - Properties: ['read']
Service: 00001801-0000-1000-8000-00805f9b34fb
  Characteristic: 00002a05-0000-1000-8000-00805f9b34fb - Properties: ['indicate']
    Descriptor: 00002902-0000-1000-8000-00805f9b34fb
Service: 0000fe59-0000-1000-8000-00805f9b34fb
  Characteristic: 8ec90003-f315-4f60-9fb8-838830daea50 - Properties: ['write', 'indicate']
    Descriptor: 00002902-0000-1000-8000-00805f9b34fb
Service: 6e400001-b5a3-f393-e0a9-e50e24dcca9e
  Characteristic: 6e400002-b5a3-f393-e0a9-e50e24dcca9e - Properties: ['write-without-response', 'write']
  Characteristic: 6e400003-b5a3-f393-e0a9-e50e24dcca9e - Properties: ['notify']
    Descriptor: 00002902-0000-1000-8000-00805f9b34fb
  Characteristic: 6e400008-b5a3-f393-e0a9-e50e24dcca9e - Properties: ['notify']
    Descriptor: 00002902-0000-1000-8000-00805f9b34fb
  Characteristic: 6e400010-b5a3-f393-e0a9-e50e24dcca9e - Properties: ['read']
  Characteristic: 6e400020-b5a3-f393-e0a9-e50e24dcca9e - Properties: ['read']
  Characteristic: 6e400021-b5a3-f393-e0a9-e50e24dcca9e - Properties: ['read']
Service: 0000180f-0000-1000-8000-00805f9b34fb
  Characteristic: 00002a19-0000-1000-8000-00805f9b34fb - Properties: ['read', 'notify']
    Descriptor: 00002902-0000-1000-8000-00805f9b34fb
Service: 0000180a-0000-1000-8000-00805f9b34fb
  Characteristic: 00002a29-0000-1000-8000-00805f9b34fb - Properties: ['read']
  Characteristic: 00002a27-0000-1000-8000-00805f9b34fb - Properties: ['read']
  Characteristic: 00002a26-0000-1000-8000-00805f9b34fb - Properties: ['read']

重要的部分: Service: 0000fe59-0000-1000-8000-00805f9b34fb

Characteristic: 8ec90003-f315-4f60-9fb8-838830daea50 - Properties: ['write', 'indicate']

Descriptor: 00002902-0000-1000-8000-00805f9b34fb

CCCD

CCCD(Client Characteristic Configuration Descriptor), 控制客户端对特征值通知或指示的订阅。通常,向CCCD写入0x02意味着启用了指示 (indication),而0x01表示启用了通知 (notification)。

步骤

  1. 向Descriptor写入[0x02, 0x00]
  2. 向Characteristic 写入[0x01]

写入时要配置需要Response

if descriptor:
    print(f"Found Descriptor: {descriptor.uuid}")
    # 写入描述符以启用指示
    await self.client.write_gatt_descriptor(descriptor.handle, bytearray([0x02, 0x00]))
    print("Descriptor written successfully")
    await asyncio.sleep(1)
    value = await self.client.read_gatt_descriptor(descriptor.handle)
    print(f"Read value from CCCD: {value.hex()}")
    # 开始通知
    await self.client.start_notify(BLE_UUID_DFU_SERVICE, self.indication_handler)
    print("Indication started")

    # 写入DFU命令
    dfu_value = bytearray([0x01])
    await self.client.write_gatt_char(BLE_UUID_DFU_SERVICE, dfu_value, response=True)
    # disconnect from device
    await self.client.disconnect()

MTU

在Application中,MTU大小为23,而在Bootloader中MTU大小为247,并且PHY也设置到最大

BLE PHY 速率介绍

BLE PHY 有三种主要模式:

  1. 1M PHY:标准 BLE 传输速率,1 Mbps。
  2. 2M PHY:更高传输速率,2 Mbps,适用于高速数据传输。
  3. Coded PHY:较低速率,但增加了通信距离(BLE Long Range)。

Bootloader中的Service & Characteristic

Device address: FD:7D:71:71:64:1D
Service: 00001800-0000-1000-8000-00805f9b34fb
  Characteristic: 00002a00-0000-1000-8000-00805f9b34fb - Properties: ['read', 'write']
  Characteristic: 00002a01-0000-1000-8000-00805f9b34fb - Properties: ['read']
  Characteristic: 00002a04-0000-1000-8000-00805f9b34fb - Properties: ['read']
  Characteristic: 00002aa6-0000-1000-8000-00805f9b34fb - Properties: ['read']
Service: 00001801-0000-1000-8000-00805f9b34fb
Service: 0000fe59-0000-1000-8000-00805f9b34fb
  Characteristic: 8ec90002-f315-4f60-9fb8-838830daea50 - Properties: ['write-without-response']
  Characteristic: 8ec90001-f315-4f60-9fb8-838830daea50 - Properties: ['write', 'notify']