这篇文章简单记录一下TI的串解串芯片的相关内容,避免以后调试的时候再从头去看
一、ds90ub964
以前调试过mipi csi的解串芯片,时间过去太久了,有的概念已经忘记了,重新记录一下。现在拿964为例,964成为解串器,一般和摄像头端的串解芯片(比如953)配对使用。 964有4个RX Port,所以964一共可以外接4个摄像头,964和摄像头段的连接为FPD-Link,964和Soc段的连接为MIPI CSI,有两个CSI-2 TX端口,每一个端口有4个data line。可以分别配置每个摄像头的数据走哪个CSI-2 TX端口发送给SOC 寄存器映射 一般的配置
//Enable and Init CSI0
{0x32, 0x01}, //CSI0 select,读写TX Port0
{0x1F, 0x03}, //CSI0 400Mbps
{0x33, 0x01}, //CSI_EN & CSI0 4L,使能CSI输出,以及选择4个data lines
{0x20, 0x00}, //Forwarding enabled of RX-1 and RX-2 to CSI0,使能4个Rx Port,以及把4个RX port都映射到CSI-2 Port0发出
//RX0 INIT
{0x4c, 0x01}, //RX_PORT0,读写RX Port0寄存器
{0x58, 0x58}, //BC FREQ SELECT: 2.5 Mbps and Enable Pass Through
//RX1 INIT
{DS964_REG_FPD3_PORT_SEL, 0x12}, //RX_PORT1
{DS964_REG_BCC_CFG, 0x58}, //BC FREQ SELECT: 2.5 Mbps and Enable Pass Through
//RX2 INIT
{DS964_REG_FPD3_PORT_SEL, 0x24}, //RX_PORT2
{DS964_REG_BCC_CFG, 0x58}, //BC FREQ SELECT: 2.5 Mbps and Enable Pass Through
//RX3 INIT
{DS964_REG_FPD3_PORT_SEL, 0x38}, //RX_PORT3
{DS964_REG_BCC_CFG, 0x58}, //BC FREQ SELECT: 2.5 Mbps and Enable Pass Through
二、其他芯片说明
下面的是一般常见的结构框图 Sensor ----> 串行器 ------> 解串器 -------> 主机 专业术语:
1、Device ID:指的是设备的7位i2c地址
DES ID表示解串器的7位物理i2c地址
SER ID表示串行器的7位物理i2c地址
Slave ID表示远程的7位物理i2c地址
2、Device Alias:设备别名—指分配给串行器或解串器或远程从机的备用 7 位地址,设备别名有助于区分具有相同设备 ID
或物理设备的设备
I2C 地址。 建议 I2C 主设备始终使用设备别名与远程 I2C 从设备通信
注意:这里的i2c地址都是7位的,要写入寄存器的话要把i2c地址左移一位
以914/913为例说明,下面是寄存器的列表 2.1 I2c主机和解串器之间的通信 主机一般与解串器的连接不需要采取任何明确的行动,只要解串器上电就可以通信,本例中的解串器的ID为0x60 2.2、与远端的Remote SER通信 此模式需要额外设置才能通过串行链路传递 I2C 命令。 一般要配置解串器的i2c透传功能 在此例中,串行器的ID = 0x58,在建立通信之后,解串器这边的0x06[7:1]寄存器会自动加载串行器的ID,也就是0x06[7:1] = 0x58,整个寄存器的内容0x06 = 0xB0 (0x58<<1), 寄存器0x07表示串行器的别名,在这里被设置为0x59(可根据自己定义),整个寄存器的内容为0xB2 (0x59<<1),设置之后就可以通过别名0x59进行通信。
将位 0x21[7] 设置为 1 允许使用其 I2C 设备 ID(即 0x58 本身)与远程 SER 通信
2.3、与连接到远程的SER的远程摄像头通信 要与远程的摄像头通信的话,需要设置Slave ID和Slave Alias. 在此例中,Sensor的i2c地址为0x50, 914的0x08寄存器表示Sensor的i2c物理地址,0x10寄存器表示Sensor的别名。 所以在这里,0x08[7:1] = 0x50, 0x08 = 0xA0 (0x50<<1), Sensor的别名设置为0x51,0x10[7:1] = 0x51, 0x10 = 0xA2 (0x51<<1) 主控制器通过0x51发出的命令都将映射到0x50的相机寄存器上面。Slave Alias 可以和 Slave ID 一样,如果没有重复的地址 。
2.4、使用重复设备ID和远程SER通信 现在有两条链路,两个914有不同的ID,一个的ID为0x60,一个的ID为0x61,现在他们连接的串行器具有一样的地址,都是0x58 两个914的0x06寄存器都是上电自动加载的串行器的ID,都是0x06[7:1] = 0x58,
为了清楚的和每个串行器通信,就要使用到别名了,请将不同的值分配给 reg(0x07),即两个解串器的 SER 别名,例如,将 0xAE (0x57<<1) 写入 Deserializer1 的 SER 别名 reg(0x07) 并将 0xB2 (0x59<<1) 写入 Deserializer2 的 SER 别名 reg(0x07)。 这将允许使用来自主机控制器的 I2C 地址 0x57 与 Serializer1 进行通信,并且还允许使用 I2C 地址 0x59 与 Serializer2 进行通信
2.5. 使用重复设备 ID 寻址多个远程摄像头 从图片来看,这次是多个具有相同地址的摄像头,需要初始化每个 解串器的 Slave ID[X] 和 Slave Alias[X],在所述示例中,每个摄像头传感器的物理 I2C 地址为 0x50。 因此,我们需要将两个解串器的 reg(0x08), Slave ID[0] 初始化为 0xA0 (0x50<<1)。但是,reg(0x10),从Alias[0] 应该被赋予不同的值。 例如,将值 0xA2 (0x51<<1) 写入 Deserializer1 的 reg(0x10)、Slave Alias[0] 并将 0xA4 (0x52<<1) 写入 Deserializer2 的 reg(0x10)、Slave Alias[0]。任何由 I2C 地址为 0x51 的主机控制器发起的命令都由解串器 1 重新映射到相机传感器 1。 Deserializer2 对所有具有 I2C 地址 0x52 的命令执行相同操作以允许与 Camera Sensor2 通信
三、I2c主机和串行器之间的通信
这种情况比较复杂,一般不会使用到,大概简单说明一下 上面都是SOC直接和解串器进行通信,间接的访问到串行器和远端的Sensor,在此例中给Soc和解串器中间有加上了一个串行器。 串行器扮演的角色就变成了Local I2C,解串器扮演的角色就变成了远端的DES,Sensor还和之前一样。
要进行通信的话和上面的配置也是大同小异,这里就不展开说明了
|