Serializer/Deserializer (SerDes)
NeuralPlex utilizes Serializer/Deserializer (SerDes) technology for its external displays, which is qualified for automotive applications. There are two types of Serializers used: OpenLDI (TI DS90UB947-Q1
), and MIPI-DSI (TI DS90UB941AS-Q1
).
Serializer
Section titled “Serializer”The DS90UB947-Q1
is an OpenLDI to FPD-Link III bridge device which, in conjunction with the FPD-Link III DS90UB948-Q1
deserializers,provides 1-lane or 2-lane high-speed serial streams over cost-effective 50-Ω single-ended coaxial or 100-Ω differential shielded twisted-pair (STP) cables. It serializes an OpenLDI input supporting video
resolutions up to WUXGA and 1080p60 with 24-bit color depth.
The DS90UB941AS-Q1
is a dual DSI to FPD-Link III bridge serializer designed for automotive infotainment applications. When paired with an FPD-Link III DS90UB948-Q1
deserializer, the DS90UB941AS-Q1
can supply 1- or 2-lane highspeed serial streams. In response to the rise in number and variance of displays in infotainment systems, the
DS90UB941AS-Q1 can support symmetric and asymmetric splitting.
The FPD-Link III interface supports video transmission and full duplex control, including I2C communication, over the same differential link. Consolidation of video data and control over two differential pairs reduces the interconnect size and weight and simplifies system design. EMI is minimized by the use of low voltage differential signaling, data scrambling, and randomization. In backward compatible mode, the device supports up to WXGA and 720p resolutions with 24-bit color depth over a single differential link.
Interacting with the serializer is done by modifying its I2C registers. Some common registers are listed below:
# PWM GPIO Inputi2cset -f -y 6 0x16 0x0e 0x30
# TOUCH_INTERRUPT Enablei2cset -f -y 6 0x16 0xc6 0x21
Deserializer
Section titled “Deserializer”Each external display for NeuralPlex includes a DS90UB948-Q1
deserializer which decodes the video and I2C signals, allowing touch events, physical buttons, brightness control, etc. to communicate with the serializer. Interacting with the deserializer is done by modifying its I2C registers. Some common registers are listed below:
# LED_EN GPIO and TS_RESET GPIOi2cset -f -y 6 0x2c 0x20 0x99 // Set GPIO5 and GPIO6 as Outputs
# GPIO_2 Output (DISP_PWM)i2cset -f -y 6 0x2c 0x1e 0x50
# GPIO_7 Output (DISP_nRST) (for 15.6" screen only)i2cset -f -y 8 0x2c 0x21 0x09
Debugging
Section titled “Debugging”Deserializer Pattern Generation
Section titled “Deserializer Pattern Generation”There are times where it is useful to test the FPD-Link connection of external screen without the NeuralPlex sending video signals. The DS90UB948-Q1
allows pattern generation for this purpose.
\#!/bin/bashset -e
WriteI2C () { i2cset -y -f -r $i2cBus $1 $2 $3}
i2cBus=8serAddr=0x16deserAddr=0x2cPGIA=0x66PGID=0x67
## *********************************************## PATGEN configurations for 1920x1080p@60## *********************************************PGRS=0x00PGGS=0x00PGBS=0x00PGCDC1=0x02 #divide by 2PGTFS1=0x00PGTFS2=0x08PGTFS3=0x4bPGAFS1=0x80PGAFS2=0x87PGAFS3=0x43PGHSW=0x20PGVSW=0x08PGHBP=0x20PGVBP=0x08PBSC=0x00PGFT=0x1ePGTSC=0x0cPGTS01=0x21PGTS02=0x43PGTS03=0x65PGTS04=0x87PGTS05=0xa9PGTS06=0xcbPGTS07=0xedPGTS08=0x0fPGBE=0x00PGCDC2=0x01 #multiply by 1
# Disable DSI on SerializerWriteI2C $serAddr 0x01 0x08
# Enable I2C passthroughWriteI2C $serAddr 0x3 0x9A
sleep 1
WriteI2C $deserAddr $PGIA 0x00WriteI2C $deserAddr $PGID $PGRS #PGRSWriteI2C $deserAddr $PGIA 0x01WriteI2C $deserAddr $PGID $PGGS #PGGSWriteI2C $deserAddr $PGIA 0x02WriteI2C $deserAddr $PGID $PGBS #PGBSWriteI2C $deserAddr $PGIA 0x03WriteI2C $deserAddr $PGID $PGCDC1 #PGCDC1WriteI2C $deserAddr $PGIA 0x04WriteI2C $deserAddr $PGID $PGTFS1 #PGTFS1WriteI2C $deserAddr $PGIA 0x05WriteI2C $deserAddr $PGID $PGTFS2 #PGTFS2WriteI2C $deserAddr $PGIA 0x06WriteI2C $deserAddr $PGID $PGTFS3 #PGTFS3WriteI2C $deserAddr $PGIA 0x07WriteI2C $deserAddr $PGID $PGAFS1 #PGAFS1WriteI2C $deserAddr $PGIA 0x08WriteI2C $deserAddr $PGID $PGAFS2 #PGAFS2WriteI2C $deserAddr $PGIA 0x09WriteI2C $deserAddr $PGID $PGAFS3 #PGAFS3WriteI2C $deserAddr $PGIA 0x0aWriteI2C $deserAddr $PGID $PGHSW #PGHSWWriteI2C $deserAddr $PGIA 0x0bWriteI2C $deserAddr $PGID $PGVSW #PGVSWWriteI2C $deserAddr $PGIA 0x0cWriteI2C $deserAddr $PGID $PGHBP #PGHBPWriteI2C $deserAddr $PGIA 0x0dWriteI2C $deserAddr $PGID $PGVBP #PGVBPWriteI2C $deserAddr $PGIA 0x0eWriteI2C $deserAddr $PGID $PBSC #PBSC, if not working try both positive AND negative polarityWriteI2C $deserAddr $PGIA 0x0fWriteI2C $deserAddr $PGID $PGFT #PGFTWriteI2C $deserAddr $PGIA 0x10WriteI2C $deserAddr $PGID $PGTSC #PGTSCWriteI2C $deserAddr $PGIA 0x11WriteI2C $deserAddr $PGID $PGTS01 #PGTS01WriteI2C $deserAddr $PGIA 0x12WriteI2C $deserAddr $PGID $PGTS02 #PGTS02WriteI2C $deserAddr $PGIA 0x13WriteI2C $deserAddr $PGID $PGTS03 #PGTS03WriteI2C $deserAddr $PGIA 0x14WriteI2C $deserAddr $PGID $PGTS04 #PGTS04WriteI2C $deserAddr $PGIA 0x15WriteI2C $deserAddr $PGID $PGTS05 #PGTS05WriteI2C $deserAddr $PGIA 0x16WriteI2C $deserAddr $PGID $PGTS06 #PGTS06WriteI2C $deserAddr $PGIA 0x17WriteI2C $deserAddr $PGID $PGTS07 #PGTS07WriteI2C $deserAddr $PGIA 0x18WriteI2C $deserAddr $PGID $PGTS08 #PGTS08WriteI2C $deserAddr $PGIA 0x19WriteI2C $deserAddr $PGID $PGBE #PGBEWriteI2C $deserAddr $PGIA 0x1aWriteI2C $deserAddr $PGID $PGCDC2 #PGCDC2
# Turn on backlight and PWMWriteI2C $deserAddr 0x21 0x09WriteI2C $deserAddr 0x1e 0x50WriteI2C $deserAddr 0x20 0x99
echo "Enabling DES PATGEN"WriteI2C $deserAddr 0x65 0x04WriteI2C $deserAddr 0x64 0x05
Serializer Pattern Generation
Section titled “Serializer Pattern Generation”The DS90UB941-Q1
Serializer also allows pattern generation to test the FPD-Link connection between the Serializer and Deserializer.
\#!/bin/bash
set -e
WriteI2C () { i2cset -y -f -r $i2cBus $1 $2 $3}
i2cBus=8serAddr=0x16deserAddr=0x2cPGIA=0x66PGID=0x67
# Disable DSIWriteI2C $serAddr 0x01 0x08
## *********************************************## PATGEN configurations for 1920x1080p@60## *********************************************PGRS=0x00PGGS=0x00PGBS=0x00PGCDC1=0x03 #divide by 3PGTFS1=0x00PGTFS2=0x08PGTFS3=0x4bPGAFS1=0x80PGAFS2=0x87PGAFS3=0x43PGHSW=0x20PGVSW=0x08PGHBP=0x20PGVBP=0x08PBSC=0x00PGFT=0x1ePGTSC=0x0cPGTS01=0x21PGTS02=0x43PGTS03=0x65PGTS04=0x87PGTS05=0xa9PGTS06=0xcbPGTS07=0xedPGTS08=0x0fPGBE=0x00PGCDC2=0x01 #multiply by 1
# Enable I2C passthroughWriteI2C $serAddr 0x3 0x9A
sleep 1
WriteI2C $serAddr 0x01 0x02
WriteI2C $serAddr $PGIA 0x00WriteI2C $serAddr $PGID $PGRS #PGRSWriteI2C $serAddr $PGIA 0x01WriteI2C $serAddr $PGID $PGGS #PGGSWriteI2C $serAddr $PGIA 0x02WriteI2C $serAddr $PGID $PGBS #PGBSWriteI2C $serAddr $PGIA 0x03WriteI2C $serAddr $PGID $PGCDC1 #PGCDC1WriteI2C $serAddr $PGIA 0x04WriteI2C $serAddr $PGID $PGTFS1 #PGTFS1WriteI2C $serAddr $PGIA 0x05WriteI2C $serAddr $PGID $PGTFS2 #PGTFS2WriteI2C $serAddr $PGIA 0x06WriteI2C $serAddr $PGID $PGTFS3 #PGTFS3WriteI2C $serAddr $PGIA 0x07WriteI2C $serAddr $PGID $PGAFS1 #PGAFS1WriteI2C $serAddr $PGIA 0x08WriteI2C $serAddr $PGID $PGAFS2 #PGAFS2WriteI2C $serAddr $PGIA 0x09WriteI2C $serAddr $PGID $PGAFS3 #PGAFS3WriteI2C $serAddr $PGIA 0x0aWriteI2C $serAddr $PGID $PGHSW #PGHSWWriteI2C $serAddr $PGIA 0x0bWriteI2C $serAddr $PGID $PGVSW #PGVSWWriteI2C $serAddr $PGIA 0x0cWriteI2C $serAddr $PGID $PGHBP #PGHBPWriteI2C $serAddr $PGIA 0x0dWriteI2C $serAddr $PGID $PGVBP #PGVBPWriteI2C $serAddr $PGIA 0x0eWriteI2C $serAddr $PGID $PBSC #PBSC, if not working try both positive AND negative polarityWriteI2C $serAddr $PGIA 0x0fWriteI2C $serAddr $PGID $PGFT #PGFTWriteI2C $serAddr $PGIA 0x10WriteI2C $serAddr $PGID $PGTSC #PGTSCWriteI2C $serAddr $PGIA 0x11WriteI2C $serAddr $PGID $PGTS01 #PGTS01WriteI2C $serAddr $PGIA 0x12WriteI2C $serAddr $PGID $PGTS02 #PGTS02WriteI2C $serAddr $PGIA 0x13WriteI2C $serAddr $PGID $PGTS03 #PGTS03WriteI2C $serAddr $PGIA 0x14WriteI2C $serAddr $PGID $PGTS04 #PGTS04WriteI2C $serAddr $PGIA 0x15WriteI2C $serAddr $PGID $PGTS05 #PGTS05WriteI2C $serAddr $PGIA 0x16WriteI2C $serAddr $PGID $PGTS06 #PGTS06WriteI2C $serAddr $PGIA 0x17WriteI2C $serAddr $PGID $PGTS07 #PGTS07WriteI2C $serAddr $PGIA 0x18WriteI2C $serAddr $PGID $PGTS08 #PGTS08WriteI2C $serAddr $PGIA 0x19WriteI2C $serAddr $PGID $PGBE #PGBEWriteI2C $serAddr $PGIA 0x1aWriteI2C $serAddr $PGID $PGCDC2 #PGCDC2
# Turn on backlight and PWMWriteI2C $deserAddr 0x21 0x09WriteI2C $deserAddr 0x1e 0x50WriteI2C $deserAddr 0x20 0x99
echo "Enabling SER PATGEN"WriteI2C $serAddr 0x65 0x04WriteI2C $serAddr 0x64 0x05