主题中讨论的其他器件: 测试2、 SN65DSI86
工具与软件:
我使用 SN65DSI86-Q1将 FHD 摄像头图像输出到 DP 监视器、设计了一个 DSI 转 DP 电路板。
但是、soc 上的 DSI 输出已确认、但 DP 监视器上仅显示黑屏。
我从 SN65DSI86-Q1输出色条并在 DP 监视器上确认。
1.电路图
e2e.ti.com/.../DSItoDP_5F00_Rev0.1_5F00_20240726.pdf
2.初始化数据
//=== 软复位===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x09、0x01、1、 1);
ERR_CHECK_RET (ret、-1);
//=== REFCLK 27MHz ===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x0A、0x04、1、 1);// 26.
ERR_CHECK_RET (ret、-1);
////=== ASSR RW 控制===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0xFF、0x07、1、 1);
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x16、0x01、1、 1);
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0xFF、0x00、1、 1);
////=== 单个4个 DSI 通道===
REt = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x10、0x26、1、 1);//通道 A、B 4通道设置
ERR_CHECK_RET (ret、-1);
////=== DSIA CLK FREQ 445MHz =====
//设置 EN 后自动设置
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x12、0x56、1、 1);
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x12、0x59、1、 1);// 445Mhz
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x12、0x60、1、 1);// 480MHz
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x12、0x65、1、 1);// 480MHz
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x12、0xC0、1、 1);// 750MHz (最大值0x96,750MHz)
ERR_CHECK_RET (ret、-1);
// ret = i2c_read_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x12、&READ_DATA、1、1); // r:0x84
// printf ("DSI65DSI86Q1_ADDR 0x12 = 0x%x\n"、READ_DATA);
////=== DSIB CLK FREQ 445MHz ====
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x13、0x59、1、 1);
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x13、0x60、1、 1);// 480MHz (最大值0x96,750MHz)
ERR_CHECK_RET (ret、-1);
////=== 增强的组帧和 ASSR===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x5A、0x04、1、 1);
////=== 2个 DP 信道(无 ssc====)
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x93、0x20、1、 1);
////=== 1个 DP 信道(无 ssc====)
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x93、0x10、1、 1);
////=== 4个 DP 信道(无 ssc====)
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x93、0x30、1、 1);//默认值
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x93、0x70、1、 1);//预置1
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x93、0xB0、1、 1);//预置2
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x93、0xF0、1、 1);//前3
ERR_CHECK_RET (ret、-1);
////=== HBR (2.7Gbps)===
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x94、0xE0、1、 1);// 5.4.
REt = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x94、0x80、1、 1);// 2.7
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x94、0x20、1、 1);// 1.62Gbps
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x94、0x21、1、 1);// SW 1
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x94、0x22、1、 1);// SW2
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x94、0x23、1、 1);// SW3
ERR_CHECK_RET (ret、-1);
////=== PLL enable====
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x0D、0x01、1、 1);
ERR_CHECK_RET (ret、-1);
////=== 验证 PLL 是否已锁定===
// ret |= tixx_WRITE_ONLY_reg (0x0A);
RET = i2c_read_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x0A、&READ_DATA、1、1); // r:0x84
printf ("DSI65DSI86Q1_ADDR 0x0A = 0x%x\n"、READ_DATA);
////=== Post-Cursor2 0dB ===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x95、0x00、1、 1);
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x95、0x40、1、 1);//后 Cursor2.
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x95、0x80、1、 1);
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x95、0xC0、1、 1);
ERR_CHECK_RET (ret、-1);
REt = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0xf8、0xFF、1、 1);
////=== 半自动训练===
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x01、1、 1);//正常模式(空闲模式或活动视频)
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x02、1、 1);// TPS1
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x03、1、 1);// TPS2
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x04、1、 1);// TPS3
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x05、1、 1);// PRBS7
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x06、1、 1);// HBR2
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x07、1、 1);// 80位自定义模式
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x08、1、 1);//符号误差率测量模式
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x09、1、 1) 1);//快速链路训练
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x0A、1、 1);//半自动链路训练。
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、0x0B、1、 1);//转接驱动器半自动链路训练
ERR_CHECK_RET (ret、-1);
睡眠(0.02);
//版权所有2014–2015、德州仪器(TI)公司提交文档反馈69
//产品文件夹链接:SN65DSI86-Q1
//SN65DSI86-Q1
// SLLSEJ5A–2014年7月–2015年12月修订 www.ti.com
////=== 验证培训是否成功====
// ret |= tixx_WRITE_ONLY_reg (0x96);
REt = i2c_read_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x96、&READ_DATA、1、1);
printf ("DSI65DSI86Q1_ADDR 0x96 = 0x%x\n"、READ_DATA);
REt = i2c_read_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x00、&READ_DATA、1、1);
printf ("DSI65DSI86Q1_ADDR 0x96 = 0x%x\n"、READ_DATA);
///=== CHA_ACTIVE_LINE_LENGTH 为1920 ===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x20、0x80、1、 1);
ERR_CHECK_RET (ret、-1);
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x21、0x07、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_VOLTAGE_DISPLAY_SIZE 为1080 ===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x24、0x38、1、 1);
ERR_CHECK_RET (ret、-1);
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x25、0x04、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_HSYNC_PULSE_WIDTH 为44正===
REt = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x2C、0x2C、1、 1);
ERR_CHECK_RET (ret、-1);
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x2D、0x00、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_VSYNC_PULSE_WIDTH 为5 POSITIVE 压低于=
REt = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x30、0x05、1、 1);
ERR_CHECK_RET (ret、-1);
// ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x31、0x80、1、 1);//默认值
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x31、0x00、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_Horizontal_BACK_porch 为148="===
REt = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x34、0x94、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_VERRITY_BACK_porch_36===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x36、0x24、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_Horizontal_front_porch 为88===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x38、0x58、1、 1);
ERR_CHECK_RET (ret、-1);
///=== CHA_VOLTAGE_FRONT_porch 为4===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x3A、0x04、1、 1);
ERR_CHECK_RET (ret、-1);
////=== dp- 24bpp====
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x5B、0x00、1、 1);
ERR_CHECK_RET (ret、-1);
////=== dp- 24bpp====
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x5B、0x00、1、 1);
ERR_CHECK_RET (ret、-1);
///=== 禁用色条====
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x3C、0x00、1、 1);
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x3C、0x10、1、 1);//启用
//ret = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x3C、0x12、1、 1);//启用
ERR_CHECK_RET (ret、-1);
////=== 增强的组帧、ASSR 和 Vstream enable===
RET = i2c_write_data_type (i2c_num、DSI65DSI86Q1_ADDR、0x5A、0x0C、1、 1);
ERR_CHECK_RET (ret、-1);
3.寄存器状态











