Android蓝牙开发常见问题

1 H4
H4:5线串口,TxD/RxD/Gnd/CTS/RTS
Figure 1-1 Why call UART H4

2 BR and EDR
BR:
68-bit or 72-bit Access Code +
54-bit Header +
0-2790 bits Payload

EDR:
68-bit or 72-bit Access Code +
54-bit Header +
5-us Guard +
11-us Sync +
0-2790 bits EDR Payload +
2-symbol Trailer
In EDR, Access Code + Header use GFSK, Sync + EDR Payload + Trailer use DPSK.

BLE:
1-byte or 2-byte Preamble +
4-byte Access Address +
2-258 bytes PDU +
3-byte CRC +
16-160 us Constant Tone Extension
ScanA and AdvA in PDU are the Bluetooth MAC.

3 bluedroid
3.1 MSM NVM
NV项是被存储在EFS文件系统(efs.img)中的 /nvm/num/ 或者 /nvm/context%d/ 子目录下。

3.2 HAL
@ hardware/qcom/bt/libbt-vendor/
NV_BD_ADDR_I: 447
ro.hardware.bluetooth
@ device/qcom/common/bdroid_buildcfg.h
#define BTM_DEF_LOCAL_NAME "QCOM-BTD"

3.3 HCI dump
@ /system/etc/bluetooth/bt_stack.conf
BtSnoopLogOutput=true
BtSnoopFileName=/sdcard/btsnoop_hci.log
TRC_HCI=5

[Settings][Developer options][Enable Bluetooth HCI snoop log]
btsnoop_hci.log

3.4 判断/dev/ttyS1是否被蓝牙进程打开?
lsof | grep /dev/ttyS1

3.5 Bond
@ system/bt/btif/src/bluetooth.c
static int create_bond(
        const bt_bdaddr_t *bd_addr,
        int transport);

// For NFC Touch Pairing
static int create_bond_out_of_band(
        const bt_bdaddr_t *bd_addr,
        int transport,
        const bt_out_of_band_data_t *oob_data);

3.6 Wireshark
Keywords: Sent Inquiry, Sent Create Connection, Sent Authentication Request

4 BLE
4.1 2字节或者4字节UUID与128 bit UUID对应关系
假如16 bit的UUID为0x1234,则转换成128 bit的UUID是:
0x00001234-0000-1000-8000-00805F9B34FB
假如32 bit的UUID是0x12345678,则转换成128 bit的UUID是:
0x12345678-0000-1000-8000-00805F9B34FB

ATT协议解析UUID支持16 bit和128 bit两种格式,所以32 bit UUID在ATT PDU发送的时候,需要转成128 bit发送。
BLE的广播报文中包含本机所有的服务16 bit UUID。

4.2 3种配对模式
JustWorks, use 000000
6-digit PIN
Out of band
1)双方都将生成一个16字节的随机数,同时再结合其它参数(包括密码),各自生成16字节的Key。
2)然后双方都将自己的随机数和Key发给对方,各自计算对方的Key,同时与对方发送过来的Key进行比较,相同则配对成功。

4.3 跳频
CONNECT_REQ报文中的5字节ChM(Channel Map,位图方式,每个bit表示一个channel(1表示可用,0表示不可用)和5 bit Hop,5 bit Hop范围是[5, 16]。
F(n+1) = (F(n) + hop) % 37
其中:
F(n+1)为下一个连接事件使用的信道;
F(n)为当前连接事件使用的信道;

4.4 ATT PDU格式
1字节opcode + 2字节handle + 2或者16字节UUID + 最多20字节数据 + 12字节加密数据

handle取值范围[1, 0xFFFF]。
属性权限由高层协议定义,对ATT协议不可见,也就是ATT PDU报文中看不到属性的权限字段。
Service = Service声明 + Characteristic声明 + Characteristic Value声明

ble - ATT profile详解

5 BLE Pairing
5.1 配对种类
PIN Code Pairing:需要双方蓝牙设备输入4位配对密码
Secure Simple Pairing:SSP,只需要双方确认屏幕上的6位随机数相同即可
- BLE选择何种配对方式,是跟双方的IO_Capability有关
- 蓝牙耳机使用SSP的Just Works -
  BT_SSP_VARIANT_CONSENT

5.2 IO Capability
- BTM_LOCAL_IO_CAPS
- DisplayYesNo - 设置只有输入YES和NO的能力,能够显示

5.3 Android SSP Just Works代码流程
typedef struct {
    [...]
    /** BT SSP Reply -
     * Just Works, Numeric Comparison and
     * Passkey
     * passkey shall be zero for
     * BT_SSP_VARIANT_PASSKEY_COMPARISON
     * & BT_SSP_VARIANT_CONSENT
     * For BT_SSP_VARIANT_PASSKEY_ENTRY,
     * if accept==FALSE, then passkey
     * shall be zero */
    int (*ssp_reply)(const bt_bdaddr_t *bd_addr,
            bt_ssp_variant_t variant,
            uint8_t accept,
            uint32_t passkey);
    [...]
};

<bta/include/bta_api.h>
/* Structure associated with
 * BTA_DM_SP_CFM_REQ_EVT */
typedef struct
{
    [...]
    /* IO Capabilities of local device */
    tBTA_IO_CAP     loc_io_caps;
    /* IO Capabilities of remote device */
    tBTA_AUTH_REQ   rmt_io_caps;
} tBTA_DM_SP_CFM_REQ;

5.4 CC2564 SSP Just Works
IO_Capability = icNoInputNoOutput
BLE模式免配对用的就是Just Works(密码是000000)
MITM:Man in The Middle

6 CSR bluecore
6.1 SDK
xIDE for ADK:Audio or Application Development Kit
xIDE for Bluelab
USB-SPI

6.2 CSR芯片版本差异
- rom版本一般是固定功能的,比较常见的是用于dongle和耳机的rom版本芯片,可以修改参数,但基本功能是固定的。
- flash版本可以自己开发固件,相对来说灵活性高一些;开发环境里面自带HCI以下协议。

7 蓝牙抓包工具
- BEX400: Bluetooth Explorer 400, Switzerland Ellisys
- FTS: FrontLine Sniffer, USA LeCroy
- Nordic EN-Dongle: BLE Sniffer and Wireshark
- TI CC2540: SmartRF Packet Sniffer

8 Abbreviations
ADK:Audio or Application Development Kit
BCSP:BlueCore Serial Protocol
COD:Class of Device
CSR:Cambridge Silicon Radio
ECO: Engineering Change Order, for Tapeout bug fix, [8th-Mar-2022]
H2: Part H:2 HCI USB TRANSPORT LAYER
H4: Part H:4 HCI UART TRANSPORT LAYER
PB-ADV: Provisioning Bearer. BLE mesh from CSR Mesh
PSKey:BlueCore Persistent Store Key
transparent:数据的透传
xIDE:CSR's Integrated Development Environment

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值