以下是车机连接Carlink的完整流程分析,结合BLE GATT协议交互细节,归纳为六个核心步骤,并附关键日志解析:
一、车机连接Carlink全流程(基于BLE GATT)
1. 广播阶段(Advertising)
车机行为:
-
广播包含Carlink服务UUID(如
2ABC...9100
)和厂商标识(0xfcfb)。 -
日志证据:
注:广播数据中隐藏自定义UUID(这里看到UUID 为0xfcfb).
2. 设备发现与连接(Connection)
交互流程:
-
手机扫描并识别车机广播的Carlink服务。
-
发起BLE连接(角色:手机=Central,车机=Peripheral)。
- 日志证据:
HCI LE Enhanced Connection Complete (Role=Slave, Peer=4445...)
_车机作为Slave,连接参数:Interval=30ms, Latency=0.4ms_
3. GATT服务发现(Service Discovery)
车机响应:
-
返回主服务列表(含Carlink自定义服务
2ABC...9100
)。 -
日志关键点:
ATT Read by Group Type Transaction (148 - Max Handle, Primary Service: 2ABC...9100)
_手机请求服务发现,车机返回服务句柄范围(0x0094-0x0098)。
2abcc85099354f8aba84123456789100
4. 特征枚举与配置(Characteristic Setup)
关键操作:
-
发现可写特征:
ATT Read By Type Transaction (149 - Max Handle, Characteristic: Write, 150 - 2ABC…9101)
确认车机的指令写入通道(Handle=0x0096)。
-
启用通知:
ATT Find Information Transaction (153 - Client Characteristic Configuration)
手机写入
0x0099
(Descriptor)启用0x0098
的Notify功能。
5. 鉴权与数据交换(Authentication)
车机主动流程:
- 发送鉴权请求:
-
车机界面 会生成一个鉴权数字码, 此时在手机界面中输入,后, 通过 att 传入给车机
ATT Write Transaction (2ABC…9101: 78 22 69 64…)
数据示例:
字段 | 可能含义 |
---|---|
78 22 | 指令头(鉴权类型) |
69 64 22 34 | 设备ID或Nonce |
- 接收手机响应:
通过0x0098
的Notify通道接收加密响应(日志未捕获,但预期为签名或会话密钥)。
6. 连接维护与数据传输(Data Channel)
优化与传输:
- 调整连接参数:
HCI LE Connection Update Complete (Interval=30 ms)
_平衡功耗与实时性,适合音视频传输。_
- 加密数据传输:
后续通信通过0x0096
和0x0098
加密交换(如Wi-Fi密码、投屏指令)。
二、关键协议细节归纳
1. 数据格式规范
操作类型 | 数据格式(Hex) | 说明 |
---|---|---|
鉴权请求 | [Header][Nonce][ID] | Header=指令类型,Nonce=随机数 |
通知响应 | [Status][EncryptedKey] | Status=0x00成功,Key=AES密钥 |
2. 安全机制
-
无配对鉴权:通过动态Nonce和签名(ECDSA)验证设备合法性。
-
会话密钥:基于ECDH派生,通过Notify通道加密传输。
3. 错误处理
-
ATT错误码:如写入失败返回
0x0A
(无效句柄)。 -
超时重试:默认30秒无响应则断开连接。
三、案例分析:连接失败场景
问题现象
手机无法接收到车机的Notify数据。
根因排查
-
未启用通知:
- 检查
0x0099
描述符是否写入0x0001
。
- 检查
-
MTU不足:
- 确认MTU已协商为251字节(日志中
ATT Exchange MTU Transaction
)。
- 确认MTU已协商为251字节(日志中
四、流程图解
+---------------------+ +---------------------+
| 车机 | | 手机 |
+---------------------+ +---------------------+
| 1.广播Carlink服务 |
| --------------------------> | 2.发现设备
| <-------------------------- | 3.发起连接
| 4.返回GATT服务列表 |
| <-------------------------- | 5.请求服务发现
| 6.确认特征权限 |
| <-------------------------- | 7.启用Notify
| 8.写入鉴权数据 |
| --------------------------> | 9.返回加密响应
| 10.建立数据通道 |
五、开发者checklist
-
服务配置:
- 确保车机GATT服务包含
2ABC...9100
和0xfcfb
(双协议兼容)。
- 确保车机GATT服务包含
-
特征权限:
- 写特征需配置
Write Without Response
,通知特征需绑定CCC描述符。
- 写特征需配置
-
安全实现:
- 实现Nonce生成、ECDSA签名验证、会话密钥派生。
通过此流程,车机可高效完成Carlink连接,实际开发中需结合厂商协议文档解码具体数据字段。