- BLE的体系结构主要由三部分组成,分别是控制器(controller),主机(Host)和应用程序(Application),如下图所示:
Application layer顾名思义主要是用于实现业务层的需求,运行一些软件完成用户对应的一些需求。
Host层就是我们常说的BLE协议栈,用来管理设备之间的通信协议,包含逻辑链路控制和适配协议(L2CAP)、属性协议(Attribute Protocol)、安全管理器协议(Security Manager Protocol )、通用属性规范(GATT)、通用访问规范(GAP)以及主机控制器接口(HCI)的上半部。BLE协议栈通常用纯软件来实现,实现较为复杂,当然也有硬件协议栈(intel大佬们做的那种),但是不普遍。
对于IC设计来说的,主要关注的对象在Controller部分,Controller主要的对上层过来的数据进行打包和发送,接收端则负责信号的接收和解包。其中包含两个重要的部分,即Link layer和physical layer。以发送端为例,Link layer主要是为数据包进行打包,physical layer则是负责将信号调制到载波然后经射频发出。
- Link layer的的报文格式如下所示:
- 其中Preamble为前导码,主要用于接收机的频偏同步和定时同步,还能用于自动增益控制。
- Access Address是接入地址,在BLE设备连接时,首先主BLE设备会发起广播模式,产生一个固定的广播地址(0x8E89BED6),当从BLE设备扫描到主设备的广播后,双方通信会产生随机的地址,Access Address的具体规则可以去看Core_v4.2手册。
- PDU则是主要携带的数据包,在Controller将整个报文解析后只剩下PDU传输给HCI中。
- CRC则是纠错编码,但是主要用具检错,具体功能可以看之前的文章。
整个数据流的处理过程如下图所示:
数据包经过加密后生成CRC码,然后白化后发送出去,接收端实现相逆的过程。关于link layer的简单介绍就先到这里,下面我们详细的介绍下physical layer部分。
physical layer的无线信道规定在了2.4GHZ频段,分为40个信道,如下所示:
上图中三个红色的信道代表广播信道。物理层的调制方式采用高斯频移键控(GFSK,Gaussian Frequency Shift Keying )。GFSK信号处理框图如图所示:
首先将信号进行编码,将单bit信号通过NRZ编码器获得NRZ码,如图所示:
由于NRZ序列相位存在不确定的间断,导致其频谱较宽,带外特性较差,因此需要过一个脉冲成型滤波器来对其进行截断的同时来限制其带宽。这里的脉冲成型滤波器BLE规定采用高斯滤波器,其冲击响应如下:
利用matlab的gaussdesign函数可以简单的设计出高斯滤波器,其离散形式如下:
该函数的参数如下:
%bt:3db单边单宽和符号时间的乘积
%span:截断长度(符号周期)
%sps:SamplesPerSymbol,过采样因子,每个符号包含的采样点个数
h_gauss = gaussdesign(bt,span,sps);
第一个参数根据BLE的规定是0.5,后两个参数根据设计出滤波器的复杂度和采样频率来调整。
经过高斯滤波器前后的波形如图所示:
在看下经过滤波器前后的频谱:
明显的,通过滤波器后的信号的高频分量大多都被滤除掉了。
这次水一水就先写这么多,下面剩下没写的调制部分放到后面去,至于FPGA的实现,matlab可以直接生成HDL源码,也是十分简单的,就是固定系数的乘法可以参考我之前的bug记录做个优化,matlab生成的HDL代码超过知乎限制了。。。。发不出来了ORZ..
那就看个仿真结果吧!
可以明显的看出,NRZ被平滑掉了:
睡觉睡觉~
参考文献
[1] Bluetooth S I G. Inc.,“Bluetooth Specification Version 4.2”[J]. 2010)[2015]. Http://www. bluetooth. com.
[2] 李然. 一款低功耗蓝牙 SoC 的设计与验证[D]. 西安电子科技大学, 2015.
[3] 梁振. 低功耗、小面积BLE射频芯片研究与设计[D].华南理工大学,2019.