1,transport
HCI的数据格式:
1)HCI COMMAND :由host发送给controller的命令
2)HCI EVENT:由controller上报给host的事件
3)HCI ACL:host跟controller双向交互的普通数据
4)HCI SCO: controller和host双向交互的通话/语音识别数据
5)HCI ISO: BLE audio
Transport作用:
1,解决问题核心(区分数据格式,发送的数据格式是什么类型的)
2,补充其他功能 (WS 流控)
分类:
串口:H4 H5 BCSP
USB:H2
SD:
本质上每一种传输协议会有1BYTE来表示自己的身份
UART协议
1,UART概念
串行数据总线
全双工
1)并行发送数据
发射器 0 -> 0 接收器
1 -> 1
2 -> 2
....
7 -> 7
特点:不抗干扰,距离近,速率快,成本高
2)串行发送数据
发射器 0 1 2 3 4 5 6 7 -> 0 1 2 3 4 5 6 7接收器
特点:抗干扰,距离远,速率慢,成本低
3)UART数据格式
①起始位 开始数据传输时发送方要先发一个低电平‘0’来表示传输字符的开始。由于空闲位一直是高电平,所以开始传输时发送一个明显区别于空闲状态的信号低电平。
②数据位 数据可以是5,6,7,8,9位 可配置,一般都是8位。先发送最低位,后发送最高位。
③校验位 奇偶校验
4)数据速率
115200 921600 3M.....
波特率(bps bit per second)
Q1:真实的传输user速率是多少呢?
A1:取决于数据位/校验位/停止位各自配置多少,比如我们数据位配置为8,校验位无,停止位为1,那么速率应该为115200/(1+8+1) = 11620 BYTE/S
Q2:为什么uart没有时钟。是如何采集数据呢?
A2:取决于波特率的,收发双方对齐波特率即可。
Q3:为什么每个data都要经历一遍开始位,校验位,停止位这个过程呢?
A3:防止ppm误差造成大量数据包出错
5)流控
一般UART传输数据只通过RX/TX即可,如果需要硬件流控,则需要CTS/RTS,一般在蓝牙H4 transport需要流控
流控原理:
RTS(require to send,发送请求)为输出信号。本设备准备好接收数据,低电平有效。
CTS(clear to send,发送允许)为输入信号,是否可以向对方发送数据,低电平有效。
如果设备A要给设备B发送数据,需要先检测local CTS是否拉低,如果是低电平,则可以发送数据。
如果设备A要接受B的数据,先拉低RTS表述可以接受,然后B开始发数据。
USB
1,概念
host/device两个角色
-
Host(主机): 主机是USB总线的控制方,负责管理和控制数据传输。它会向设备发送请求,管理USB设备的连接、断开和供电等功能。在大多数情况下,Host通常是计算机、智能手机或嵌入式系统。
-
Device(设备): 设备是由主机控制的从属设备,它响应主机的请求并进行数据传输。USB设备的典型例子包括鼠标、键盘、打印机、存储设备等。
-
电脑是Host:它管理整个USB连接,负责轮询鼠标、获取鼠标的输入数据,并供电给鼠标。
-
鼠标是Device:它等待电脑(Host)的请求,响应请求并将用户操作数据(例如鼠标移动和按键点击)传输给电脑。
2,TYPE-A TYPE-B TYPE-C
3,USB设备的插入检测和速度检测
1. VBUS 电压检测
在 USB 接口中,有一条称为 VBUS 的电源线,当 USB 设备插入后,它会从主机(如计算机、手机等)获取电源(通常是 +5V)。USB 控制器通过监测 VBUS 引脚上的电压来判断设备是否插入。
- 无设备连接时:VBUS 电压为 0。
- 设备插入时:VBUS 电压上升到 5V,控制器检测到这个电压变化,便可以确认有设备连接。
2. D+ 和 D- 信号线检测
在 USB 2.0 及以下版本的设备中,除了 VBUS 之外,控制器还会通过 D+ 和 D- 两根信号线的上拉或下拉电阻状态来识别设备类型(如低速、全速和高速设备)。
- 低速(LS)设备:在 D- 线上有上拉电阻(1.5kΩ),控制器会检测到 D- 线上拉。
- 全速(FS)设备:在 D+ 线上有上拉电阻(1.5kΩ),控制器会检测到 D+ 线上拉。
- 高速(HS)设备:在初始阶段和全速设备相同(D+ 线上拉),但在后续握手过程中会切换到高速模式。
通过这些上拉电阻的位置,USB 控制器可以判断设备是否为低速、全速还是高速,从而进行相应的配置。
4,USB的枚举过程
当设备连上之后。。。。
主机(host):你是什么设备呀?
设备(device):device descriptor。。
H:你有几种功能呀?
D:configuration descriptor。。。
H:每个功能有几个接口呀?
D:interface descriptor。。。
H:每个接口使用哪几个端点?
D:endpoint decriptor。。。
H:好了,我知道你是谁了,开始传数据吧
D:OK gogogo
usb协议封包直接对着协议抓wireshark包分析即可。
5,USB传输类型
1,控制传输(controller): 非周期性,突发
·用于命令和状态的传输
2,大容量数据传输:非周期性,突发
·U盘,数据 任意带宽,允许延迟
3,同步传输:周期性
·电话语音 持续性传输
4,中断传输
·HCI event
H4 解读
1,模型
1)HCI COMMAND :由host发送给controller的命令
2)HCI EVENT:由controller上报给host的事件
3)HCI ACL:host跟controller双向交互的普通数据
4)HCI SCO: controller和host双向交互的通话/语音识别数据
5)HCI ISO: BLE audio
TLV模型
2,RS232
流控用于方式buff太快。
3,Error recovery
假如type丢了怎么办呢?
比如controller 收到错的commend,那他会报给host一个HCI_HW_ERROR,此时host会重新reset
H2解读
1,USB的transport叫H2