蓝牙协议:ant/ant+
1 ant/ant+
什么是ant协议
超低功耗的无线传输协议,约定了ant数据是如何传输的;
射频频率范围2400-2524Mhz,共125个channel;不建议信道建立连接后信道跳变;
ant协议讲了ant channel是如何配置的,ant空中包都发了啥数据,ant network是如何规划;(基础payload 8字节 >> 200us >> 0.5-4hz )

什么是ant+协议
通过ant传输的标准传感器的数据规范,约定了ant数据是如何使用的;
ant+协议的广播信道默认2457Mhz;使得ant+传感器能够兼容性高些;
ant+协议则讲了ant空中包解析后的那8bytes的数据是干嘛的,具体查看对应的ant+ profile;(ant+也称device profile)
网络密钥——这里是蚂蚁 申请adoptor>>申请network key>>在代码中配置network key才能加入ant network;
ANT+ Device Profiles - THIS IS ANT 下图列出了所有的ant+协议,所以ant+传感器只有这么多种;
2 ant的协议框架是咋样的?
ant协议架构和ble(host+controller)相似,由 host + antEngine 部分组成;host+antEngine也组成一个ant设备,即ant节点;
host >> 为 ant+ profile / app profile;ant应用层也支持开发私有app profile;
antEngine >> 为 ant stack (ant protocol + link layer engine) + 硬件射频电路;
对于ant stack部分garmin是全闭源的,在sdk中封装成了api给host层调用;

3 ant的协议数据是如何传输的呢?
在ant协议栈中,每个ant设备视为一个node,node与node通过频率相同的channel进行通信;由node与channel共同构成ant network;
需要注意,同一network中的节点才可以互相通信,一个node可以成为多个network的成员;
需要注意,在ant协议栈中和ble不同的是,ant协议栈将发送数据的设备作为master,接收数据的设备作为slave;
那么信道这么多,信道的属性都有啥呢?我们如何分区哪个信道就是我们用来通信的那个呢?
那么节点与节点间的拓扑网络又是咋样的呢?
4 ant的信道channel
对于ant channel而言,channel本身都有哪些属性呢?channel传输的数据类型又有哪些呢?
4.1 信道类型channelTypes(1bytes)

channelTypes可以概括分为如上三类,单向信道,双向信道,共享信道;进一步可以分为独立信道和共享信道;
独立信道:包含单向信道和双向信道;独立信道只有一个主设备和一个从设备,(即其他slave是否监听广播当前slave是无感的,它头上没有地址;)
共享信道:有一个主设备和多个从设备,需要slave设备寻址;(所以slave虽然不知道其他slave是谁,但是它可以察觉到其他slave参与了;)
特殊信道类型:后台扫描信道(用于多连接后台扫描,有用)、快速初始化信道(控制应用,没用)、异步传输信道(ANT-FS传输,没用);
后台扫描信道:在不影响信道通信时,持续搜索是否有满足配对条件的设备;每个设备只能有一个后台扫描信道,需要设置成低优先级模式;
信道频率捷变功能:当信道性能被显著影响时才改变工作频率;该功能需要设备支持且启用,且不建议使用;(没啥用)
当信道建立后再通过信道捷变功能修改信道频率,可能会导致设备返回搜索模式去重新同步;
双向信道传输的是acknowleged数据,单向广播信道传输的是boardcast数据;(共享信道传的啥,burst数据在哪传,用不上也找不到先放着)
4.2 信道频率RF frequency(1bytes)
RF frequency取值0-124,以1Mhz为步长递增,对应2400-2524Mhz的工作频率;
ant设备的默认射频频率为2466Mhz;ant+设备默认使用2450和2457Mh射频信道,建议非ant设备不要使用ant+默认频道;
4.3 信道ID channel ID(4bytes)
channel ID是信道的唯一标识符,由主设备指定;
只有当从设备匹配上了主设备的信道id之后,这两个设备间才建立相互通信的信道;
4.3.1 transmission type (1bytes)
如果是共享信道,这里决定共享地址长度,如果是扩展deviceNumber,还有部分bit给它用;

4.3.2 device type(1bytes)
最高bit 是paringBit,决定当前设备是否允许配对;剩下7bits决定设备类型,ant设备可自定义;ant+设备为固定取值如下,
eg:心率0x78,踏频0x7a,功率计0x0b,环境温度0x20...
4.3.3 device number(2bytes)
由主设备指定的设备编号,可用于识别设备;功能类似mac地址,通常与序列号相关联,或者由主设备随机生成;
eg:node1>>0x0001, node2>>0x0002, node3>>0x0003;
4.4 channel Period(2bytes)
主设备发送数据包的消息周期范围 [0.5-200] hz,而channel period取值范围 = 32768/消息周期范围 ;
eg:当消息周期为4hz,channel period = 32768/4 = 8192;
4.5 network
4.5.2 network number(1bytes)
标识当前ant设备上的可用网络,默认网络号0为公共网络;ant+设备都属于公共网络;
4.5.2 network key(8bytes)
每个network key对应一个network;通过唯一的network key进入唯一的network;全世界的ant+网络使用的是同一个network key;
4.6 ant dataTypes
前面的参数都是定义信道属性的参数,那么信道中传递的数据类型又是咋区分的呢?
ant信道传输的数据类型可以概括为如下4种类型,每种数据类型的数据包都是8bytes;
boardcastData >> 广播数据,单向通信用于单向信道0x50;系统默认数据类型,ant设备常用;
acknowledgedData >> 带ack回复的数据,用于双向信道;请求电量,ant-fs控制等,ant+设备使用;
ack响应由协议栈底层确认,应用层不会察觉;如果slave设备想发送数据到master,接收完毕后立即发送请求;
burstData >> 带ack响应的快速连续的数据,最大吞吐量20kbps;比如ant-fs小文件上传使用;
advancedBurstData >> 升级版的burstData数据,最大吞吐量为60kbps;比如路线数据,训练记录传输;
4.7 ant+心率传感器channel实例
本节把ant协议的属性变量都描述了一遍,那么实际咋用的呢?以ant+心率传感器举例看看配置参数;

4.8 ant设备配对
ant设备配对是指从设备获取主设备的信道id的过程;所以配对过程是从设备在那里单方面配对而不需要主设备配合;
配对bit:主设备端:必须设置配对位才可以用于配对;从设备端:从设备自身也有配对位,决定从设备是否允许响应配对位;
这个配对bit也没啥用,先放着;
4.9 近距离搜索功能
从设备开机后会扫描附近满足要求的特定类型信号id, 如果从设备信道id设置了通配符,附近可能有多个满足条件的主设备,
启用了近距离搜索功能后,则默认连接最先扫到的满足条件的主设备;近距离搜索设置后单次有效;
Garmin、Wahoo、Bryton 全部都要求 近距离配对
5 ant的空中包结构
。。。[待补充]
6 ant的network实现举例
假设有个网络如下所示,nodeB和D为广播的ant传感器,nodeC为ack广播的ant+传感器,然后nodeA为类似码表的设备;
那么这个网络的拓扑结构改如何实现呢?
一种是通过独立信道的方式来实现,一种是通过共享信道的方式来实现;对于ant+设备是通过独立信道ack广播数据类型的方式来实现的;

6.1 独立信道实现上述网络的设置


对于master而言,设置好channel type,然后在设置channel ID,然后开启通道,周期性发送广播数据即可;
对于slave而言,设置好channel type,channel ID然后开启开启通道,去扫描是否有匹配的通道;
有的话slave进行配对(ant设备的配对只要slave自己配对记住信息即可)然后继续后台扫描,没有的话slave继续扫描是否有其他匹配的通道;
nodeAB,AC,AD属于三个独立的信道,nodeD和nodeB的设置流程一样,改个信道id即可;他们都属于默认公共网络;
对于ant+传感器而言,使用的是当前这种独立信道的广播模式的网络;
6.2 共享信道实现上述网络的设置


对于共享网络而言,slave节点在网络中仅有自身和maser节点可见,需要master节点请求后slave才会发送广播数据;
master需要依次轮询每个地址,所以数据会有延迟;
6.3 注意事项
master能够轮询slave,是因为它预先知道了slave的共享地址,master知道该去哪个信道上获取数据也是因为预先约定好了;
所以对于ant协议而言,很多通信的信息其实都依赖于事先已经约定好的规则;
7 ant协议的网络拓扑
好的,前面我们刚举了个常见的网络结构来解释ant传感器的常见用法;那么对于ant协议而言都有哪些拓扑结构呢?
我们继续看看各种类型的拓扑结构,以及这个拓扑结构的常见用法;

上图概括了ant协议给出的拓扑结构,部分拓扑结构属于理论用法,未落地;
对于第一行中的star结构,是属于boardcast + peerToPeer组成,所以这三个拓扑结构是具有包含关系的,其他结构也有相同包含关系;
ant协议的常见用法则是:ant传感器在那广播,然后这个广播要么被一个从设备接收,要么被多个从设备接收;
8 ant+的开发过程中的相关工具和文档都有哪些呢?
技术常见列表解答 >> Tech FAQ - THIS IS ANT 帮助不大可以看看;
ant协议的8个特性 >> Advanced Features - THIS IS ANT
软件工具 >> Software Tools - THIS IS ANT
simulant+ : pc端在线模拟配置ant+数据,被连接进行数据通信;
antwareII : pc端在线模拟配置ant+数据,被连接进行数据通信; 同simulant+,比simulant+配置详细;
pc端在线模拟central,连接其他ant+传感器,接收数据;
下载页面 >> 咋用呢? 用到的手册只有 :《消息手册 》+ 《对应功能ANxx手册 》 + 《device profile手册》
《消息手册》定义ant协议及用法
ant+对应特性 由《消息手册》和相关特性的《对应功能ANxx手册 》描述
ant+对应 device profile 有对应的《device profile手册》可以查看
sdk-ant-2.0.0 >> 欢迎来到 ANT 的 nRF Connect SDK!—— ANT提供的nRF Connect SDK文档
ant论坛 >> 可能没有维护;
9 sdk-ant-2.0.0 sdk目前都实现了哪些例程呢?
目前sdk中实现一个高级爆发模式的例程,一个ant广播数据类型的收/发例程,一个加密数据类型的收/发例程,一个ant hrm接收例程,
以及3个ant+收/发例程,收/发例程分开算的话一共有13个例程;
看下sdk都实现了哪些例程,就可以知道ant协议栈我们实际能够开发的功能都有哪些;
10 ant+的发展前景咋样?
大概是ble正在全面取代ant+,garmin已经不再更新ant/ant+协议了;ant+协议正在自然退场;
大概市场上还有大量ant+的garmin和第三方设备,所以ant+协议还在做兼容性维护,但不再更新;
ANT+ 协议 Garmin 基本停止发展
文档 deprecated 说明其进入“仅维护,不更新”状态
Garmin 不会弃用,但也不会继续推动
长期会被 BLE 完全取代
在 Garmin 生态中短期仍然是重要连接方式

浙公网安备 33010602011771号