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

什么是ant+协议
通过ant传输的数据的规范,约定了ant数据是如何使用的;(ant+也称device profile,功能同ble的profile)
ant+协议的广播信道默认2457Mhz;使得ant+传感器能够兼容性高些;
ant+开发需要先申请adoptor,然后继续申请ant+的network key,在代码中配置network key才能加入ant network;
网络密钥——这里是蚂蚁
ANT+ Device Profiles - THIS IS ANT

概括来说,
ant协议讲了ant channel是如何配置的,ant空中包都发了啥数据,ant network是如何规划;
ant+协议则讲了ant空中包解析后,得到的那8bytes的数据是干嘛的,具体的ant+协议可以查看对应的ant+ profile就行了;
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;每个设备可视为节点;
那么信道这么多,我们如何分区哪个信道就是我们用来通信的那个呢?我们用什么参数和变量来定义信道呢?
那么ant协议栈的节点与节点间的拓扑网络又是咋样的呢?
4 ant的信道channel
对于ant channel而言,channel本身都有哪些属性呢?channel传输的数据类型又有哪些呢?
4.1 信道类型channelTypes(1bytes)

channelTypes可以概括分为如上三类,单向信道,双向信道,共享信道;
其中单向信道和双向信道属于独立信道,独立信道只有一个主设备和一个从设备;共享信道有一个主设备和多个从设备,需要设备寻址;
特殊信道类型还有后台扫描信道、快速初始化信道、异步传输信道;其中后台扫描用于多连接后台扫描;另外两个分别用于控制应用和ANT-FS传输(没啥用);
后台扫描信道:在不影响信道通信时,持续搜索是否有满足配对条件的设备;每个设备只能有一个后台扫描信道,需要设置成低优先级模式;(有用)
信道频率捷变功能:当信道性能被显著影响时才改变工作频率;该功能需要设备支持且启用,且不建议使用;(没啥用)
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 >> 广播数据,系统默认数据类型,单向通信,由master发出;常用;
acknowledgedData >> 带ack响应的数据,确保数据准确送达;比如开关灯控制,请求电量,ant-fs控制等;
ack响应由协议栈底层确认,应用层不会察觉;应用层在协议层也可以回复数据;
burstData >> 带ack响应的快速连续的数据,最大吞吐量20kbps;比如ant-fs小文件上传使用;
advancedBurstData >> 升级版的burstData数据,最大吞吐量为60kbps;比如路线数据,训练记录传输;
5 ant的空中包结构
。。。[待补充]
6 ant的network实现举例
假设有个网络如下所示,nodeB和D为广播类型传感器,nodeC为需要ack的ant传感器,然后nodeA为类似码表的设备;
那么这个网络的拓扑结构改如何实现呢?
一种是通过独立信道的方式来实现,一种是通过共享信道的方式来实现;对于ant+设备是通过独立信道广播数据类型的方式来实现的;

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 生态中短期仍然是重要连接方式