当前位置: 首页 > news >正文

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

相关文章:

Telink之标准SDK的介绍_1

前提&#xff1a;常见的项目架构&#xff1a;应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个)&#xff1a; algorithm&#xff0c;application&#xff0c;boot&#xff0c;common&#xff0c;drivers&#xff0c;proj_lib&#xff0c;stack&#xff0c;v…...

JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理

目录 0 前言 1 准备工作介绍 2 一维数组 2.1 return形式 2.2 参数形式 3 二维数组 3.1 return形式 3.2 参数形式 4 三维数组 4.1 return形式 4.2 参数形式 5 测试代码 6 结果说明 0 前言 就如之前我写过的一篇文章【JNI内形参从C代码中获取返回值并返回到Java层使…...

快递计费系统--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例5&#xff1a;快递计费系统 快递行业高速发展&#xff0c;我们邮寄物品变得方便快捷。某快递点提供华东地区、华南地区、华北地区的寄件服务&#xff0c;其中华东地区编号为01、华南地区编号为02、华北地区编号为03&#xff0c;该快递点寄件价目表具体如表1所示。 表1 寄…...

JS - 自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围

自定义一周的开始和结束&#xff0c;计算日期所在月的周数、所在月第几周、所在周的日期范围一. 方法使用二. 实现案例一. 方法使用 根据月开始日期星期几、月结束日期星期几&#xff0c;计算始周、末周占月的天数&#xff08;每周周期段&#xff1a;上周六 —— 本周五&#x…...

Linux :理解编译的四个阶段

目录一、了解编译二、认识编译的四个阶段&#xff08;一&#xff09;预处理&#xff08;二&#xff09;编译&#xff08;三&#xff09;汇编&#xff08;四&#xff09;链接1.静态链接2.动态链接三、分步编译&#xff08;一&#xff09;创建.c文件&#xff08;二&#xff09;预…...

197.Spark(四):Spark 案例实操,MVC方式代码编程

一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…...

Vue 项目如何迁移小程序

最近我们看到有开发者在社群里提出新的疑惑「我手头已经有一个成熟的 HTML5 项目了&#xff0c;这种项目可以转为小程序在 FinClip 环境中运行吗&#xff1f;」。 经过工作人员的沟通了解&#xff0c;开发者其实是想将已有的 Vue 项目转为小程序&#xff0c;在集成了 FinClip …...

unit1-问候以及介绍

unit1-问候以及介绍 重点表达 1、问好 使用hello 和 hi 来打招呼。hello可以使用在正式和非正式的场合。hi是非正式的。但是hello 和 hi 都可以在一天的任何时段使用。 Hello. 你好。 Hi! 嗨&#xff01; 介绍你的姓名 使用 I’m 和 My name is 告诉别人你的名字。 I’m Pau…...

杂记——19.git上传时出现the remote end hung up unexpectedly错误

git是大家常用的项目版本控制工具&#xff0c;熟练地使用git可以提高开发效率&#xff0c;但是有时在使用git推送代码时&#xff0c;会提示“the remote end hung up unexpectedly”的问题&#xff0c;那么git推送代码提示“the remote end hung up unexpectedly”怎么解决呢&a…...

python123平台题目

作业二 1. 2的n次方描述输入格式输出格式输入输出实例代码解析2. 输出最大值描述输入格式输出格式输入输出示例代码解析3. 字符串输出描述输入格式输出格式输入输出示例代码解析4. 字符串长度描述输入格式输出格式输入输出示例代码解析...

ROS学习笔记(六):TF坐标变换

ROS学习笔记&#xff08;六&#xff09;&#xff1a;TF坐标变换TF的基本知识TF工具tf_monitortf_echostatic_transform_publisherview_frames创建TF广播器创建TF监听器TF的基本知识 TF是一个让用户随时间跟踪多个坐标系的功能包&#xff0c;它使用树形数据结构&#xff0c;根据…...

【python】为你绘制玫瑰一束,爱意永存

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 若是有真情&#xff0c;爱意如溪水&#xff0c; 若是有真爱&#xff0c;爱意如阳光&#xff0c; 若是两情相悦&#xff0c;又岂在朝朝暮暮&#xff0c; 女子淡淡的情愫&#xff0c;深深地想念&#xff0c; 浓浓的爱意&a…...

智能家居创意产品一Homkit智能通断器

智能通断器&#xff0c;也叫开关模块&#xff0c;可以非常方便地接入家中原有开关、插座、灯具、电器的线路中&#xff0c;通过手机App或者语音即可控制电路通断&#xff0c;轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及&#xff0c;越来越多的人想将自己的家改…...

【数据库】MySQL表的增删改查(基础命令详解)

写在前面 : 语法中大写字母是关键字&#xff0c;用[]括这的是可以省略的内容。文中截图是相对应命令执行完得到的结果截图。1.CRUD 注释&#xff1a;在SQL中可以使用“--空格描述”来表示注释说明.CRUD:即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首…...

2023年全国最新保安员精选真题及答案15

百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 151.该图所要表达的是&#xff08;&#xff09;消防器材。 A:地上消防栓 B:灭火器 …...

KPN对任意形状文本检测

文章目录一、研究背景二、方法流程1. 特征提取2. 核建议3. 实例无关特征图4. 轮廓生成5. 其余部分内容三、不足一、研究背景 相比起基于 FCN 网络的文本边缘检测网络&#xff0c;KPN网络可以更好地处理文本之间的间隔。 二、方法流程 1. 特征提取 FCN 和 FPN FCN(全卷积神经…...

同城外卖跑腿系统源码分析

外卖订餐已经成为很多“社畜”日常不可分割的一部分&#xff0c;足不出户&#xff0c;只需要一部电子设备即可在线订餐&#xff0c;并且可提供的选择非常多样化&#xff0c;与传统的电话订餐外卖模式相比也更便捷的多。 因此&#xff0c;同城外卖跑腿系统源码得以爆火&#xff…...

SCL_PFENET跑通填坑

1.数据准备&#xff1a;VOC2012数据集&#xff0c;initmodel文件夹&#xff08;预训练模型&#xff09;&#xff0c;SegmentationClassAug数据2.训练部分&#xff1a;训练部分没什么需要改动的&#xff0c;也就改一下选择的配置文件。在config文件夹里有关于coco和voc数据的配置…...

Redis 做延迟消息队列

背景 看到消息队列&#xff0c;我们肯定会想到各种MQ&#xff0c;比如&#xff1a;RabbitMQ&#xff0c;acivityMQ、RocketMQ、Kafka等。 但是&#xff0c;当我们需要使用消息中间件的时候&#xff0c;并非每次都需要非常专业的消息中间件&#xff0c;假如我们只有一个消息队…...

刚果金FERI证书模板

FERI办理流程介&#xff08;一&#xff09;申请资料1&#xff1a;FERI APPLICATION FORM申请表格&#xff1b;2&#xff1a;草本海运提单(DRAFT B/L COPY)&#xff1b;三&#xff1a;已盖章的商业发飘和箱单扫描件 &#xff08;Commercial Invoice&Packing list&#xff09…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...