前提:常见的项目架构:应用层----》驱动层----》硬件层
1、软件组织架构
顶层⽂件夹( 8 个):
algorithm,application,boot,common,drivers,proj_lib,stack,vendor
algorithm:提供⼀些加密算法,如 aes_ccm。⼤多数算法对应的 C ⽂件被封装在库⽂件中,只留对应的头⽂件。
application:提供⼀些通⽤的应⽤处理程序,如 print、keyboard、audio 等。
boot:提供 MCU 的 software bootloader,即 MCU 上电启动或 deep sleep 唤醒后的汇编处理程序,为后⾯ C 程序的运⾏做准备。
common:提供⼀些通⽤的跨平台的处理函数,如内存处理函数、字符串处理函数等。
drivers:提供 MCU 外设驱动程序,如 Clock、Flash、I2C、USB、GPIO、UART 等。
proj_lib:存放 SDK 运⾏所必需的库⽂件(如 liblt_827x.a)。BLE 协议栈、RF 驱动、PM 驱动等⽂件,被封装在库⽂件中,用户无法看见源文件。
stack:存放 BLE 协议栈相关的头⽂件。源⽂件被编译到库⽂件⾥⾯,对于用户不可⻅。
vendor:⽤于存放 demo code 或者用户⾃⼰的 code。
2、demo文件结构
①main.c ⽂件中包含 main 函数和中断处理函数。
包含了系统正常⼯作所需的配置,建议⽤户不要对它进⾏任何修改。
中断处理函数是系统触发中断时候的⼊⼝函数
②app_config.h 用户配置⽂件,⽤于对整个系统的相关参数(例如:BLE 参数,GPIO 配置,低功耗使能/失能,加密使能/失能等)进⾏配置
③application file
app.c:⽤户主⽂件,⽤于完成 BLE 系统初始化、数据处理、低功耗处理等。
app_att.c:这个⽂件提供了 GATT service 表和 profile ⽂件,GATT service 表中已提供了标准的 GATT 服务、
标准的 GAP 服务、标准的 HID 服务以及⼀些私有服务等。⽤⼾可以参考这些添加⾃⼰的 service 和 profile。
app_ui.c:该⽂件主要提供了按键功能。
app_buffer.c:该⽂件⽤于定义 stack 各层使⽤的 buffer,例如:LinkLayer TX & RX buffer、L2CAP layer MTU
TX & RX buffer、HCI TX & RX buffer 等
④common file
blt_soft_timer.c:该⽂件提供了软件定时器的实现⽅案。
custom_pair.c:该⽂件提供了泰凌⾃定义的⼀套 pair 的⽅案。
device_manage.c:该⽂件主要是连接设备信息的管理
simple_sdp.c:该⽂件提供了 Master role 简单的 SDP(Service Discovery Protocol)实现⽅案
⑤BLE stack entry
BLE 中断处理⼊⼝函数是 blc_sdk_irq_handler().
BLE 逻辑和数据处理⼊⼝函数是 blc_sdk_main_loop (),它负责处理 BLE 协议栈相关的数据和事件.
⑥寄存器设置小技巧:
REG_ADDR8(0x400 + ((i>>8)<<3)) 清空了低八位
eg: 1001 1111 1101 BIT9
0000 0000 1001 BIT1
0000 0100 1000 BIT4
⑧CapSense:用于触摸式按键、触摸式滚动条(Slider)、触摸式平板(Touchpad)的触摸感应技术
CapSense触摸感应技术是基于Cypress PSoC(可编程的片上系统)CY8C21x34系列芯片开发的,可用于触摸式按键、触摸式滚动条(Slider)、触摸式平板(Touchpad)的触摸感应技术。它利用PSoC的CY8C21x34系列芯片一些特有的资源,根据电容感应的原理和松弛震荡器的技术实现触摸感应
⑨ACL : 访问控制列表ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。
ACL本质上是一种报文过滤器,规则是过滤器的滤芯。设备基于这些规则进行报文匹配,可以过滤出特定的报文,并根据应用ACL的业务模块的处理策略来允许或阻止该报文通过.
ACL由一系列规则组成,通过将报文与ACL规则进行匹配,设备可以过滤出特定的报文.
参考链接:
https://support.huawei.com/enterprise/zh/doc/EDOC1100086646
⑩L2CAP :Logical Link Control and Adaptation Protocol,即逻辑链路控制和适配协议,是蓝牙系统中的核心协议.
实现:L2CAP负责适配基带中的上层协议,它同LM并行工作,向上层协议提供面向连接和无连接的数据服务,并提供多路复用,分段和重组操作,允许高层次的协议和应用能够以64KB的长度发送和接收数据包。
L2CAP提供了逻辑信道,名为L2CAP Channels,即在一个或多个逻辑链路上进行多路复用.
L2CAP提供了如下功能:
- 协议/信道多路复用
- 分段和重组
- 服务质量
L2CAP可分为两个部分: - Channel Manager
- Resource Manager
TIP:
L2CAP只支持ACL,而不支持SCO/eSCO(用预留宽带进行实时语音传输)
L2CAP不支持可靠的广播信道
参考链接:
https://www.cnblogs.com/hzl6255/p/3801732.html
⑩①HCI:主机控制接口(Host Controller Interface),属于蓝牙协议栈的一部分。
适用于蓝牙通讯模块的硬件部分。此定义描述了位于HCI驱动程序(主机的一部分,也即蓝牙通讯模块的使用者)和主机控制器固件(蓝牙通讯模块本身的一部分)之间的接口
参考链接:
https://baike.baidu.com/item/HCI/16020520
⑩②GAP:generic access profile,蓝牙基础配置文件
GAP主要对linklayer层(standby state、advertising state、initiating state、connection state)的状态进行了抽象,转化成上层的概念
对广播包数据进行封装,运用同一的格式和类型,已达到互联的目的。比如我们扫描设备的时候,会先发设备的名称,设备的名称就是运用统一的格式封装在adv的报文中,支持GAP的设备都能明白数据包的内容的意思
⑩③GATT :广播
GATT 连接,必需先经过 GAP 协议。在 Android 开发中,可以直接使用设备的 MAC 地址,发起连接,可以不经过扫描的步骤。这并不意味不需要经过 GAP,实际上在芯片级别已经给你做好了,蓝牙芯片发起连接,总是先扫描设备,扫描到了才会发起连接
GATT 连接需要特别注意的是:
GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播
中心设备和外设需要双向通信的话,唯一的方式就是建立 GATT 连接
参考链接:
https://blog.csdn.net/qq_42166454/article/details/108229186
⑩④OTA:通过无线通信方式实现DFU(设备固件升级)
蓝牙协议栈:
PHY层(physical layer物理层):用来指定 BLE 所用的无线频段,调制解调方式和方法等。PHY层做的好不好,直接决定整个 BLE 芯片的功耗,灵敏度以及 selectivity等射频指标。
LL层(Link Layer链路层):LL层是整个 BLE 协议栈的核心,也是 BLE 协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的 GAP 或者 GATT。
HCI(Host controller interface主控制接口):HCI是可选的,主要用于 2 颗芯片实现 BLE 协议栈的场合,用来规范两者之间的通信协议和通信命令等。
GAP层(Generic access profile通用访问配置):GAP 是对LL层payload(有效数据包)如何进行解析的两种方式中的一种(最简单的一种)。CAP 简单的对 LL payload 进行一些规范和定义,因此GAP能实现的功能极其有限。GAP 目前主要用来进行广播,扫描和发起连接等。
L2CAP层(logic link control and adaptation protocol逻辑链路控制与自适应协议):L2CAP 对 LL 进行了一次简单封装,LL只关心传输的数据本身,L2CAP 就要区分是加密通道还是普普通通,同时还要对连接间隔进行管理。
SMP(secure manager protocol安全管理器协议):SMP用来管理 BLE 连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是 SMP 要考虑的工作。
ATT(Attribute protocol属性的协议):ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE 协议栈中,开发者接触最多的就是 ATT。BLE引入了 attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
GATT(Generic attribute profile(通用属性配置):规范 attribute 中的数据内容,并运用group(分组) 的概念对 attribute 进行分类管理。没有GATT、BLE协议栈也能跑,但互联互通就会出现问题,也正是因为有个GATT和各种各样的应用profile,BLE拜托了zigbee等无锡那些一点兼容性困境,成了出货量最大的2.4G无线通信产品
备注:
1)具有远距离传输能力的高频电磁波称为射频
2)crc校验:循环冗余校验,位与
一个完整的数据帧:帧头+数据+校验位+帧尾
3)Software bootloader:软件引导程序
Telink 的 bootloader ⽂件是由两部分构成,link ⽂件和 cstartup.S 汇编⽂件
4)ack:标识字 mux:复用
5)reg_irq_src & FLD_IRQ_GPIO_EN !!!!!