前提:常见的项目架构:应用层----》驱动层----》硬件层
软件组织架构
顶层⽂件夹:algorithm,application,boot,common,drivers,proj_lib,stack,vendor
algorithm:提供⼀些加密算法,如aes_ccm。⼤多数算法对应的C⽂件被封装在库⽂件中,只留对应的头⽂件。application:提供⼀些通⽤的应⽤处理程序,如print、keyboard、audio等。boot:提供MCU的softwarebootloader,即MCU上电启动或deepsleep唤醒后的汇编处理程序,为后⾯C程序的运⾏做准备。common:提供⼀些通⽤的跨平台的处理函数,如内存处理函数、字符串处理函数等。drivers:提供MCU外设驱动程序,如Clock、Flash、I2C、USB、GPIO、UART等。proj_lib:存放SDK运⾏所必需的库⽂件。BLE协议栈、RF驱动、PM驱动等⽂件,被封装在库⽂件中,用户无法看见源文件。stack:存放BLE协议栈相关的头⽂件。源⽂件被编译到库⽂件⾥⾯,对于用户不可⻅。vendor:⽤于存放democode或者用户⾃⼰的code。
demo文件结构
蓝牙协议栈:
PHY层:用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做的好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。
LL层:LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者GATT。
HCI:HCI是可选的,主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。
GAP层:GAP是对LL层payload如何进行解析的两种方式中的一种。CAP简单的对LLpayload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。
L2CAP层:L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普普通通,同时还要对连接间隔进行管理。
SMP:SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。
ATT:ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
GATT:规范attribute中的数据内容,并运用group的概念对attribute进行分类管理。没有GATT、BLE协议栈也能跑,但互联互通就会出现问题,也正是因为有个GATT和各种各样的应用profile,BLE拜托了zigbee等无锡那些一点兼容性困境,成了出货量最大的4G无线通信产品
文章为作者独立观点,不代表股票配资公司观点