Thread 中讨论的其他器件:ALP
工具与软件:

DS90UB941配置寄存器与 DS90UB948结合使用、可输出1920 × 1080个图像、
但请参阅 zhcaag5a.pdf 手册的编程示例进行修改、具体寄存器写入如下、但无法在屏幕上显示、而是读取0x06寄存器到941地址不能读取未字符串948的地址、直接使用948地址读取、返回的状态值为 STATUS_I2C_RECEIVED_nACK、不知道、请参考指南进行处理、谢谢

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.
工具与软件:

DS90UB941配置寄存器与 DS90UB948结合使用、可输出1920 × 1080个图像、
但请参阅 zhcaag5a.pdf 手册的编程示例进行修改、具体寄存器写入如下、但无法在屏幕上显示、而是读取0x06寄存器到941地址不能读取未字符串948的地址、直接使用948地址读取、返回的状态值为 STATUS_I2C_RECEIVED_nACK、不知道、请参考指南进行处理、谢谢

您好!
我将参考941AS 启动指南、进一步分析此设置: DS90UB941AS-Q1 DSI 启动指南
从提供的脚本中、我看到了以下配置:
serAddr = 0x18 # Disable the DSI input board.WriteI2c(serAddr, 0x01, 0x08) board.WriteI2c(serAddr, 0x1E, 0x01) # TX port select, Port 0 selected # Continuous DSI CLK # Dual DSI # DSI Port 0 # Alternate Lines 3D Mode # 4 Lanes board.WriteI2C(serAddr, 0x4F, 0xDC) # Dual Config Registers - FPDTX mode = Forced splitter mode board.WriteI2C(serAddr, 0x5B, 0x07) # Left/Right 3D Processing board.WriteI2C(serAddr, 0x56, 0x80) board.WriteI2C(serAddr, 0x32, 0x80) # IMG_LINE_SIZE0 processing board.WriteI2C(serAddr, 0x33, 0x07) # IMG_LINE_SIZE1 processing # IMG Line processing set to 1920 px board.WriteI2c(serAddr, 0x1E, 0x01) # TX port select, Port 0 selected (again) board.WriteI2C(serAddr, 0x1E, 0x01) # TX port select, Port 0 selected (again) board.WriteI2C(serAddr, 0x36, 0x00) # Crop Start X axis (0) - LSB = 0 board.WriteI2C(serAddr, 0x37, 0x80) # Crop Start X axis (1) - Crop enable, MSB = 0 board.WriteI2C(serAddr, 0x38, 0x7F) # Crop Stop X axis (0) - LSB = 0111 0111 board.WriteI2C(serAddr, 0x39, 0x07) # Crop Stop X axis (1) - MSB = 0111 # Crop start at 0 goes to 1919 board.WriteI2C(serAddr, 0x3A, 0x00) # Crop Start Y axis (0) - LSB = 0 board.WriteI2C(serAddr, 0x3B, 0x00) # Crop Start Y axis (1) - MSB = 0 board.WriteI2C(serAddr, 0x3C, 0x37) # Crop Stop Y axis (0) - LSB = 0011 0111 board.WriteI2C(serAddr, 0x3D, 0x04) # Crop Stop Y axis (1) - MSB = 0100 # Crop start at 0 goes to 1079 board.WriteI2C(serAddr, 0x40, 0x04) # DSI/DPHY Port 0 Registers board.WriteI2C(serAddr, 0x41, 0x05) # DPHY Skip timing board.WriteI2C(serAddr, 0x42, 0x1E) # Set to dec = 15 # Enable DSI board.WriteI2C(serAddr, 0x01, 0x00)
您能否确认所使用的 DSI 配置、FPD 链路拓扑和 DSI 速率是否适用于相应的配置?
我有一项建议是确保为 DES/显示配置选择正确的极性、这可通过 DSI 间接页面寄存器上的以下寄存器来实现:
board.WriteI2C(serAddr,0x40,0x04) # Set HSYNC/VSYNC Polarity DSI0 board.WriteI2C(serAddr,0x41,0x21) # Set HSYNC/VSYNC Polarity DSI0 board.WriteI2C(serAddr,0x42,0x60) # Set HSYNC/VSYNC Polarity DSI0
此外、请确保从正确配置 DSI 时钟设置 数据表的第10.2节 :
board.WriteI2C(serAddr,0x40,0x10) # Init DSI Clock Settings (From Section 10.2 of datasheet) board.WriteI2C(serAddr,0x41,0x86) # Init DSI Clock Settings (From Section 10.2 of datasheet) board.WriteI2C(serAddr,0x42,0x0A) # Init DSI Clock Settings (From Section 10.2 of datasheet) board.WriteI2C(serAddr,0x41,0x94) # Init DSI Clock Settings (From Section 10.2 of datasheet) board.WriteI2C(serAddr,0x42,0x0A) # Init DSI Clock Settings (From Section 10.2 of datasheet)
初始化后对948进行数字复位也是一个好主意、这样可以重新启动 AEQ (最后将其放到):
desAddr = 0x58 board.WriteI2C(UB948,0x01,0x01) # Digital reset to restart AEQ[报价 userid="636335" url="~/support/interface-group/interface/f/interface-forum/1476283/ds90ub941as-q1-ds90ub941-matches-ds90ub948-and-the-1920x1080-screen-is-not-displayed 通过941地址读取0x06寄存器无法读取未字符串948的地址、直接使用948地址读取、返回的状态值是 STATUS_I2C_RECEIVED_nACK
如果您无法读取器件 ID、 可能是未建立 RX 锁定 . 您能否检查948端以确保可以远程访问设备? 我认为、由于硬件配置的原因、从941到948的连接可能无法建立。 请检查948上的锁定/通过状态以确认连接(引脚1和引脚7)。
如果需要说明、请告诉我!
此致!
Miguel
1. 941和948可以在上电后锁定、但开始配置941寄存器时、TI941_WriteRegister (IDX_941、0x01、0x08);而 TI941_WriteRegister (IDX_941、0x4F、0xDC);所以此寄存器将导致 LOCK 断开连接且无法恢复正常连接状态、这是为什么?
2. 根据以上指针,重新配置寄存器0x41,0x42,然后如何配置相应的相关数据,因为我没有找到参考文章,我最终需要输出1920 × 1080屏幕

您好!
[报价 userid="636335" url="~/support/interface-group/interface/f/interface-forum/1476283/ds90ub941as-q1-ds90ub941-matches-ds90ub948-and-the-1920x1080-screen-is-not-displayed/5669697 #566969697"]941和948可以在上电后锁定、但在开始配置941寄存器时、可以锁定 TI941_WriteRegister (IDX_941、0x01、0x08);以及在 TI941_WriteRegister (IDX_941、0x4F、0xDC)时、寄存器将导致锁定断开连接、为什么无法恢复正常状态?]是、这是预期行为、第一次写入(0x01=0x08)会禁用 DSI 输入、第二次写入会设置 DSI 配置。 当 DSI 处于禁用状态时、941 SER 的 RX 没有输入、这意味着948没有有效的视频吞吐量。
此时、948将根据寄存器0x34位6 (Rx_LOCK_MODE)对是否有有效视频传入进行采样、从而确认是否已建立锁定

这就是在配置 DSI 时未建立锁定状态的原因。
根据上述指针、重新配置寄存器0x41、0x42、然后如何配置相应的相关数据、因为我找不到参考文章、我最终需要输出1920 * 1080屏幕
我建议参考 DS90UB941AS-Q1 DSI 启动指南 来获得具体的配置帮助、因为我看到这里通过裁剪到两个显示屏来实现分离器模式。
在调试部分中、建议首先测试内部图形生成、以便验证来自 SER -> DES ->显示器是否正常工作、在 SER -> DES -> x1 Display 的1920x1080p 拓扑中、可以使用 探索 FPD-Link III IVI 器件的内部测试图形生成特性中的寄存器分配生成图形脚本(修订版 G)。
如果需要、我可以帮助生成此脚本、但我认为生成的图形只会进入一个显示器(其中需要所有时序参数的显示规格)。
请在此处告诉我您可能需要哪些帮助!
此致!
Miguel
您好!
我可以帮助您评估此配置;您能否提供一个花卉屏幕示例或描述具体的异常情况以供说明?
按照启动指南( https://www.ti.com/lit/an/snla356/snla356.pdf?ts = 1740076915839)、我提供了 PATGEN 脚本、它将通过941AS 直接发送至948内部生成。 您能否通过提供方框图来再次确认所使用的拓扑?

1920*1080是图像输出、时钟频率是142MHz 频率-158MHz
我可能还需要显示时序规格以防止由显示侧的视频时序引起的任何问题、但我提供了默认的1920 x 1080分辨率(60fps)(148.5 MHz PCLK) PATGEN。
有关这些寄存器写入、请参阅以下脚本:
devAddr = 0x18 PGIA = 0x66 PGID = 0x67 board.WriteI2C(0x01, 0x08) # Disable DSI input board.WriteI2C(0x1E, 0x01) # TX Port Select = FPD Port 0 Sel board.WriteI2C(0x5B, 0x03) # TX Mode = Forced Dual FPD-Link III Transmitter mode # Populate based on expected display timings PGRS = 0x00 PGGS = 0x00 PGBS = 0x00 PGCDC1 = 0x02 PGCDC2 = 0x98 PGTFS1 = 0x58 PGTFS2 = 0x46 PGTFS3 = 0x80 PGAFS1 = 0x87 PGAFS2 = 0x43 PGAFS3 = 0x2C PGHSW = 0x05 PGVSW = 0x94 PGHBP = 0x24 PGVBP = 0x00 PBSC = 0x1E PGFT = 0x0C PFTSC = 0x21 PGTS01 = 0x43 PGTS02 = 0x65 PGTS03 = 0x87 PGTS04 = 0xA9 PGTS05 = 0xCB PGTS06 = 0xED PGTS07 = 0x0F PGTS08 = 0x00 PGBE = 0x01 PGCDC2 = 0x00 board.WriteI2C(devAddr, PGIA, 0x00) board.WriteI2C(devAddr, PGID, PGRS) #PGRS board.WriteI2C(devAddr, PGIA, 0x01) board.WriteI2C(devAddr, PGID, PGGS) #PGGS board.WriteI2C(devAddr, PGIA, 0x02) board.WriteI2C(devAddr, PGID, PGBS) #PGBS board.WriteI2C(devAddr, PGIA, 0x03) board.WriteI2C(devAddr, PGID, PGCDC1) #PGCDC1 board.WriteI2C(devAddr, PGIA, 0x04) board.WriteI2C(devAddr, PGID, PGTFS1) #PGTFS1 board.WriteI2C(devAddr, PGIA, 0x05) board.WriteI2C(devAddr, PGID, PGTFS2) #PGTFS2 board.WriteI2C(devAddr, PGIA, 0x06) board.WriteI2C(devAddr, PGID, PGTFS3) #PGTFS3 board.WriteI2C(devAddr, PGIA, 0x07) board.WriteI2C(devAddr, PGID, PGAFS1) #PGAFS1 board.WriteI2C(devAddr, PGIA, 0x08) board.WriteI2C(devAddr, PGID, PGAFS2) #PGAFS2 board.WriteI2C(devAddr, PGIA, 0x09) board.WriteI2C(devAddr, PGID, PGAFS3) #PGAFS3 board.WriteI2C(devAddr, PGIA, 0x0a) board.WriteI2C(devAddr, PGID, PGHSW) #PGHSW board.WriteI2C(devAddr, PGIA, 0x0b) board.WriteI2C(devAddr, PGID, PGVSW) #PGVSW board.WriteI2C(devAddr, PGIA, 0x0c) board.WriteI2C(devAddr, PGID, PGHBP) #PGHBP board.WriteI2C(devAddr, PGIA, 0x0d) board.WriteI2C(devAddr, PGID, PGVBP) #PGVBP board.WriteI2C(devAddr, PGIA, 0x0e) board.WriteI2C(devAddr, PGID, PBSC) #PBSC, if not working try both positive AND negative polarity board.WriteI2C(devAddr, PGIA, 0x0f) board.WriteI2C(devAddr, PGID, PGFT) #PGFT board.WriteI2C(devAddr, PGIA, 0x10) board.WriteI2C(devAddr, PGID, PGTSC) #PGTSC board.WriteI2C(devAddr, PGIA, 0x11) board.WriteI2C(devAddr, PGID, PGTS01) #PGTS01 board.WriteI2C(devAddr, PGIA, 0x12) board.WriteI2C(devAddr, PGID, PGTS02) #PGTS02 board.WriteI2C(devAddr, PGIA, 0x13) board.WriteI2C(devAddr, PGID, PGTS03) #PGTS03 board.WriteI2C(devAddr, PGIA, 0x14) board.WriteI2C(devAddr, PGID, PGTS04) #PGTS04 board.WriteI2C(devAddr, PGIA, 0x15) board.WriteI2C(devAddr, PGID, PGTS05) #PGTS05 board.WriteI2C(devAddr, PGIA, 0x16) board.WriteI2C(devAddr, PGID, PGTS06) #PGTS06 board.WriteI2C(devAddr, PGIA, 0x17) board.WriteI2C(devAddr, PGID, PGTS07) #PGTS07 board.WriteI2C(devAddr, PGIA, 0x18) board.WriteI2C(devAddr, PGID, PGTS08) #PGTS08 board.WriteI2C(devAddr, PGIA, 0x19) board.WriteI2C(devAddr, PGID, PGBE) #PGBE board.WriteI2C(devAddr, PGIA, 0x1a) board.WriteI2C(devAddr, PGID, PGCDC2) #PGCDC2 board.WriteI2C(devAddr, 0x65, 0x00) board.WriteI2C(devAddr, 0x64, 0x05)
在这种情况下、您可以将 devAddr 替换为脚本中使用的 IDX_941。
有关这些配置寄存器的进一步说明、请参阅 探索 FPD-Link III IVI 器件的内部测试图案生成特性(修订版 G)
由于 PATGEN 将在941内部生成、因此此时无需 DSI 配置-我们将独立于源来测试 SER -> DES -> Display 之间的链路。
请告知我测试结果、然后我们可以继续执行后续步骤以解决显示异常。
谢谢!
Miguel


1、我们的项目是将 MIPI 输入到 LVDS 输出1920 × 1080。 通过您提供的输出内部色条图示例,色条图可以在测试后正常输出。1920 × 1080是图像输出,时钟频率为142MHz -158MHz ;
2、以上是我对941寄存器的配置,通过以上配置,输出屏幕出现花屏;
3、为了能正常输出1920 × 1080视频,我该如何配置,请引导我,更渴望、谢谢!
您好!
感谢您对此进行测试- 941AS 的内部 PATGEN 似乎确认941AS 和948之间的 FPD-Link 配置正确。 现在、我将重点介绍 DSI RX 寄存器配置。
您能否确认或提供 以下信息? 同时、我会查看您上面提供的代码。
期待您的回复!
此致!
Miguel
您好!
感谢您提供这些信息、我们将在后续调试步骤中需要执行此操作。
通过您提供的输出内部色条图示例、色条图可以在测试后正常输出。1920 * 1080是图像输出、时钟频率为142MHz -158MHz
现在、我们可以继续处理来自 SER 的 PATGEN 成功的流程图(来自 DS90UB941AS-Q1 DSI 启动指南):

下一个脚本将使用内部时序来确认时钟是否正确(不应用数据通道)。
devAddr = 0x18 PGIA = 0x66 PGID = 0x67 board.WriteI2C(0x01, 0x08) # Disable DSI input board.WriteI2C(0x1E, 0x01) # TX Port Select = FPD Port 0 Sel board.WriteI2C(0x5B, 0x03) # TX Mode = Forced Dual FPD-Link III Transmitter mode # Populate based on expected display timings PGRS = 0x00 PGGS = 0x00 PGBS = 0x00 PGCDC1 = 0x02 PGCDC2 = 0x98 PGTFS1 = 0x58 PGTFS2 = 0x46 PGTFS3 = 0x80 PGAFS1 = 0x87 PGAFS2 = 0x43 PGAFS3 = 0x2C PGHSW = 0x05 PGVSW = 0x94 PGHBP = 0x24 PGVBP = 0x00 PBSC = 0x1E PGFT = 0x0C PFTSC = 0x21 PGTS01 = 0x43 PGTS02 = 0x65 PGTS03 = 0x87 PGTS04 = 0xA9 PGTS05 = 0xCB PGTS06 = 0xED PGTS07 = 0x0F PGTS08 = 0x00 PGBE = 0x01 PGCDC2 = 0x00 board.WriteI2C(devAddr, PGIA, 0x00) board.WriteI2C(devAddr, PGID, PGRS) #PGRS board.WriteI2C(devAddr, PGIA, 0x01) board.WriteI2C(devAddr, PGID, PGGS) #PGGS board.WriteI2C(devAddr, PGIA, 0x02) board.WriteI2C(devAddr, PGID, PGBS) #PGBS board.WriteI2C(devAddr, PGIA, 0x03) board.WriteI2C(devAddr, PGID, PGCDC1) #PGCDC1 board.WriteI2C(devAddr, PGIA, 0x04) board.WriteI2C(devAddr, PGID, PGTFS1) #PGTFS1 board.WriteI2C(devAddr, PGIA, 0x05) board.WriteI2C(devAddr, PGID, PGTFS2) #PGTFS2 board.WriteI2C(devAddr, PGIA, 0x06) board.WriteI2C(devAddr, PGID, PGTFS3) #PGTFS3 board.WriteI2C(devAddr, PGIA, 0x07) board.WriteI2C(devAddr, PGID, PGAFS1) #PGAFS1 board.WriteI2C(devAddr, PGIA, 0x08) board.WriteI2C(devAddr, PGID, PGAFS2) #PGAFS2 board.WriteI2C(devAddr, PGIA, 0x09) board.WriteI2C(devAddr, PGID, PGAFS3) #PGAFS3 board.WriteI2C(devAddr, PGIA, 0x0a) board.WriteI2C(devAddr, PGID, PGHSW) #PGHSW board.WriteI2C(devAddr, PGIA, 0x0b) board.WriteI2C(devAddr, PGID, PGVSW) #PGVSW board.WriteI2C(devAddr, PGIA, 0x0c) board.WriteI2C(devAddr, PGID, PGHBP) #PGHBP board.WriteI2C(devAddr, PGIA, 0x0d) board.WriteI2C(devAddr, PGID, PGVBP) #PGVBP board.WriteI2C(devAddr, PGIA, 0x0e) board.WriteI2C(devAddr, PGID, PBSC) #PBSC, if not working try both positive AND negative polarity board.WriteI2C(devAddr, PGIA, 0x0f) board.WriteI2C(devAddr, PGID, PGFT) #PGFT board.WriteI2C(devAddr, PGIA, 0x10) board.WriteI2C(devAddr, PGID, PGTSC) #PGTSC board.WriteI2C(devAddr, PGIA, 0x11) board.WriteI2C(devAddr, PGID, PGTS01) #PGTS01 board.WriteI2C(devAddr, PGIA, 0x12) board.WriteI2C(devAddr, PGID, PGTS02) #PGTS02 board.WriteI2C(devAddr, PGIA, 0x13) board.WriteI2C(devAddr, PGID, PGTS03) #PGTS03 board.WriteI2C(devAddr, PGIA, 0x14) board.WriteI2C(devAddr, PGID, PGTS04) #PGTS04 board.WriteI2C(devAddr, PGIA, 0x15) board.WriteI2C(devAddr, PGID, PGTS05) #PGTS05 board.WriteI2C(devAddr, PGIA, 0x16) board.WriteI2C(devAddr, PGID, PGTS06) #PGTS06 board.WriteI2C(devAddr, PGIA, 0x17) board.WriteI2C(devAddr, PGID, PGTS07) #PGTS07 board.WriteI2C(devAddr, PGIA, 0x18) board.WriteI2C(devAddr, PGID, PGTS08) #PGTS08 board.WriteI2C(devAddr, PGIA, 0x19) board.WriteI2C(devAddr, PGID, PGBE) #PGBE board.WriteI2C(devAddr, PGIA, 0x1a) board.WriteI2C(devAddr, PGID, PGCDC2) #PGCDC2 board.WriteI2C(devAddr, 0x65, 0x0C) board.WriteI2C(devAddr, 0x64, 0x05)
当 DSI 源处于启用状态时、它将在这种情况下仅提供时钟、因为外部时钟源选项是启用的、并且时序是在内部生成和配置的。
请告诉我此测试的结果、我们可能会继续了解这种现象是从哪里发生的。
此致!
Miguel
根据您提供的脚本写入后、显示屏上没有图像输出、并且 PGTSC 在您提供的脚本中没有相应的值。 我为测试设置 PGTSC=0。 详细代码如下:
TI941_WriteRegister (IDX_941、0x01、0x08);/*禁用 DSI 输入*/
TI941_WriteRegister (IDX_941、0x1E、0x01);/* TX 端口选择= FPD 端口0选择*/
TI941_WriteRegister (IDX_941、0x5B、0x03);/* TX 模式=强制双 FPD-Link III 发送器模式*/
TI941_WriteRegister (IDX_941、0x66、0x00);
TI941_WriteRegister (IDX_941、0x67、0x00);
TI941_WriteRegister (IDX_941、0x66、0x01);
TI941_WriteRegister (IDX_941、0x67、0x00);
TI941_WriteRegister (IDX_941、0x66、0x02);
TI941_WriteRegister (IDX_941、0x67、0x00);
TI941_WriteRegister (IDX_941、0x66、0x03);
TI941_WriteRegister (IDX_941、0x67、0x02);
TI941_WriteRegister (IDX_941、0x66、0x04);
TI941_WriteRegister (IDX_941、0x67、0x58);
TI941_WriteRegister (IDX_941、0x66、0x05);
TI941_WriteRegister (IDX_941、0x67、0x46);
TI941_WriteRegister (IDX_941、0x66、0x06);
TI941_WriteRegister (IDX_941、0x67、0x80);
TI941_WriteRegister (IDX_941、0x66、0x07);
TI941_WriteRegister (IDX_941、0x67、0x87);
TI941_WriteRegister (IDX_941、0x66、0x08);
TI941_WriteRegister (IDX_941、0x67、0x43);
TI941_WriteRegister (IDX_941、0x66、0x09);
TI941_WriteRegister (IDX_941、0x67、0x2C);
TI941_WriteRegister (IDX_941、0x66、0x0a);
TI941_WriteRegister (IDX_941、0x67、0x05);
TI941_WriteRegister (IDX_941、0x66、0x0B);
TI941_WriteRegister (IDX_941、0x67、0x94);
TI941_WriteRegister (IDX_941、0x66、0x0C);
TI941_WriteRegister (IDX_941、0x67、0x24);
TI941_WriteRegister (IDX_941、0x66、0x0D);
TI941_WriteRegister (IDX_941、0x67、0x00);
TI941_WriteRegister (IDX_941、0x66、0x0E);
TI941_WriteRegister (IDX_941、0x67、0x1E);
TI941_WriteRegister (IDX_941、0x66、0x0F);
TI941_WriteRegister (IDX_941、0x67、0x0C);
TI941_WriteRegister (IDX_941、0x66、0x10);
TI941_WriteRegister (IDX_941、0x67、0x00); // PGTSC
TI941_WriteRegister (IDX_941、0x66、0x11);
TI941_WriteRegister (IDX_941、0x67、0x43);
TI941_WriteRegister (IDX_941、0x66、0x12);
TI941_WriteRegister (IDX_941、0x67、0x65);
TI941_WriteRegister (IDX_941、0x66、0x13);
TI941_WriteRegister (IDX_941、0x67、0x87);
TI941_WriteRegister (IDX_941、0x66、0x14);
TI941_WriteRegister (IDX_941、0x67、0xA9);
TI941_WriteRegister (IDX_941、0x66、0x15);
TI941_WriteRegister (IDX_941、0x67、0xCB);
TI941_WriteRegister (IDX_941、0x66、0x16);
TI941_WriteRegister (IDX_941、0x67、0xED);
TI941_WriteRegister (IDX_941、0x66、0x17);
TI941_WriteRegister (IDX_941、0x67、0x0F);
TI941_WriteRegister (IDX_941、0x66、0x18);
TI941_WriteRegister (IDX_941、0x67、0x00);
TI941_WriteRegister (IDX_941、0x66、0x19);
TI941_WriteRegister (IDX_941、0x67、0x01);
TI941_WriteRegister (IDX_941、0x66、0x1A);
TI941_WriteRegister (IDX_941、0x67、0x00);
TI941_WriteRegister (IDX_941、0x65、0x0C);
TI941_WriteRegister (IDX_941、0x64、0x05);
TI941_WriteRegister (IDX_941、0x01、0x00);/*启用 DSI*/
您好!
让我们通过不禁用时钟来尝试使用这个相同的脚本->需要 DSI 的该 TX 来配置 PATGEN:
TI941_WriteRegister(IDX_941, 0x66, 0x00); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x01); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x02); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x03); TI941_WriteRegister(IDX_941, 0x67, 0x02); TI941_WriteRegister(IDX_941, 0x66, 0x04); TI941_WriteRegister(IDX_941, 0x67, 0x58); TI941_WriteRegister(IDX_941, 0x66, 0x05); TI941_WriteRegister(IDX_941, 0x67, 0x46); TI941_WriteRegister(IDX_941, 0x66, 0x06); TI941_WriteRegister(IDX_941, 0x67, 0x80); TI941_WriteRegister(IDX_941, 0x66, 0x07); TI941_WriteRegister(IDX_941, 0x67, 0x87); TI941_WriteRegister(IDX_941, 0x66, 0x08); TI941_WriteRegister(IDX_941, 0x67, 0x43); TI941_WriteRegister(IDX_941, 0x66, 0x09); TI941_WriteRegister(IDX_941, 0x67, 0x2C); TI941_WriteRegister(IDX_941, 0x66, 0x0a); TI941_WriteRegister(IDX_941, 0x67, 0x05); TI941_WriteRegister(IDX_941, 0x66, 0x0b); TI941_WriteRegister(IDX_941, 0x67, 0x94); TI941_WriteRegister(IDX_941, 0x66, 0x0C); TI941_WriteRegister(IDX_941, 0x67, 0x24); TI941_WriteRegister(IDX_941, 0x66, 0x0D); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x0E); TI941_WriteRegister(IDX_941, 0x67, 0x1E); TI941_WriteRegister(IDX_941, 0x66, 0x0F); TI941_WriteRegister(IDX_941, 0x67, 0x0C); TI941_WriteRegister(IDX_941, 0x66, 0x10); TI941_WriteRegister(IDX_941, 0x67, 0x21); // PGTSC TI941_WriteRegister(IDX_941, 0x66, 0x11); TI941_WriteRegister(IDX_941, 0x67, 0x43); TI941_WriteRegister(IDX_941, 0x66, 0x12); TI941_WriteRegister(IDX_941, 0x67, 0x65); TI941_WriteRegister(IDX_941, 0x66, 0x13); TI941_WriteRegister(IDX_941, 0x67, 0x87); TI941_WriteRegister(IDX_941, 0x66, 0x14); TI941_WriteRegister(IDX_941, 0x67, 0xA9); TI941_WriteRegister(IDX_941, 0x66, 0x15); TI941_WriteRegister(IDX_941, 0x67, 0xCB); TI941_WriteRegister(IDX_941, 0x66, 0x16); TI941_WriteRegister(IDX_941, 0x67, 0xED); TI941_WriteRegister(IDX_941, 0x66, 0x17); TI941_WriteRegister(IDX_941, 0x67, 0x0F); TI941_WriteRegister(IDX_941, 0x66, 0x18); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x19); TI941_WriteRegister(IDX_941, 0x67, 0x01); TI941_WriteRegister(IDX_941, 0x66, 0x1A); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x65, 0x0C); TI941_WriteRegister(IDX_941, 0x64, 0x05);
PGTSC 没有从先前作为0x21的写入中继续-这被校正(但是没有效果、因为自动滚动被禁用)。
由于 DSI 配置在此设置中不受干扰、因此请尝试以下序列:

这来自941上电时序控制、此处的建议是在使用上述代码进行初始化之前应用 DSI 输入、以查看输出是否会出现。 这样、我们就可以排除 DSI 时钟是否是此配置中问题的一部分。
如果不起作用、我们将需要根据调试流程图的这一部分(DS90UB941AS-Q1 DSI 启动指南)进一步评估 DSI 输入:

在新代码和时序控制不成功的情况下、我们可以通过检查以下部分来尝试评估 DSI 配置和连续时钟:

我已经链接了上述指南、如果您需要测试该指南的任何进一步详情、请告诉我。
如果代码和序列有效、我们可以尝试下一步、即使用相同的代码、但使用外部计时输入:

TI941_WriteRegister(IDX_941, 0x66, 0x00); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x01); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x02); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x03); TI941_WriteRegister(IDX_941, 0x67, 0x02); TI941_WriteRegister(IDX_941, 0x66, 0x04); TI941_WriteRegister(IDX_941, 0x67, 0x58); TI941_WriteRegister(IDX_941, 0x66, 0x05); TI941_WriteRegister(IDX_941, 0x67, 0x46); TI941_WriteRegister(IDX_941, 0x66, 0x06); TI941_WriteRegister(IDX_941, 0x67, 0x80); TI941_WriteRegister(IDX_941, 0x66, 0x07); TI941_WriteRegister(IDX_941, 0x67, 0x87); TI941_WriteRegister(IDX_941, 0x66, 0x08); TI941_WriteRegister(IDX_941, 0x67, 0x43); TI941_WriteRegister(IDX_941, 0x66, 0x09); TI941_WriteRegister(IDX_941, 0x67, 0x2C); TI941_WriteRegister(IDX_941, 0x66, 0x0a); TI941_WriteRegister(IDX_941, 0x67, 0x05); TI941_WriteRegister(IDX_941, 0x66, 0x0b); TI941_WriteRegister(IDX_941, 0x67, 0x94); TI941_WriteRegister(IDX_941, 0x66, 0x0C); TI941_WriteRegister(IDX_941, 0x67, 0x24); TI941_WriteRegister(IDX_941, 0x66, 0x0D); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x0E); TI941_WriteRegister(IDX_941, 0x67, 0x1E); TI941_WriteRegister(IDX_941, 0x66, 0x0F); TI941_WriteRegister(IDX_941, 0x67, 0x0C); TI941_WriteRegister(IDX_941, 0x66, 0x10); TI941_WriteRegister(IDX_941, 0x67, 0x21); // PGTSC TI941_WriteRegister(IDX_941, 0x66, 0x11); TI941_WriteRegister(IDX_941, 0x67, 0x43); TI941_WriteRegister(IDX_941, 0x66, 0x12); TI941_WriteRegister(IDX_941, 0x67, 0x65); TI941_WriteRegister(IDX_941, 0x66, 0x13); TI941_WriteRegister(IDX_941, 0x67, 0x87); TI941_WriteRegister(IDX_941, 0x66, 0x14); TI941_WriteRegister(IDX_941, 0x67, 0xA9); TI941_WriteRegister(IDX_941, 0x66, 0x15); TI941_WriteRegister(IDX_941, 0x67, 0xCB); TI941_WriteRegister(IDX_941, 0x66, 0x16); TI941_WriteRegister(IDX_941, 0x67, 0xED); TI941_WriteRegister(IDX_941, 0x66, 0x17); TI941_WriteRegister(IDX_941, 0x67, 0x0F); TI941_WriteRegister(IDX_941, 0x66, 0x18); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x66, 0x19); TI941_WriteRegister(IDX_941, 0x67, 0x01); TI941_WriteRegister(IDX_941, 0x66, 0x1A); TI941_WriteRegister(IDX_941, 0x67, 0x00); TI941_WriteRegister(IDX_941, 0x65, 0x08); TI941_WriteRegister(IDX_941, 0x64, 0x05);
然后、此代码将确定所有 SoC 配置是否正确进入941。
如果您有任何其他问题或疑虑、请告诉我。
此致!
Miguel
1、我把941的寄存器配置成通过948解串芯片输出1920 × 1080的屏幕。 目前、屏幕始终显示、并且通过948未字符串读取器的地址读取的寄存器始终返回 STATUS_I2C_RECEIVED_nACK、但可以通过配置941来显示色条图。
2948设置为0V、R2设置为10kΩ。 根据规格、IDX 应为0x2C。 但是、我直接将 MCU 连接到 I2C 接口948、以使用地址0x2C 读取0xF3的寄存器、返回值为 STATUS_I2C_RECEIVED_nACK。 使用 IDX 作为0x0C 来读取0xF3寄存器确实会返回一个成功可读的值、原因是什么? 正常的948地址应为0x2C、已检查硬件找不到原因
3、这是941原理图:

4、这是948原理图:

您好!
让我进一步查看、941的模式选择自举设置似乎与以下配置不匹配?
4、4个 DSI 通道数
5、DSI 速率(Mbps):290Mbps [/报价]在本例中、模式0将是1个通道、但此处使用4个 DSI 通道。
[报价 userid="636335" url="~/support/interface-group/interface/f/interface-forum/1476283/ds90ub941as-q1-ds90ub941-matches-ds90ub948-and-the-1920x1080-screen-is-not-displayed/5690324 #5690324"]mcu 到 i2c 接口948、使用地址0x2C 读取0xF3的寄存器、返回值为 STATUS_I2C_RECEIVED_nACK。 使用 IDX 作为0x0C 来读取0xF3寄存器确实会返回成功可读的值[/QUOT]您能否提供来自 MCU 的 I2C 命令是以7位还是8位寻址方式读取? 例如、我们用于94x 器件的 ALP 工具将使用8位 IDX 地址读取数据并进行通信:
请告知我、我将继续离线评估配置设置、如果您仍然无法远程访问948、则反向通道配置可能存在问题、可能需要对其进行评估。
然后、根据读取 DSI_VC_DTYPE 的调查、我们将继续查看 DSI CLK 源、以确保其正常。
此致!
Miguel
您好!
我明白了、
我们有一个 DSI0输入、两个链路输出、四个数据通道
四个数据通道和双(两) FPD-Link 配置、您可能需要 MODE_SEL0 =模式3
MODE_SEL1也设置为模式7、这意味着在启动时将禁用 DSI。
我相信这是一个进步;为了获得任何数据、车道应选择为4、但可能是配置导致了鲜花盛开的花屏。
TI941_WriteRegister(IDX_941, 0x42, 0x04); TI941_WriteRegister(IDX_941, 0x41, 0x2A); TI941_ReadRegister(IDX_941, 0x42);
我同意这不是948上可用的地址之一、并且这种行为异常。 我不确定只有0x0C 才用于读取 I2C 地址的原因、您是否确定此处读取的地址不是941AS 的7位地址?
要验证这一点、您可以读取寄存器0x00、它应返回编程的器件 IDX 地址。
此致!
Miguel
4、四个数据通道和双(两) FPD-Link 配置、您可能需要 MODE_SEL0 =模式3
MODE_SEL1也设置为模式7、这意味着在启动时将禁用 DSI。
硬件根据此信息进行配置、输出屏幕仍然是一个花卉屏幕、这与之前的效果相同
您好!
非常感谢您提供有关该系统的所有附加信息。
示波器捕获中报告的 DSI 频率似乎在505.35 MHz 附近、
[报价用户 id="636335" url="~/support/interface-group/interface/f/interface-forum/1476283/ds90ub941as-q1-ds90ub941-matches-ds90ub948-and-the-1920x1080-screen-is-not-displayed/5676686 #567668686"]DSI 速率(Mbps):290Mbps[/报价][报价用户 id="636335" url="~/support/interface-group/interface/f/interface-forum/1476283/ds90ub941as-q1-ds90ub941-matches-ds90ub948-and-the-1920x1080-screen-is-not-displayed/5680050 #5680050"] fDSI = 492 MHz [/报价]其中一个肯定不正确? 我认为数据速率到频率的转换是两的倍数、因此对于290Mbps 的数据速率=大约580 MHz DSI 时钟频率。
fPCLK =(fDSI*NLANES)/12
PCLK = 193.33 MHz
如果是这种情况、则为 UB948具有192 MHz 的 PCLK 限制 RX 侧双链路配置的双链路配置中使用单链路 CAN 收发器、因此这可能不起作用。
---- ----
对于示波器捕获中显示的 DSI 频率、这将是的计算结果
fPCLK =(fDSI*NLANES)/12
PCLK = 168.45 MHz
这没问题、但对于该配置、T_skip 是不同的数字
505.35 MHz / 252.675Mbps DSI 数据速率
TSKIP_CNT =舍入(65*fDSI - 5)
= 28
board.WriteI2C(serAddr, 0x40, 0x04) # DSI/DPHY Port 0 Registers board.WriteI2C(serAddr, 0x41, 0x05) # DPHY Skip timing board.WriteI2C(serAddr, 0x42, 0x38) # Set to dec = 28
580 MHz / 290Mbps DSI 数据速率
TSKIP_CNT =舍入(65*fDSI - 5)
= 33
board.WriteI2C(serAddr, 0x40, 0x04) # DSI/DPHY Port 0 Registers board.WriteI2C(serAddr, 0x41, 0x05) # DPHY Skip timing board.WriteI2C(serAddr, 0x42, 0x42) # Set to dec = 33
允许屏幕生成正常(原始图纸)的配置是什么?
此致!
Miguel
1、这是 SoC 的 DSI 频率和速率以及显示时序规格
disp_timings1:display-timing{
dsi1_timing0:timing0{
时钟频率=<148500000>;
hactive =<1920>;
Vactive =<1080>;
后沿=<148>;
前沿=<88>;
HSYNC-LEN =<44>;
vback porch=<4>;
vfront porch=<36>;
vsync-len =<5>;
Pixelclk-active =<0>;
HSYNC-ACTIVE =<0>;
VSYNC-ACTIVE =<0>;
停用=<0>;
};
};
// (1 << 0)- MIPI_DSI_MODE_VIDEO /*视频模式*/
// (1 << 1)- MIPI_DSI_MODE_VIDEO_BURST /*视频突发模式*/
// (1 << 2)- MIPI_DSI_MODE_VIDEO_SYNC_PULSE /*视频脉冲模式*/
// (1 << 3)- MIPI_DSI_MODE_VIDEO_AUTO_VERT /*启用自动垂直计数模式*/
// (1 << 4)- MIPI_DSI_MODE_VIDEO_HSE /*在 vsync 脉冲和 v-porch 区域中启用 HSYNC 结束数据包*/
// (1 << 5)- MIPI_DSI_MODE_VIDEO_HFP /*禁用前沿区域*/
// (1 << 6)- MIPI_DSI_MODE_VIDEO_HBP /*禁用后沿区域*/
// (1 << 7)- MIPI_DSI_MODE_VIDEO_HSA /*禁用 HSYNC-ACTIVE 区域*/
// (1 << 8)- MIPI_DSI_MODE_VSYNC_FLUSH /*在 VSYNC 脉冲上刷新显示 FIFO */
// (1 << 9)- MIPI_DSI_MODE_EOT_PACKET /*在 HS 模式下禁用 EOT 数据包*/
// (1 << 10)- MIPI_DSI_CLOCK_NON_CONTINUOUS/* 器件支持非连续时钟行为(DSI 规范5.6.1)*/
// (1 << 11)- MIPI_DSI_MODE_LPM /*以低功耗传输数据*/
DSI、flags =<(1 << 0)|(1 << 1)|(1 << 11)|(1 << 9))>;
// 0 - MIPI_DSI_FMT_RGB888
// 1 - MIPI_DSI_FMT_RGB666
// 2 - MIPI_DSI_FMT_RGB666_PACKED
// 3 - MIPI_DSI_FMT_RGB565
DSI、format =<0>;
感谢您提供这些信息。 我会重新计算预期的编程 DSI clk 时序、并在此处为您提供反馈 .
现在总结一下、我看到配置已成功:
941AS SER [内部 PATGEN]--> FPD-Link --> 948 -->显示(成功显示色条-无花屏)
您能否确认一下、以便我们重点介绍 SoC DSI TX --> 941AS DSI RX 控制路径?
谢谢!
Miguel
您好!
clock-frequency =<148500000>;
hactive =<1920>;
Vactive =<1080>;
后沿=<148>;
前沿=<88>;
HSYNC-LEN =<44>;
vback porch=<4>;
vfront porch=<36>;
vsync-len =<5>;
Pixelclk-active =<0>;
HSYNC-ACTIVE =<0>;
VSYNC-ACTIVE =<0>;
取消激活=<0>;
1、连续 DSI CLK
2、单 DSI 输入、双输出
3、非交替行3D 模式
4、4个 DSI 通道
5、DSI 速率(Mbps):290Mbps [/报价]使用148.5 MHz 和4个数据通道的 PCLK、我认为 DSI 频率应匹配以下内容:
fDSI =(fPCLK * 4)/12 = 148.5 MHz * 3 = 445.5 MHz
DSI 数据速率= fDSI x 2 = 891Mbps
在本例中、TSKIP 计算为
TSKIP_CNT =舍入(65 * 0.4455 GHz - 5)= 24
您是否能够尝试将 SoC 配置为 每个通道输出此891Mbps 数据速率、并更改此 Tskip 值?
board.WriteI2C(serAddr, 0x40, 0x04) # DSI/DPHY Port 0 Registers board.WriteI2C(serAddr, 0x41, 0x05) # DPHY Skip timing board.WriteI2C(serAddr, 0x42, 0x30) # Set to decimal value 24由于时钟是连续的、我假设 SoC 在非突发模式下输出、如果我错了、请更正-突发模式完全需要不同的配置。
此致!
Miguel