CarPlay是苹果公司为车载系统开发的一项功能,该功能将iOS设备的界面通过USB或wireless(蓝牙+Wi-Fi)投影显示在车载屏幕上,可以让驾驶员在车内通过车载屏幕直接方便地使用iOS设备上的功能。例如,在车载屏幕上直接使用iPhone或iPad上的地图、导航、Siri语音助手、音乐、电话、短信等各项iOS上的服务及功能。换句话说,就相当于是在自己的车载系统上安装了一个“iOS操作系统”。该功能在很大程度上减少了驾驶员在车内对iPhone或iPad的直接使用及操作,从而降低了对驾驶员在车辆驾驶过程中的干扰。
目前,在很多报道中将CarPlay理解成一套车载系统,这种解释是不完全正确的。CarPlay是苹果公司为车载系统开发的一项功能,也可以说是车载系统中的一项新的应用,并非是一套车载系统。
CarPlay有两种实现途径:
一种是通过wired(USB)连接iOS设备和车载系统设备,另一种是通过wireless(蓝牙+Wi-Fi)来连接iOS设备和车载系统设备。CarPlay的两种连接方案都是需要通过iAP2 (iOS Accessory Protocol,version 2)协议以及Bonjour服务来建立CarPlay会话(CarPlay Session)从而实现CarPlay功能的。在我接下来的博客中,我将分别介绍CarPlay的wired(USB)连接方案,CarPlay的wireless(蓝牙+Wi-Fi)连接方案,以及两种连接方案相互切换的实现。
另外,对于CarPlay的USB连接方案,在硬件上需要支持USB 2.0(含)以上版本。iOS设备需要支持闪电接口(Lightning接口),也就是说iPhone5之前的苹果设备不支持wired(USB)连接方式的CarPlay。在操作系统方面,苹果公司从iOS 7.1开始加入了CarPlay的功能,无论是wired还是wireless的连接方式,iOS设备的操作系统版本都需要在7.1及以上。
CarPlay wired connect:
首先,CarPlay的wired(USB)的连接方案要求车载设备至少要支持USB2.0 Hi-Speed,能够同时处理bulk IN和bulk OUT传输。该方案还要求车载设备必须支持USB Host Mode,该模式要求车载设备能够工作在USB device模式下,因为Apple设备在CarPlay中是作为USB Host的。而通常情况下,车载设备USB是工作在USB Host模式的,而外接的USB设备是工作在USB Device模式的,因而在这种情况下的CarPlay wired(USB)连接方案中就需要进行USB的模式切换。
下图则是CarPlay的USB模式切换处理逻辑框图:
当角色切换完成后,按照协议要求有以下几点需要注意:
1.车载设备(USB device)需要等待至少1000ms,目的是等待Apple设备(USB host)来枚举;
2.如果1000ms后没有任何traffic,车载设备(USB device)得切换回USB Host模式;
3.当Apple设备侦测到总线掉电(the loss of VBUS),Apple设备将切换回USB Device模式;
4.如果车载设备(USB device)侦测到USB总线至少有200ms处于不活跃(inactivity)状态,车载设备(USB device)将切换回USB Host模式。
iAP2在CarPlay wired(USB)连接方案中的接口描述符(Inte***ce Descriptor)和i数据传输(Data Transfers):
1.iAP2接口描述符(Inte***ce Descriptor):
车载设备(USB Device)与Apple设备(USB Host)建立一个iAP2连接,需要申明一个vendor指定(vendor-specific)的接口,该接口有一个bulk IN端点(endpoint)和一个bulk OUT端点(endpoint)。
2.iAP2数据传输(Data Transfers):
Apple设备(USB Host)通过bulk OUT端点发送iAP2数据给车载设备(USB Device)。依据USB协议,如果车载设备 (USB Device)成功地接收到Apple设备发送的iAP2数据便会回复一个USB ACK包,反之则回复一个USB NAK包。如果车载设备(USB Device)重复地回复USB NAK包并且超过1秒,便会视为接收超时。
车载设备在iAP2传输通道上成功的建立一个iAP2连接,通过iAP2进行认证,该认证过程有以下7种iAP2控制会话消息:
1.Request Authentication Certificate
2.Authentication Certificate
3.Request Authentication Challenge Response
4.Authentication Response
5.Authentication Failed
6.Authentication Succeeded
7.Accessory Authentication Serial Number
接下来,再介绍一下USB的NCM(Network Control Model)的两个接口:
1.USB NCM 控制接口(Control Inte***ce)描述符(Descriptor):
2.USB NCM数据接口(Data Inte***ce)描述符(Descriptor):
车载设备需要在这个接口上完成USB Hi-Speed NCM。这个接口需要支持到64KB封装的数据报的传输(也就是到40个1514字节的以太网帧(Ethernet Frame)的传输)和16比特的NCM传输块。
使用CarPlay USB NCM接口的车载设备需要支持至少100Mbps的带宽,TCP和UDP的延迟小于5ms,UDP的丢包率(iperf测试下)要低于1%。
当Apple设备连上或断开的时候,车载设备需要对NCM接口状态作相应的改变。当Apple设备连接上的时候,在网络协议栈的头部需要标注NCM接口可用。
建立/终止CarPlay会话(session):
建立CarPlay会话(session),车载设备首先需要同Apple设备建立IP网络连接,因此需要虚拟一个网络接口并分配MAC地址和ip地址,该ip连接必须是IPv6。车载设备在这个接口上需要支持Apple Bonjour零配置网络连接(zero-configuration networking)。一旦网络连接建立成功,车载设备在完成认证后将在CarPlay接口上开始设置(setup)和内容传输(content transfer)。需要注意的是,按协议要求,车载设备需要在与Apple设备网络连接建立好后的3秒钟内建立CarPlay会话,如果与Apple设备的物理连接断开,车载设备也需要检测到该断开情况并且在1秒钟内终止CarPlay会话。
下图是wired(USB)的CarPlay会话建立框图: