TI CC254x BLE教程 1
约定, 第一次翻译这种东西, 专有名词的翻译原则还是不太清楚, 总之涉及有可能误解的词, 都用双语, 如果是简单的, 直接英文或者中文, 取决于我是否能找到中文合适的词来翻译.
何为BLE:
1. 是一种蓝牙联盟Bluetooth Special Interest Group(BT-SIG)制定的无线传输协议, TI是联盟成员
2. 基于蓝牙4.0加入了一些新特性, 蓝牙4.0早于2010年6月就公布了.
3. BLE主要目标是低功耗, 低延时与低数据量的需求
4. 主要围绕智能手机与PC生态, 当然也能用在其他应用场景.
5. 在未来5年预计会有billions级别的设备被激活.
6. 并不向下兼容传统蓝牙设备.
架构/配置
1. 协议站包括两个区域:
Controller/Host 控制器与主机
Profiles跟Application在Host的GAP跟GATT层的顶端.
2. 在单一设备的解决方案中(或者说单一芯片解决方案), host, controller, profiles, 跟application都是在一个芯片上共同实现的.
3. 在双设备解决方案中, BLE控制器使用单独设备实现, 而host, application跟profiles是另一个设备.
4. 在网络处理(network processor)中, host跟controller在一起实现, 但是applicatoin跟profiles在另一个设备上, 比如PC上面, 你的应用程序在OS上面跑, 而蓝牙硬件在主板上跑.
5. CC2540可以支持上面所有的配置.
回头补充图片, Mac上面不知道怎么截图.
物理层(Physicial Layer)
RF
1. 使用2.4GHz ISM频段(band), ISM即工业, 科研, 医疗频段
2. 40个频道(channel), 每个2MHz间隔, 其中包括3个广告channel用来广播(broadcasting), 用来避免802.11即Wi-Fi的冲突. 37个动态频率
3. 物理层可以跟传统蓝牙在双模式(dual-mode)设备下一起工作.
这里也有张channel的图, 回头补上
链接层(Link Layer)
状态跟拓扑
1. 链接层有6种可能的状态:
a. 等待(Standby)
b. 广告(Advertiser)
c. 扫描中(Scanner)
d. 初始化(Initiator)
e. 主机(Master)
f. 丛机(Slave)
2. BLE是一个星形拓扑, Master可以管理连接(connection), 也可以连接多个slave, slave只能连接一个master(要不怎么叫slave呢).
广告事件(Advertisement Events)
1. 一个设备在广告状态将传输广告包
a. 广告包会包含一些数据
b. 广告包能发送给指定的扫描设备, 或者不指定
c. 广告设备能被连接, 或者不能被连接, 不能被连接的就是一个纯广播设备.
2. 在一个广告事件(advertising event)中, 一个广告包会在三个广告频道中依次传输(37, 38, 39)
广告间隔
1. 广告设备有一个广告间隔(你不能一直广告, 不然累死), 指定了两个广告事件中的最短时间.
2. 这个间隔可以是20ms跟10.24s之间.
3. 链接层会生成一个在广告事件中穿插的假随机时间, 在0-10ms之间, 用来避免广播设备之间产生同步.

广告类型
1. 广告包可以包含一些数据, 而单纯广播包是不需要连接的.
2. 下面是4种广告:
a. 可连接, 无指定设备(Connectable undirected): 即谁都可以连接.
b. 可由指定设备连接: 即只能由指定设备发起连接
c. 不能连接, 但是不指定设备: 通常用来当广播设备用
d. 可发现, 无指定设备: 所有人都可以扫描到设备, 但是没法连接.
扫描(Scanning)
被动扫描
1. 扫描者会监听广告频道
2. 当收到广告包的时候, 将它交给host处理
主动扫描
区别是收到广告包之后, 会主动发起连接请求
连接初始化(Connection Initiation)
1. 当一个扫描设备连接到一个可连接的广告消息时, 它可以由发送连接请求包给广告设备变成初始化状态
2. 连接请求中包含一套链接层参数, 包括后面会说到的有关时序的东西.
3. 一旦广告设备接受连接, 两个设备会进入连接状态, 负责初始化的设备会成为master, 广告设备会成为slave
连接参数
频道映射(channel map): 指定哪些频道可用
调频系数(hop increment): 从5到16的随机值, 用来作为频道的选择值, 后面会说到怎么选
连接间隔(connection interval): 1.25ms的倍数, 范围是7.5ms到4.0s
超时时长(supervision timeout): 10ms的倍数, 在100ms到32s之间, 比如大于(1+slave lantency)*(connection interval)
从机延迟(slave latency): 一个从0-499的系数, 不能大于(supervision timeout/conInterval)-1
连接事件(connection events)
类似可以理解成一次回话
1. 所有已连接设备的通讯都发生在连接事件中
2. 连接事件是周期性发生的, 间隔是由connection interval这个参数指定的, 比如指定15ms, 那么就会每15ms发生一次连接事件.
3. 每个事件都会占用一个频道(0-36), 而调频系数会决定下一次选择哪个频道.
4. 每个连接事件中, master会先传输 然后slave会在150us后回应.
5. 在一个连接事件中, master跟slave可以来回传输多次数据.
从机延迟(slave latency)
1. SI允许从机在没有数据要发送的情况下跳过若干个连接事件
2. 从机延迟参数指定了能跳过的最大的连接事件数量, 比如设定成499, 就可以跳过499次连接间隔时间, 500次连接事件中, 相应一次即可
3. 如果slave不相应本次连接事件, master会在下次slave回应的时候再传输数据.
4. "有效的连接间隔"就是当slave跳过了最大的从机延迟之后两个连接事件的时间长度. 比如, 如果连接间隔是100ms, SI是4, 那么有效的连接间隔就是(1+4)*100ms=500ms.
5. 无论跳过多少次, 最大时间不能超过32s.

总结一下:
短时间间隔带来两侧高功耗, 高传输效率, 低等候时间, 反之你懂的.
低/无从机延迟带来外设(Peripheral)的高功耗跟从外设到中心设备的高速数据传输(相对的).
高从机延迟能实现外设的低功耗.
TI CC254x BLE教程 1的更多相关文章
- TI CC254x BLE教程 4
TI的CC254x芯片 1. SoC 2. RF收发器+8051MCU 128/256KB Code空间. 3. Master或者Slave 4. 可编程flash 5. 8KB SRAM 6. 全软 ...
- TI CC254x BLE教程 2
连接更新请求(connection update request) 如果slave不满意现有的连接参数, 比如间隔, 延迟等等, 可以向master提出自己希望的参数范围 连接终止(connectio ...
- TI CC254x BLE教程 3
通用属性配置(Generic Attribute Profiles) 1. 数据在services里面以特征字(characteristics)的形式展示出来 如你所见, 特征字包含属性(Proper ...
- 【转】TI蓝牙BLE 协议栈代码学习
BLE就是低功率蓝牙.要着重了解两种设备: dual-mode双模设备:简单说就是向下兼容. single-mode单模设备:仅仅支持BLE. 关于开发主要讲的是单模设备,它可以只靠纽扣电池即可持 ...
- BLE教程 - 官方tutorial翻译
关键术语和概念 1. Generic Attribute Profile(GATT)GATT配置文件是一个通用规范,用于在BLE链路上发送和接收被称为"属性"的数据块.目前所有的B ...
- TI CC2541 BLE协议栈蓝牙MAC 地址
在Flash中有一块只读区域,从地址0x780E开始,蓝牙的MAC以小端方式存放在里面. 在TI的Peripheral例程里面,添加一个特征值,只读属性,6字节长度(蓝牙MAC长度为48-bit,6字 ...
- BLE资料应用笔记 -- 持续更新
BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...
- BLE资料应用笔记 -- 持续更新(转载)
简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.’让我们’更深入地探索这些方面吧. 蓝牙无处不在—,您可以在几乎每一台电话.笔记本电脑 .台式电脑和平板电脑中找到蓝牙.因此,您可以便利地连接键盘 ...
- TI低功耗蓝牙(BLE)介绍
TI低功耗蓝牙(BLE)介绍 本文档翻译和修改自参考资料:CC2540Bluetooth Low Energy Software Developer’s Guide (Rev. B),部分图片直接引用 ...
随机推荐
- python 内容查询小助手
点我,点我,python os.path 模块: 点我,点我,Python logging模块详解 点我,点我,python两个 list 获取交集,并集,差集的方法 点我,点我,python,my ...
- 内置对象Global和Math对象
Global对象Math对象 1.Global对象Global.属性方法或者Global.方法()是无效的,web浏览器将Global作为window对象的一部分加一实现.uri编码——了解2.eva ...
- nginx的内存管理
先来看内存池的实现,nginx的内存池实现的非常简单. 这里内存池的一些图表可以看老朱同学的slides : http://blog.zhuzhaoyuan.com/2009/09/nginx-int ...
- popen&pclose管道方式操作shell命令
popen, pclose - pipe stream to or from a process FILE *popen( const char *command, const char *type) ...
- nagios监控linux主机监控内存脚本
说明 工作包括两部分监控端(一二三)和被监控端(四) 一.nrpe.cfg中添加脚本 nrpe.cfg中添加命令索引 command[check_used_mem]=/usr/local/nagios ...
- javascript设计模式学习之十七——程序设计原则与面向接口编程
一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...
- DLL项目报错:fatal error lnk1104: cannot open file "...\xxx.dll"
在生成DLL的时候报这个错, 生成不了DLL 检查生成DLL的路径是否有其他程序在使用... 或者把杀毒软件关了试试...
- cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)
// // MainScene.hpp // helloworld // // Created by apple on 16/9/19. // // #ifndef MainScene_hpp #de ...
- c# 多线程与异步调用
异步操作的本质 在方法调用前为异步方法指定一个回调函数,方法调用后被线程池中的一个线程接管,执行该方法.主线程立即返回,继续执行其他工作或响应用户请求.如果异步方法执行完 毕,回调函数被自动执行,以处 ...
- Windows2000安装Winform Clickonce提示升级系统版本的解决方案
Windows2000安装Winform Clickonce提示升级系统版本.只需要把所有应用的DLL的独立性设置为false就可以了.