# FPD-Link III FPD-Link III 串行总线方案支持通过单个差分链路实现高速视频数据传输和双向控制通信的全双工控制。 通过单个差分对整合视频数据和控制可减少互连线尺寸和重量,同时还消除了偏差问题并简化了系统设计。 最初 FPD-LINK 应用在笔记本电脑上用于视频显示,TI 公司结合汽车娱乐信息系统应用环境,开发出 FPD-Link III 编串器(Serializer)/解串器(Deserializer),在信息娱乐系统显示屏和 ADAS 摄像头应用中通过一条 STP 或同轴电缆传输视频、音频、控制数据和电力。 FPD-Link III 除了可以加载各种类型的视频信号外,还可以加载 I2C、SPI、GPIO 透传信号等。 ## 1.DS90Ux94x DS90Ux94x 系列芯片为 FPD-Link III bridge 芯片,分为 Serializer 和 Deserializer。其中 DS90Ux949 和 DS90Ux947 为 Serializer,DS90Ux948 为 Deserializer。 * DS90Ux947 是 OpenLDI(包括 LVDS) 到 FPD-Link III 编串器 * DS90Ux949 是 HDMI 到 FPD-Link III 编串器 * DS90Ux948 是 FPD-Link III 解串器,可与 DS90Ux947 和 DS90Ux949 搭配使用。 ## 2.DS90Ux947 ### 2.1.连接方式 DS90Ux947 与 DS90Ux948 的连接方式如下: ![DS90Ux947 与 DS90Ux948 的连接](img/FPD-Link_III/001.png) ### 2.2.Input DS90Ux947 支持 24-bit 色彩模式 (8-bit RGB) 以及两种 mapping 机制:OpenLDI Mapping 和 SPWG Mapping。同时 DS90Ux947 可以使用 D0~D3 的单路输入,也可以使用 D0~D7 双路输入。 D0~D7 双路 OpenLDI Mapping 输入时序如下: ![24-Bit Color Dual Pixel Mapping: MSBs on D3/D7 (OpenLDI Mapping)](img/FPD-Link_III/002.png) D0~D7 双路 SPWG Mapping 输入时序如下: ![24-Bit Color Dual Pixel Mapping: LSBs on D3/D7 (SPWG Mapping)](img/FPD-Link_III/003.png) D0~D3 单路 OpenLDI Mapping 输入时序如下: ![24-Bit Color Single Pixel Mapping: MSBs on D3 (OpenLDI Mapping)](img/FPD-Link_III/004.png) D0~D3 单路 SPWG Mapping 输入时序如下: ![24-Bit Color Single Pixel Mapping: LSBs on D3 (SPWG Mapping)](img/FPD-Link_III/005.png) 以上 4 种模式可以通过 MODE_SEL[1:0] 电阻来设置,也可以通过 0x4F[7:6] 来设置: | Reg | Bits | Description | |------|------|-------------------------------------------| | 0x4F | 7 | 0: SPWG mapping; 1: OpenLDI mapping. | | 0x4F | 6 | 0: Dual-pixel mode; 1: Single-pixel mode. | ### 2.3.Output DS90Ux947 的输出可以为双绞线或同轴电缆。可以使用 DOUT0/DOUT1 这样的 Single FPD-Link III Transmitter mode,也可以同时使用 DOUT0 和 DOUT1 这样的 Dual FPD-Link III Transmitter mode。 可通过 MODE_SEL[1:0] 或 0x5B[7],0x5B[1:0] 寄存器来进行设置: | Reg | Bits | Description | |------|------|---------------------------------------------------------------------------------------------| | 0x5B | 7 | 0 : Twisted Pair; 1 : Coax. | | 0x5B | 1 | 0: Force Single FPD-Link III Transmitter mode; 1: Force Dual FPD-Link III Transmitter mode. | | 0x5B | 0 | 0 : Auto-Detect FPD-Link III mode; 1 : Forced Single or Dual FPD-Link III mode. | ### 2.4.Remote Slave 通过设置 DS90Ux947 的 Remote Slave 可以访问挂接在 Deserializer I2C 总线上的设备,最多支持 8 个 Remote Slave 设备。 Remote Slave 主要有两组寄存器:Slave ID 和 Slave Alias,其地址分别为: * Slave ID: 0x07, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76 * Slave Alias: 0x08, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D ## 3.DS90Ux948 ### 3.1.连接方式 DS90Ux948 可以与 DS90Ux947 和 DS90Ux949 搭配使用。以 DS90Ux948 与 DS90Ux949 的连接方式为参考,示例如下: ![DS90Ux948 与 DS90Ux949 的连接](img/FPD-Link_III/006.png) ### 3.2.Input 可由 MODE_SEL[1:0] 或 0x23[3] 选择 DS90Ux948 的输入为双绞线还是同轴电缆: | Reg | Bits | Description | |------|------|-------------------------------------------| | 0x23 | 3 | 0 : Shielded Twisted pair (STP); 1 : Coax | DS90Ux948 可通过总线自动探测或通过 0x34[4:3] 寄存器设置 Single FPD-Link III Transmitter mode 还是 Dual FPD-Link III Transmitter mode。 | Reg | Bits | Description | |------|------|-------------------------------------------| | 0x34 | 4-3 | 00: Auto-detect based on received data; 01: Forced Mode: Dual link; 10: Forced Mode: Single link, primary input; 11: Forced Mode: Single link, secondary input. | ### 3.3.Output 通过 MODE_SEL[1:0] 或 0x49[1:0] 可以选择输出模式。 | Reg | Bits | Description | |------|------|-------------------------------------------| | 0x49 | 1-0 | 00 : Dual FPD/OLDI output; 01 : Dual SWAP FPD/OLDI output; 10 : Single FPD/OLDI output; 11 : Replicate FPD/OLDI output. | 根据不同的输入输出配置,DS90Ux948 可以有以下 5 种配置方式: ![DS90Ux948 的 5 种输入输出配置](img/FPD-Link_III/007.png) ### 3.4.Remote Slave 通过设置 DS90Ux948 的 Remote Slave 可以访问挂接在 Serializer I2C 总线上的设备,最多支持 8 个 Remote Slave 设备。 Remote Slave 主要有两组寄存器:Slave ID 和 Slave Alias,其地址分别为: * Slave ID: 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F * Slave Alias: 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 ## 4.DS90Ux949 ### 4.1.连接方式 DS90Ux949 与 DS90Ux948 的连接方式如下: ![DS90Ux949 与 DS90Ux948 的连接](img/FPD-Link_III/008.png) ### 4.2.Input DS90Ux949 的输入为标准 HDMI 总线。 ### 4.3.Output DS90Ux949 的输出可以为双绞线或同轴电缆。可以使用 DOUT0/DOUT1 这样的 Single FPD-Link III Transmitter mode,也可以同时使用 DOUT0 和 DOUT1 这样的 Dual FPD-Link III Transmitter mode。 可通过 MODE_SEL[1:0] 或 0x5B[7],0x5B[1:0] 寄存器来进行设置: | Reg | Bits | Description | |------|------|---------------------------------------------------------------------------------------------| | 0x5B | 7 | 0 : Twisted Pair; 1 : Coax. | | 0x5B | 1 | 0: Force Single FPD-Link III Transmitter mode; 1: Force Dual FPD-Link III Transmitter mode. | | 0x5B | 0 | 0 : Auto-Detect FPD-Link III mode; 1 : Forced Single or Dual FPD-Link III mode. | ### 4.4.Remote Slave 通过设置 DS90Ux949 的 Remote Slave 可以访问挂接在 Deserializer I2C 总线上的设备,最多支持 8 个 Remote Slave 设备。 Remote Slave 主要有两组寄存器:Slave ID 和 Slave Alias,其地址分别为: * Slave ID: 0x07, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76 * Slave Alias: 0x08, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D ### 4.5.EDID DS90Ux949 支持通过以下方式对 EDID 进行配置: * External local EDID (EEPROM) * Internal EDID loaded into device memory * Remote EDID connected to I2C bus at deserializer side * Internal pre-programmed EDID 可通过 HDMI 的 DDC 接口读取 EDID。如果没有支持 DDC 接口或没有配置 EDID,可以在内核加载时通过参数指定 EDID 固件。EDID 固件的具体使用方法可参见仓库中的《Kernel_EDID_配置》和《EDID_修改和参数说明》。 ## 5.Test Pattern Generation Feature DS90Ux94x 系列芯片支持一些测试模式,如生成纯色(Fixed Pattern)或彩条(Color Bars),可参考官方的《Exploring the Int Test Pattern Generation Feature of FPD-Link III IVI Devices》进行操作。 测试模式的原理是通过 DS90Ux947 或 DS90Ux949 输出视频信号给 DS90Ux948。特别的 DS90Ux947 和 DS90Ux949 可以使用内部时钟来进行测试,避免了外部时钟的干扰,并且该时钟可以进行分频。 总体而言,需要通过直接访问寄存器和间接访问寄存器来配置 DS90Ux947 和 DS90Ux949。直接访问寄存器就是正常的 I2C 寄存器,根据 I2C 设备地址和寄存器地址进行访问即可;间接访问寄存器需要通过 0x66 和 0x67 两个 I2C 寄存器来实现,向 0x66 写入要访问的间接访问寄存器地址后,可通过 0x67 读写间接访问寄存器的值。通过间接访问寄存器,可以设置显示屏的相关参数:Total Frame Size(0x04、0x05、0x06)、Active Frame Size(0x07、0x08、0x09)等。 ### 5.1.Fixed Pattern 用 i2cset 工具,以 1920x720 分辨率以及 I2C 总线号为 3 设置 Fixed Pattern 循环显示的方法如下(使用内部时钟 2 分频=100MHz): ```bash # Disable Pattern Generator i2cset -f -y 3 0x0c 0x64 0x50 # 设置时钟 i2cset -f -y 3 0x0c 0x66 0x03 i2cset -f -y 3 0x0c 0x67 0x02 # 设置 Total Horizontal/Vertical Width i2cset -f -y 3 0x0c 0x66 0x04 i2cset -f -y 3 0x0c 0x67 0x20 i2cset -f -y 3 0x0c 0x66 0x05 i2cset -f -y 3 0x0c 0x67 0x28 i2cset -f -y 3 0x0c 0x66 0x06 i2cset -f -y 3 0x0c 0x67 0xE3 # 设置 Active Horizontal/Vertical Width i2cset -f -y 3 0x0c 0x66 0x07 i2cset -f -y 3 0x0c 0x67 0x80 i2cset -f -y 3 0x0c 0x66 0x08 i2cset -f -y 3 0x0c 0x67 0x27 i2cset -f -y 3 0x0c 0x66 0x09 i2cset -f -y 3 0x0c 0x67 0xD0 # 内部时钟使能,Enable Auto-Scroll i2cset -f -y 3 0x0c 0x65 0x05 # Enable Pattern Generator i2cset -f -y 3 0x0c 0x64 0x53 ``` 用 i2cset 工具,以 1920x720 分辨率以及 I2C 总线号为 3 设置 Fixed Pattern 静态显示的方法如下(使用内部时钟 2 分频=100MHz): ```bash # Disable Pattern Generator i2cset -f -y 3 0x0c 0x64 0x50 # 设置时钟 i2cset -f -y 3 0x0c 0x66 0x03 i2cset -f -y 3 0x0c 0x67 0x02 # 设置 Total Horizontal/Vertical Width i2cset -f -y 3 0x0c 0x66 0x04 i2cset -f -y 3 0x0c 0x67 0x20 i2cset -f -y 3 0x0c 0x66 0x05 i2cset -f -y 3 0x0c 0x67 0x28 i2cset -f -y 3 0x0c 0x66 0x06 i2cset -f -y 3 0x0c 0x67 0xE3 # 设置 Active Horizontal/Vertical Width i2cset -f -y 3 0x0c 0x66 0x07 i2cset -f -y 3 0x0c 0x67 0x80 i2cset -f -y 3 0x0c 0x66 0x08 i2cset -f -y 3 0x0c 0x67 0x27 i2cset -f -y 3 0x0c 0x66 0x09 i2cset -f -y 3 0x0c 0x67 0xD0 # 内部时钟使能,Disable Auto-Scroll i2cset -f -y 3 0x0c 0x65 0x04 # Enable Pattern Generator i2cset -f -y 3 0x0c 0x64 0x53 ``` ### 5.2.Color Bars 用 i2cset 工具,以 1920x720 分辨率以及 I2C 总线号为 3 设置 Color Bars 的方法如下(使用内部时钟 2 分频=100MHz): ```bash # Disable Pattern Generator i2cset -f -y 3 0x0c 0x64 0x50 # 设置时钟 i2cset -f -y 3 0x0c 0x66 0x03 i2cset -f -y 3 0x0c 0x67 0x02 # 设置 Total Horizontal/Vertical Width i2cset -f -y 3 0x0c 0x66 0x04 i2cset -f -y 3 0x0c 0x67 0x20 i2cset -f -y 3 0x0c 0x66 0x05 i2cset -f -y 3 0x0c 0x67 0x28 i2cset -f -y 3 0x0c 0x66 0x06 i2cset -f -y 3 0x0c 0x67 0xE3 # 设置 Active Horizontal/Vertical Width i2cset -f -y 3 0x0c 0x66 0x07 i2cset -f -y 3 0x0c 0x67 0x80 i2cset -f -y 3 0x0c 0x66 0x08 i2cset -f -y 3 0x0c 0x67 0x27 i2cset -f -y 3 0x0c 0x66 0x09 i2cset -f -y 3 0x0c 0x67 0xD0 # 内部时钟使能,Enable Auto-Scroll i2cset -f -y 3 0x0c 0x65 0x05 # Enable Pattern Generator i2cset -f -y 3 0x0c 0x64 0x57 ``` 用 i2cset 工具,以 1280x720 分辨率以及 I2C 总线号为 5 设置 Color Bars 的方法如下(使用内部时钟 2 分频=100MHz): ```bash # Disable Pattern Generator i2cset -f -y 5 0x0c 0x64 0x50 # 设置时钟 i2cset -f -y 5 0x0c 0x66 0x03 i2cset -f -y 5 0x0c 0x67 0x02 # 设置 Total Horizontal/Vertical Width i2cset -f -y 5 0x0c 0x66 0x04 i2cset -f -y 5 0x0c 0x67 0x3C i2cset -f -y 5 0x0c 0x66 0x05 i2cset -f -y 5 0x0c 0x67 0x35 i2cset -f -y 5 0x0c 0x66 0x06 i2cset -f -y 5 0x0c 0x67 0x18 # 设置 Active Horizontal/Vertical Width i2cset -f -y 5 0x0c 0x66 0x07 i2cset -f -y 5 0x0c 0x67 0x00 i2cset -f -y 5 0x0c 0x66 0x08 i2cset -f -y 5 0x0c 0x67 0x25 i2cset -f -y 5 0x0c 0x66 0x09 i2cset -f -y 5 0x0c 0x67 0xD0 # 内部时钟使能,Enable Auto-Scroll i2cset -f -y 5 0x0c 0x65 0x05 # Enable Pattern Generator i2cset -f -y 5 0x0c 0x64 0x57 ``` ## 6.经验总结 硬件拉的 MODE_SEL[1:0] 可能存在问题或与预期设计不移植,或因硬件修改发生了变更却没有跟踪,因此调试不通时应先确认与 MODE_SEL[1:0] 有关的寄存器,或者直接通过相关寄存器对其模式进行强制设置。 ## 7.内部参考关键字 1. EDID ## 8.外部参考资料 1. [AN-2198 Exploring Int Test Patt Gen Feat of 720p FPD-Link III Devices](http://www.ti.com/lit/pdf/SNLA132)