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
前提:常见的项目架构:应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个): algorithm,application,boot,common,drivers,proj_lib,stack,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:快递计费系统 快递行业高速发展,我们邮寄物品变得方便快捷。某快递点提供华东地区、华南地区、华北地区的寄件服务,其中华东地区编号为01、华南地区编号为02、华北地区编号为03,该快递点寄件价目表具体如表1所示。 表1 寄…...
JS - 自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围
自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围一. 方法使用二. 实现案例一. 方法使用 根据月开始日期星期几、月结束日期星期几,计算始周、末周占月的天数(每周周期段:上周六 —— 本周五&#x…...
Linux :理解编译的四个阶段
目录一、了解编译二、认识编译的四个阶段(一)预处理(二)编译(三)汇编(四)链接1.静态链接2.动态链接三、分步编译(一)创建.c文件(二)预…...
197.Spark(四):Spark 案例实操,MVC方式代码编程
一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…...
Vue 项目如何迁移小程序
最近我们看到有开发者在社群里提出新的疑惑「我手头已经有一个成熟的 HTML5 项目了,这种项目可以转为小程序在 FinClip 环境中运行吗?」。 经过工作人员的沟通了解,开发者其实是想将已有的 Vue 项目转为小程序,在集成了 FinClip …...
unit1-问候以及介绍
unit1-问候以及介绍 重点表达 1、问好 使用hello 和 hi 来打招呼。hello可以使用在正式和非正式的场合。hi是非正式的。但是hello 和 hi 都可以在一天的任何时段使用。 Hello. 你好。 Hi! 嗨! 介绍你的姓名 使用 I’m 和 My name is 告诉别人你的名字。 I’m Pau…...
杂记——19.git上传时出现the remote end hung up unexpectedly错误
git是大家常用的项目版本控制工具,熟练地使用git可以提高开发效率,但是有时在使用git推送代码时,会提示“the remote end hung up unexpectedly”的问题,那么git推送代码提示“the remote end hung up unexpectedly”怎么解决呢&a…...
python123平台题目
作业二 1. 2的n次方描述输入格式输出格式输入输出实例代码解析2. 输出最大值描述输入格式输出格式输入输出示例代码解析3. 字符串输出描述输入格式输出格式输入输出示例代码解析4. 字符串长度描述输入格式输出格式输入输出示例代码解析...
ROS学习笔记(六):TF坐标变换
ROS学习笔记(六):TF坐标变换TF的基本知识TF工具tf_monitortf_echostatic_transform_publisherview_frames创建TF广播器创建TF监听器TF的基本知识 TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据…...
【python】为你绘制玫瑰一束,爱意永存
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 若是有真情,爱意如溪水, 若是有真爱,爱意如阳光, 若是两情相悦,又岂在朝朝暮暮, 女子淡淡的情愫,深深地想念, 浓浓的爱意&a…...
智能家居创意产品一Homkit智能通断器
智能通断器,也叫开关模块,可以非常方便地接入家中原有开关、插座、灯具、电器的线路中,通过手机App或者语音即可控制电路通断,轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及,越来越多的人想将自己的家改…...
【数据库】MySQL表的增删改查(基础命令详解)
写在前面 : 语法中大写字母是关键字,用[]括这的是可以省略的内容。文中截图是相对应命令执行完得到的结果截图。1.CRUD 注释:在SQL中可以使用“--空格描述”来表示注释说明.CRUD:即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首…...
2023年全国最新保安员精选真题及答案15
百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 151.该图所要表达的是()消防器材。 A:地上消防栓 B:灭火器 …...
KPN对任意形状文本检测
文章目录一、研究背景二、方法流程1. 特征提取2. 核建议3. 实例无关特征图4. 轮廓生成5. 其余部分内容三、不足一、研究背景 相比起基于 FCN 网络的文本边缘检测网络,KPN网络可以更好地处理文本之间的间隔。 二、方法流程 1. 特征提取 FCN 和 FPN FCN(全卷积神经…...
同城外卖跑腿系统源码分析
外卖订餐已经成为很多“社畜”日常不可分割的一部分,足不出户,只需要一部电子设备即可在线订餐,并且可提供的选择非常多样化,与传统的电话订餐外卖模式相比也更便捷的多。 因此,同城外卖跑腿系统源码得以爆火ÿ…...
SCL_PFENET跑通填坑
1.数据准备:VOC2012数据集,initmodel文件夹(预训练模型),SegmentationClassAug数据2.训练部分:训练部分没什么需要改动的,也就改一下选择的配置文件。在config文件夹里有关于coco和voc数据的配置…...
Redis 做延迟消息队列
背景 看到消息队列,我们肯定会想到各种MQ,比如:RabbitMQ,acivityMQ、RocketMQ、Kafka等。 但是,当我们需要使用消息中间件的时候,并非每次都需要非常专业的消息中间件,假如我们只有一个消息队…...
刚果金FERI证书模板
FERI办理流程介(一)申请资料1:FERI APPLICATION FORM申请表格;2:草本海运提单(DRAFT B/L COPY);三:已盖章的商业发飘和箱单扫描件 (Commercial Invoice&Packing list)…...
什么是蜕变测试?
文章目录1.传统测试2.蜕变测试2.1.蜕变测试的理解2.2.蜕变测试的步骤2.2.1.生成蜕变关系2.2.2.生成蜕变用例2.2.3.执行蜕变用例2.2.4.校验蜕变关系参考文献1.传统测试 在没有蜕变测试的时代,传统软件测试的原理是:给定输入,观察被测软件的输…...
74. ‘pip‘不是内部或外部命令,也不是可运行的程序-解决办法
74. pip’不是内部或外部命令,也不是可运行的程序-解决办法 文章目录74. pip不是内部或外部命令,也不是可运行的程序-解决办法1. 课题导入2. 手动配置环境变量1. 准备工作2. 配置步骤3. 命令行安装1. 课题导入 有的同学在使用pip安装第三方库时…...
MIL图像处理那些事:应用程序模块(Mapp)- 初始化和控制MIL应用程序的执行环境
提示:本系列文章通过示例详细介绍MIL图像处理的基础知识及相关操作,让给你快速学会使用MIL进行图像处理 文章目录 前言初始化Mil环境MappAllocMappAllocDefault计时MappTimer异常处理打开和关闭 Mil 异常提示C# try...catch回调函数MappHookFunction查询MappInquire文件操作Ma…...
Pytorch基础语法学习2——argparse模块
一、基本介绍 argparse 模块是 Python 内置的用于命令行参数解析的模块,可以通过少数代码中变量或者参数的改变以实现对整个代码项目的操控。对于大型代码项目(如代码超过1000行),十分便捷 argparse 模块可以让人轻松编写用户友好的命令行接口…...
CHAPTER 2 目录及文件
目录及文件1 目录1.1 目录结构1.2 核心目录2 文件2.1 /etc/中的文件2.1.1 修改主机名(/etc/hostname)2.1.2 网卡配置文件2.1.3 开机自启动配置文件(/etc/rc.local)2.1.4 /etc/motd和/etc/issue2.2 /var/中的文件2.3 /proc/中的文件2.3.1 CPU信息(lscpu)3 文件类型3.1 类型说明3…...
2021牛客OI赛前集训营-提高组(第四场) T1最终测试
2021牛客OI赛前集训营-提高组(第四场) 题目大意 有nnn个选手参加比赛,比赛有两道题。 对于第一题,第iii个选手有50%50\%50%的可能拿到ai,1a_{i,1}ai,1分,有50%50\%50%的可能拿到000分。 对于第二题,第…...
【华为OD机试2023】租车骑绿岛 C++ Java Python
【华为OD机试2023】租车骑绿岛 C++ Java Python 前言 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过率。 Tips1:机试为ACM 模式 你的代码需要处理输入输出,input/cin接收输入…...
05-路由中的Hook
hook中使用 this.props中的路由 类组件中我们通过 this.props 获取到的关于路由的相关方法和数据,在函数组件中还是可以继续通过参数 props 来获取使用: export default function Login(prosp) {return (<button onClick{() > {props.history.pu…...
Ubuntu20.04 源码编译安装SRS-6流媒体服务器,开启GB28181支持
1. 下载SRS源码 直接从仓库clone git clone -b develop https://gitee.com/ossrs/srs.git 2. 编译源码 此处通过 --gb28181on 开启GB28181支持,默认是不开启的 cd srs/trunk && ./configure --gb28181on && make -j4 3. 编译过程中遇到的问题 …...
Web前端学习:六 -- 练习小总结
1、背景颜色透明度写法: background:rgba(R,G,B,Alpha透明度) 透明度范围:0–1,1完全不透明,0完全透明 2、伪类 hovar: 当鼠标接触该元素是,显示另一种样…...
有哪些做投行网站/quark搜索引擎入口
导读:谈到锁住,大家应该都熟悉,有朋友问台式电脑键盘锁是哪个键,还有人问台式电脑键盘被锁住按什么键恢复,这到底是咋回事?事实上台式电脑键盘被锁住按什么键恢复呢,以下是小编为你精心整理的台…...
一个产品有两个品牌怎么做网站/公司网站如何seo
一、ls定义及语法 ls:ls命令用于列出指定工作目录下之内容(包括文件和目录)。 语法:ls 参数 路径 --参数可选 二、参数及实例讲解 不带参数:显示指定目录的文件和目录(不包含隐藏属性的文件和目录&#…...
如何加强省市级门户网站的建设/成人大学报名官网入口
出发点: 微服务架构上通过业务来划分服务的,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业…...
网站建设有哪些软件/网络营销的四个特点
CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行;2.传输数据到GPU;3.确定grid,block大小; 4.调用内核函数,GPU运行程序…...
怎么做网络直播卖衣服的网站/大连网站搜索排名
Tomcat 6.0在Linux操作系统上的简单安装 文章来源:www.linuxeden.com-Linux伊甸园<!-- 添加网摘 -->加入收藏 推荐给朋友 会员写作投稿请先登录>> <!-- google_ad_client "pub-8876982994034985"; google_ad_width 336; google_ad_height 280; goo…...
哪些网站可以做相册视频/茂名seo顾问服务
概述Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。Tornado 和现…...