This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我使用 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.寄存器状态
你(们)好
为了更改为"无 ASSR"、请参阅以下内容进行其他电路修改。
这是使用 Test2引脚上的上拉电阻器修改的电路图、以启用标准 DP。
e2e.ti.com/.../DSItoDP_5F00_Rev0.2.pdf
"DSI86在设计中默认启用了 ASSR、以支持 eDP 面板。 大多数 DP 监视器或面板不支持 ASSR。 为支持 DP 监控器、 需要通过使 ASSR_CONTROL 进行读取/写入(而不是只读)来禁用 DSI86的 ASSR。 使 ASSR_CONTROL 进行读取/写入的第一步是确保在 EN 引脚的上升沿对 TEST2引脚进行高电平采样。 建议通过1k 至10k 电阻将 TEST2引脚拉至1.8V。 一旦 TEST2为高电平、必须执行以下步骤:
1.将0x07写入寄存器0xFF。 选择"Page 7"(第7页)。
2.将0x01写入寄存器0x16。 这会使 ASSR_CONTROL 成为读取/写入状态。
3.将0x00写入寄存器0xFF。 这将选择"Page 0"。
4.将0写入寄存器0x5A 的1:0位。 这将从 ASSR 更改为标准 DP。"
谢谢
Parkks
您好!
看起来错误寄存器已设置。
0xF5 = 02
0xF6 = 40
0xF8 = 02
地址0xf5报告 HPD 的状态。 该寄存器提供 HPD 的状态。 该寄存器仅在启用了 HPD (清除寄存器0x5C 位0 (HPD_DISABLE)时有用。
地址0xF6到0xF7报告与 DSI 至 DP 视频时序相关的错误。 通常、当编程到 DSI86的视频时序与 DSI 接口上接收到的时序不匹配时、会在这些寄存器中设置错误。 位于0x20到0x3A 之间的 DSI86视频寄存器匹配 DSI 源使用的视频时序非常重要。 DSI86将通过编程到这些寄存器中的值推导 DP 时序。
它也看起来链路训练失败。 您是否使用过 DSI86寄存器计算器工具生成 CSR 值?
e2e.ti.com/.../2451.SN65DSI86_5F00_PANEL_5F00_VIDEOREGISTER_5F00_CALC.xlsm
尊敬的 Vishesh Pithadiya:
感谢您的答复。
首先、您所连接的计时计算器已被应用、并且正在引起问题。
将0x20设置为0x3a、以匹配下面计算器的 DSI 时序和 SOC。
"地址0xf5报告 HPD 的状态。 该寄存器提供 HPD 的状态。 该寄存器仅在启用了 HPD (清除寄存器0x5C 位0 (HPD_DISABLE)时有用。 " <= 是否意味着我需要清除0x5C? 或者这是否意味着我应该通过禁用 HPD 来使用它?
以下是 HPD_DISABLE 之后的结果。
特殊的部分是、如果您使用0x96的"0xA"、则不输出色条、但如果您将0x96设置为0x1、则输出色条。
1. 时序是根据2451.SN65DSI86_Panel_VIDEOREGISTER_CALC.xlsm 计算得出的
但是、如果您使用脚本 NoASSR、则会发生以下错误。
2. SOC 的 MIPI DSI 时序。
3.下面的波形显示从测量的 SOC 输出的 DSI HACT 和 HTOTAL 值与1080p 60时的计算值类似。
A.现金统转
B. HTOTAL
您好!
对于对电子表格所做的编辑、您需要在此切换值。
寄存器计算不正确。 色条工作的原因是较低的分辨率正在缩放到显示器上。 实际的误定时数据将无法执行此操作。
"对于对电子表格所做的编辑、您需要切换此值。 "
=>您是指下面的器件吗?
我应该参考本节中的表格是什么?
我对 DP 输出部分了解不多、请帮我一下。
SN65DSI86_Panel_VIDEOREGISTER_CALC.xlsm 的 EDID 表大小大于(16 X 8)从监视器中提取的 EDID 值为(32x8)。 我是否应该只输入部分数据?
1. 1.从监控器中提取的 EDID (32 X 8)
可放置在 SN65DSI86_Panel_VIDEOREGISTER_CALC.xlsm 中的 EDID
尊敬的 KISUNG:
该计算器工具通过两种方式使用提供的数据。
1) 1)填充图表(橙色输入)并使用此信息计算寄存器值
2) 2)填写 EDID 并使用该值计算寄存器值。
我建议您使用图表、因为您能够完全理解输入的内容。
切换"EDID Inputs in Datasheet Table"会告知电子表格显示数据已输入图表中、而不是从 EDID 矩阵中提取。 确认显示信息输入有效的一种简单方法是查看最小 DSI 时钟速率、DP 通道数和理想数据速率。
在您发送的最后一张图片中、电子表格似乎已正确配置。