Telink之标准SDK的介绍_1

前提:常见的项目架构:应用层----》驱动层----》硬件层

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 配置,低功耗使能/失能,加密使能/失能、log输出等)进⾏配置

application file
app.c:⽤户主⽂件,⽤于完成 BLE 系统初始化、数据处理、低功耗处理、事件回调处理等。

eg. 用户设置、广播数据、应答数据、广播报告事件处理器、按键触发或广播触发、蓝牙主事件回调、
蓝牙控制器事件处理程序回调(蓝牙连接完成触发事件、蓝牙断开触发事件、蓝牙连接修改完成事件、蓝牙广播播报事件)
蓝牙 GATT 数据处理事件回调
各种设置初始化(设备天线功率等级、通道、名字(初始化和修改))
用户初始化(蓝牙协议栈(LL层、HCI层、Host层(GAP、L2CAP、GATT、SMP、ATT))、注册主机事件回调、用户配置初始化(如广播、应答、射频等))
超时设置、从深度睡眠模式被唤醒的用户设置初始化、蓝牙回路设置(while(1) {main_loop(); //包括BLE收发包处理与 user 任务})
备注:
① blc_controller_check_appBufferInitialization()函数(HCI层内):检查应用程序初始化的控制器缓冲区是否错误,需在LL层后调用。
② GAP初始化必须在其他主机特性(L2CAP、GATT、SMP)初始化之前完成
蓝牙协议栈的code入口函数有两个

  1. main.c ⽂件 irq_handler 函数中 BLE 相关中断的处理⼊⼝ irq_blt_sdk_handler();
    attribute_ram_code void rf_irq_handler (void) {
    ……
    irq_blt_sdk_handler ();
    ……
    }

2.application file文件 main_loop 中 BLE 逻辑和数据处理的函数⼊⼝ blt_sdk_main_loop();
void main_loop (void) {
/ BLE entry
blt_sdk_main_loop();
// UI entry
……
// PM process
……
}

④ 该文件极其重要,注意理解清除

app_att.c:这个⽂件提供了 GATT service 和 profile 配置⽂件,GATT service 表中已提供了标准的 GATT 服务、
标准的 GAP 服务、标准的 HID 服务以及⼀些私有服务等。⽤户可以参考这些添加⾃⼰的 service 和 profile。
app_ui.c:该⽂件主要提供了按键功能,也可能含有IR(红外)、battery detect(电池检测)等⽤⼾任务的处理⽂件。
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:该⽂件提供了Telink⾃定义的⼀套 pair 的⽅案。
device_manage.c:该⽂件主要是连接设备信息的管理
simple_sdp.c:该⽂件提供了 Master role 简单的 SDP(Service Discovery Protocol)实现⽅案

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(设备固件升级)

3、蓝牙协议栈:

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 !!!!!
6)寄存器设置小技巧:
REG_ADDR8(0x400 + ((i>>8)<<3)) 清空了低八位
eg: 1001 1111 1101 BIT9
0000 0000 1001 BIT1
0000 0100 1000 BIT4
7)CapSense:用于触摸式按键、触摸式滚动条(Slider)、触摸式平板(Touchpad)的触摸感应技术
CapSense触摸感应技术是基于Cypress PSoC(可编程的片上系统)CY8C21x34系列芯片开发的,可用于触摸式按键、触摸式滚动条(Slider)、触摸式平板(Touchpad)的触摸感应技术。它利用PSoC的CY8C21x34系列芯片一些特有的资源,根据电容感应的原理和松弛震荡器的技术实现触摸感应
8)Telink版本号更新在tl_check_fw.sh文件中

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值