一、背景
在介绍虚拟通道之前,我们先描述一个场景,主控芯片只有 4 个 D-PHY VIN 接口,但是产品需要4 个以上的摄像头。
如上图所示,如果我们把摄像头和主控芯片直接通过 D-PHY 接口连接,最多只能接 4 个摄像头,不能满足产品需求。我们应该如何做解决这个问题?常见的方法是桥接。
二、现有方案
所谓的桥接,就是让Sensor不直接与主控相连,而是与一个桥接器相连,桥接器再连接到主控芯片,常见的桥接方法有合路器和虚拟通道(可以使用FPGA)。
2.1 合路器
如下图所示,在 Sensor 和主控之间增加一个合路器,可以很好的解决此问题。合路器接收多个 Sensor 的数据,进行拼接,然后将拼接后的图像数据传给主控。
合路器常用的拼接方式有两种,一种是竖向拼接,一种是横向拼接,示意图如下:
特点:
后端接收到的是合路器拼接后的图像,而不是各个Sensor输出的图像,一般需要先进行拆解,再进行处理,流程相对麻烦。
2.2 虚拟通道
虚拟通道方案也属于桥接,与合路器硬件连接相同,都是接收多个Sensor的数据,经过处理,给到主控。不同的是这里的处理不是简单图像级别的拼接,而是数据包级别的拼接。
如下图所示,这种方案可以让主控直接接收到对应Sensor的图像。后端处理非常直观明了。
三、虚拟通道原理
虚拟通道方案很好地解决了D-PHY不够导致的Sensor数量不够的问题,那它是如何实现的呢。下面进行详细介绍。
在正式介绍之前,先一起回顾下MIPI CSI-2的整体架构,主要分为应用层、协议层和物理层。更细的请查看我之气那的文章,这里重点关注Low Level Protocol。这一层会把数据组织成数据包的形式,我们今天的重点就在这里。
3.1 Virtual Channel ID
MIPI数据包包含长包和短包,两者都有一个Data Identifier (DI) 字段,DI有包含两部分,一个是VC,一个是DT,如下图所示,可以看到VC字段一共占两位,所以最多支持4个虚拟通道,分别是 00 01 10 11。
3.2 使用相同虚拟通道
正常情况下,Sensor出来MIPI数据,VC字段可以是00 01 10 11的任意一个,由于一个Sensor对应一个D-PHY接口,因此,数据包传输的时候相对比较简单,如下图所示。
3.3 使用不同虚拟通道
如果想要在一个D-PHY上传输多个Sensor的数据,那不同的Sensor就应该是以哦那个不同的VC字段,然后在LLP层对不同Sensor的数据包进行拼接,如下图所示,然后经过物理层进行传输。
在接收端,会根据VC字段,把不同的数据包分配给不同的通道,从而完成不同Sensor的图像识别和接收。
四、总结
整体来说,通过虚拟通道可以很好地解决D-PHY接口不够带来的Sensor数量限制问题。但在使用此方案之前,需要注意以下几点:
-
主控的代码是否支持MIPI虚拟通道的解析。
-
需要有一个桥接器(FPGA)来完成多Sensor的整合。
-
不同Sensor出的MIPI数据,对应的VC字段要不一样。
一个专注于“嵌入式知识分享”、“DIY嵌入式产品”的技术开发人员,关注我,一起共创嵌入式联盟。