首页 > 编程知识 正文

蓝牙 AVRCP 版本 AVRCP 1.4(默认),蓝牙AVRCP是什么

时间:2023-05-04 05:14:53 阅读:187308 作者:3482

在这里讨论蓝牙的AVRCP协议,要理解AVRCP,需要先了解AVCTP;

 

我们分两个部分来进行;

1、AVCTP协议;

2、AVRCP协议;

 

下面先来看AVRCp协议:

 

一、概述

1、定义

AVCTP(Audio/Video Control Transport Protocol Specification)音频/视频控制传输协议是一个框架协议,描述蓝牙设备间Audio/Video的控制信号交换的传输机制,具体的控制信息(编码和格式)由其指定的协议(如AVRCP)实现,AVCTP本身只指定控制command和response的总体的格式,AVCTP是建立在L2CAP上的;

 

2、角色

AVCTP分为两个角色,CT(The Controller)是命令的发起方,命令接收方是TG(The target),如下图:

AVCTP通信要求已经建立了ACL链接,AVCTP交互是在面向连接的通道中的双向通信,

 

 

 

3、通信过程

首先会有CT发起通信,发送命令道TG端;

一个完整的AVCTP消息包含一个指定TG地址的命令,然后由TG端回复消息,AVCTP不会控制命令或响应的顺序或定义CT/TG的行为,大体流程可参照下图:

因为AVCTP是建立在不可靠的ACL上,所以存在命令收不到应答的情况,命令的重发不是必须的,这个由应用层开发者决定;

 

4、通信模式

在AVCTP中,bit和byte传输时采用大端模式,即高字节在左侧;

 

二、AVCTP消息包格式

1、概述

AVCTP命令或应答在传输时是包含在一个或多个AVCTP packets中,这些包中包含AVCTP header和多个消息体部分,但是在AVCTP中并未定义length域,它是依靠L2CAP层去限制发送的包数,所以AVCTP也需要遵循L2CAP协议长度的相关定义;

 

2、消息格式

大部分的AVCTP命令以负载的方式通过单一L2CAP包传输,但也有少数大信息AVCTP包需要被拆分,通过多个L2CAP包传递出去,下面我们分别来看这两种包格式

 

a、不拆分的包格式,见下图:

 

 

格式中bit含义spec中都有说明,我们再详细看下;

TL占用了4bit,它是通信中标识唯一的tag,由应用层给出其值;

PT是包类型,PT=0时表示开始包,PT=10表示中间包,PT=11表示结束包,在非拆分包中,PT=0;

IPID只有在响应为无效包时才会置位1,其他情况都为0;

 

 

 

上图显示了几个信息:

(1) AVCTP header为3字节;

(2)不拆分的AVCTP包不能大于L2CAP的MTU大小;

 

 

b、拆分包格式,如下图:

 

可以看到拆分包格式start packet多了一个字节,Number of AVCTP Packets,continue packet 和end packet去掉了IPID和PID字段,AVCTP通过L2CAP层保证包的每个包的完整性及传递顺序,但无法保证所有包的完整性;由于信道的不稳定性,可能会产生AVCTP丢包,我们看下拆包AVCTP在L2CAP的拆包方式,如下图:

 

 

3、AVCTP Message Information Part的说明

这部分可以包含不定长度的命令或应答帧;

其具体格式需要参照具体的profile,如AVRCP,AVDTP等;

 

三、总结

好了,分析到这里相信大家对AVCTP有了比较不错的认识,其实AVCTP就是定义了一个通信框架,它定义好了packet heaeder,定义好了与L2CAP层的传输机制,剩下的数据域(AVCTP Message Information Part)就需要参考其他profile来填充;

AVCTP提供了一组Upper Interface,作为一组测试接口,也可作为其他应用协议的接口,这里就不去看了,感兴趣的可以自己翻一下spec;

下一篇我们将一起来看下AVRCP协议,希望大家多多支持;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。