• 物理层
1/ BLE 使用 2.4Ghz工业 科学 及 医疗 频段 (ISM).(2402Hz - 2480Hz )
2/ GFSK 调制 , 物理层比特率 1Mbit/s 1Mbps
3/ 40个通道, 37个自适应自动调频数据通道 用于两个连接设备的通讯, 3个固定广播通道 37(中心频率,2402Hz) 38(2426) 39(2480)
4/ 发射功率 (0.01mW(-20dBm) - 10mW(10dBm)) // 弱到强. 一般 接收到的频率为 -35dBm
  • 链路层
链路层有 报文结构
	前导码(1字节) + 接入地址(4) + PDU() + CRC(3,对PDU的计算) 
	硬件实现 		硬件实现  	 软件实现 		  硬件实现
						分两种
							广播接入地址是固定的 0x8e89bed6
							数据接入地址由 主机在发起态通过连接请求发送给从机.
PDU // 分为 广播通道和 数据通道
	报文(1字节) + 长度(1) + 数据净荷(0-296bit,0-37byte)

数据流是小端的,低字节先传送.

状态有 5 个状态
			扫描态
			  ︿
			  ﹀
广播态	‹›	就绪态	‹›	发起态
	  ↘	  ︿      ↙
			连接态

数据在空中传播前最后一步是经过白化(FSK接收机接收连续相同bit能力差,白化,使数据随机化)处理的.
在接收的第一步经过硬件去白化,然后再进行 CRC校验.
  • radio
上面说的是 链路层的软件部分并没有涉及到具体怎么驱动硬件,而是说的是
怎么调用驱动发送 PDU.
那么 这一部分 就是 radio 的驱动.

radio 也包括一个状态机 , 和  链路层的状态机不同.
在链路层的 连接态 之内, radio 也 涉及到 状态切换. 所以看来 这两个状态机没有特别具体的联系关系.

1. 发送 easy DMA
	将 PDU包的地址 赋给 寄存器,  然后 DMA 就 主动开始发送数据.
2. 包结构
3. 设备地址-白名单
4. radio 的状态机和时间参数
5. radio 的 基本配置

  • 最底层的包
链路层有 报文结构
	前导码(1字节) + 接入地址(4) + PDU() + CRC(3,对PDU的计算) 
	硬件实现 		硬件实现  	 软件实现 		  硬件实现
						分两种
							广播接入地址是固定的 0x8e89bed6
							数据接入地址由 主机在发起态通过连接请求发送给从机.
  • 广播通道包 及数据通道包
PDU // 分为 广播通道和 数据通道
	报文(1字节) + 长度(1) + 数据净荷(0-296bit,0-37byte)
广播通道的 PDU
	报文类型
数据通道的 PDU
	LLID
  • 数据净荷
广播信道的数据净荷
	由多个 AD(advertising and scan response data) 组成
	AD 格式
		长度 (1字节,数据的长度) +  数据(类型(1个字节)+类型数据)
						
数据信道的数据净荷
	L2CAP包
  • L2CAP包
length (2字节) + channel ID (2) + information payload

channel ID
	0x0004 属性协议 ,在 att 组包, gatt 使用 
	0x0005 低功耗信令通道  , 在 l2cap 组包 , gap 使用
	0x0006  安全管理协议 , 在smp 组包.
  • 0x0005
information payload
	code(1字节)  + identifier(1) +  length(2,data的字节数) + data

code :
	0x00 : 保留,没有用到
	0x01 : 命令拒绝
	0x12 : 连接参数更新 请求 // 连接参数的第一次确定是在 发起态的 CONNECT_REQ 中 , 设定了 连接间隔时间,和从机潜伏次数 .
							//	而这里是建立连接之后的 连接态中(且是从机发给主机)的 一个命令,可以 提出 更改(连接间隔时间和从机潜伏次数)的建议 
							//  在 建立连接之后的 连接态中(且是主机发给从机) (数据信道的数据净荷中, LL_CONNECTION_UPDATE_REQ), 也可以改变 连接参数.
 	0x13 : 连接参数更新 应答