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:sn65dsi86:如何通过 aux 从 i2c 读取/写入面板?

Guru**** 2399305 points
Other Parts Discussed in Thread: SN65DSI86

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1500872/sn65dsi86-sn65dsi86-how-to-read-write-the-panel-from-i2c-over-aux

器件型号:SN65DSI86

工具/软件:

尊敬的先生:

我们想使用 i2c over aux 来读取和写入面板,我已经尝试启用 IOA(直接模式)如下代码,但我不知道如何通过 sn65dsi 驱动程序读取和写入面板。请告诉我如何为面板执行 i2c 读取/写入吗?

启用 IOA 代码:

sn65dsi86_write (client、EDP_I2C_ADDR、0x60、0xA1);EDP_I2C_ADDR=0x2C
您能否以 EDID 为例并提供示例代码?
EDID 命令:
谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、  

    它是在客户的电路板还是 TI EVM 上进行了测试? 客户是否在此电路板上提供了任何有关 I2C over AUX 的信息?

    前面的 E2E 提供了一些有关使用 Aardvark 进行辅助通信的信息: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/949449/sn65dsi86-i2c-over-aux-direct-method

    此致、
    Ikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Ikram、

    感谢您的答复。

    我们的项目在 PVT 阶段,生产了许多设备,发现了白色显示问题,所以我们需要通过 i2c-over-aux 来升级面板的 Tcon 代码,我们发现 DSI86支持 IOA,但我们不知道如何使用 DSI86驱动程序来 实现它。

    我已经看到了您提供的脚本、但我们不知道如何实现它?

    您能否以读取 EDID 为例并提供示例代码?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、

    该脚本显示正在读取 EDID。 0x2D 是 DSI 桥的地址、0xA1写入寄存器0x60。 然后可以读取地址0x50的 EDID。 在最后一行中、从 EDID 读取256个字节。

    该脚本用于 Aardvark I2C 适配器。 请将语法更改为驱动程序的语法、并以相同的方式读取 EDID。




    ======= 启用 I2C_ADDR_CLAIM1=====
    60 A1 />
    ======= 写入 EDID 基址00 =====
    00 />
    ======= 读取256字节的 EEID=======
    00 />



    此致、
    Ikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Ikram:

    我已经尝试了下面的代码,但我们无法获得 EDID,您能检查下面的代码(直接方法和间接方法)吗?

    谢谢

    void i2c_over_aux_get_EDID (结构 i2c_client *客户端)

    U8 buf[16][16]={0};
    int i、j;
    PR_err ("Zhang i2c_over_aux_get_edid\n");
    #if 0 //直接
    //通过 aux 启用 i2c
    sn65dsi86_write (client、EDP_I2C_ADDR、0x60、0xA1);
    mdelay(20);
    sn65dsi86_write (client、EDP_I2C_ADDR、0x40、0x00);
    适用于(I = 0;I <=0xFF;I++)
     sn65dsi86_write (client、EDP_I2C_ADDR、0x50、0x00);
     sn65dsi86_write (client、EDP_I2C_ADDR、0x50、0x00);
     Buf[i]= sn65dsi86_read (pSn65dsi86_data->客户端、EDP_I2C_ADDR、I);
    }
    //sn65dsi86_write (client、EDP_I2C_ADDR、0x50、0x00);
    PR_ERR("Zhang EDID 是:\n");
    适用于(I = 0;I <= 0xFF;I++)
     printk ("%02x "、buf[i]);
    }
    #else //间接
    //4 50 00
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x40);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0x76、0x50);
    sn65dsi86_write (client、EDP_I2C_ADDR、0x77、0x00);
    //设置发送位
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x41);
    //启用 SEND_int_en 和 IRQ_EN
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE5、0x01);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE0、0x01);
    //4 50 01.
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x40);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0x76、0x50);
    sn65dsi86_write (client、EDP_I2C_ADDR、0x77、0x01);
    sn65dsi86_write (client、EDP_I2C_ADDR、0x64、0x00);
    //设置发送位
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x41);
    //启用 SEND_int_en 和 IRQ_EN
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE5、0x01);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE0、0x01);
    //5 50 00
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x50);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0x76、0x50);
    sn65dsi86_write (client、EDP_I2C_ADDR、0x77、0x00);
    //设置发送位
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x41);
    //启用 SEND_int_en 和 IRQ_EN
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE5、0x01);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE0、0x01);
    对于(I = 0;I < 16;I++)
     //s13
     //5 50 10.
     sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x50);
     sn65dsi86_write (客户端、EDP_I2C_ADDR、0x76、0x50);
     sn65dsi86_write (client、EDP_I2C_ADDR、0x77、0x10);
     //设置发送位
     sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x41);
     //启用 SEND_int_en 和 IRQ_EN
     sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE5、0x01);
     sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE0、0x01);
     //读取16字节数据
     Buf[i][0]= sn65dsi86_read (client、EDP_I2C_ADDR、0x79);
     Buf[i][1]= sn65dsi86_read (client、EDP_I2C_ADDR、0x7A);
     Buf[i][2]= sn65dsi86_read (client、EDP_I2C_ADDR、0x7B);
     Buf[i][3]= sn65dsi86_read (client、EDP_I2C_ADDR、0x7C);
     Buf[i][4]= sn65dsi86_read (client、EDP_I2C_ADDR、0x7D);
     Buf[i][5]= sn65dsi86_read (client、EDP_I2C_ADDR、0x7E);
     Buf[i][6]= sn65dsi86_read (客户端、EDP_I2C_ADDR、0x7F);
     Buf[i][7]= sn65dsi86_read (client、EDP_I2C_ADDR、0x80);
     Buf[i][8]= sn65dsi86_read (client、EDP_I2C_ADDR、0x81);
     Buf[i][9]= sn65dsi86_read (client、EDP_I2C_ADDR、0x82);
     Buf[i][10]= sn65dsi86_read (client、EDP_I2C_ADDR、0x83);
     Buf[i][11]= sn65dsi86_read (client、EDP_I2C_ADDR、0x84);
     Buf[i][12]= sn65dsi86_read (client、EDP_I2C_ADDR、0x85);
     Buf[i][13]= sn65dsi86_read (client、EDP_I2C_ADDR、0x86);
     Buf[i][14]= sn65dsi86_read (client、EDP_I2C_ADDR、0x87);
     Buf[i][15]= sn65dsi86_read (客户端、EDP_I2C_ADDR、0x88);
    }
    //1 50 00
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x10);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0x76、0x50);
    sn65dsi86_write (client、EDP_I2C_ADDR、0x77、0x00);
    //设置发送位
    sn65dsi86_write (client、EDP_I2C_ADDR、0x78、0x41);
    //启用 SEND_int_en 和 IRQ_EN
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE5、0x01);
    sn65dsi86_write (客户端、EDP_I2C_ADDR、0xE0、0x01);
    PR_ERR("Zhang EDID 是:\n");
    对于(I=0;I<16;I++)
     对于(j=0;j<16;j++)
     pr_err ("%02x "、buf[i][j]);
    #endif
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="646318" url="~/support/interface-group/interface/f/interface-forum/1500872/sn65dsi86-sn65dsi86-how-to-read-write-the-panel-from-i2c-over-aux/5772854 #5772854"]
    //sn65dsi86_write (client、EDP_I2C_ADDR、0x50、0x00);
    PR_ERR("Zhang EDID 是:\n");
    适用于(I = 0;I <= 0xFF;I++)
     printk ("%02x "、buf[i]);
    }
    [/报价]

    这是什么步骤?  器件地址为0x2D、EDID 目标地址为0x50。  读取 EDID 的过程是 从 目标地址0x50 (EDID)的起始寄存器0x00读取到0xFF。  

    - Ikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ikram:

    这个代码可能是错误的,因为我们不能完全理解脚本。

    您能否检查以下代码(直接方法)是否正确?

    sn65dsi86_write (client、EDP_I2C_ADDR、0x60、0xA1);

    //读取 EDID

    适用于(I = 0;I <=0xFF;I++)
     Buf[i]= sn65dsi86_read (pSn65dsi86_data->client、0x50、i);
    }
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ikram:

    我已经测试了上述可以读取 EDID 的代码(直接方法)。

    您能否检查为什么我们无法通过间接方法获得 EDID?间接代码低于"#else //indirect"。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、

    如果直接方法有效、并且源/SoC 器件支持时钟延展、那么 我们建议直接使用直接方法来读取 EDID。 如果没有、那么我们可以进一步查看脚本序列。

    - Ikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ikram:

    我担心 DIRECT 方法不能很好地对 TCON 代码进行降级,所以我们希望您检查 INDRECT 方法,如果 INDRECT 方法能很好地工作,我们可以用它代替 DIRECT 方法。

    所以,你能检查我的间接方法代码作为最后的命令吗?

    顺便说一下、如何检查"源/SoC 器件是否支持时钟延展"?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:  

    由于25年4月18日(星期五)美国公众假期、支持将在星期一恢复。 感谢您的耐心。  

    此致、  

    Logan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、

    您之前提到过直接方法是有效的。 它是否持续运行?

    SoC/source/GPU 数据表中应该提到是否支持 I2C 上的时钟延展。  


    对于间接方法、请执行以下操作:

    1.先清除寄存器0xF4。 写入寄存器0xF4 = 0xFF

    2.确保0xF4被清零:读取寄存器0xF4

    3.通过写入以下内容对 AUX_CMD = 0x4进行编程:

        -寄存器0x78 = 0x40

        -寄存器0x76 = 0x50

        -寄存器0x77 = 0x0
    4、发送、通过写入寄存器0x78 = 0x41

    5.确保设置 SEND_INT 且没有错误。 读取寄存器0xF4

    6.确保发送位被清除。 读取寄存器0x78


    我附加了上一个线程中的以下脚本、用于 Aadvark 适配器的间接方法步骤。 请检查一下是否正常工作、然后继续执行其余步骤。

    如果直接方法有效、我们仍然建议使用它来简化步骤。

    此致、
    Ikram





    ======= 清除寄存器0xF4======

    F4 FF />

    ======= 确保寄存器0xF4被清除======

    F4. />

    00 />

    ======= 对 AUX_CMD=0x4====进行编程

    78 40 />

    76 50 />

    77 00 />

    ======= send=======

    78 41. />

    ======= 确保设置了 SEND_INT 且没有错误=====

    F4. />

    00 />

    ======= 确保清除 SEND 位=====

    78 />

    00 />

    使用 I2C 分析器、寄存器0xF4和0x78均被正确读回。





  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ikram:

    感谢您的支持。

    我已经测试了间接方法可以在一个项目上工作,但它不能在另一个项目上工作,我正在检查这两个项目之间的差异。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ikram、

    顺便说一下,下面的代码是什么意思?

    ======= 写入 EDID 基址00 =====
    00 />

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、

    这两条线路用于读取操作。 它从从从0x00开始的地址0x50开始读取、并从256个字节开始读取。 对于读取 I2C、它有两个步骤、即写入和读取操作。  

    根据系统的发送方式、您只需从地址中读取并在一行操作中注册即可。

    ======= 写入 EDID 基址00 =====
    00 />
    ======= 读取256字节的 EEID=======
    00 />

    此致、
    Ikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ikram、

    当我们读取 NG 器件的 EDID 时遇到 i2c 错误、并且发现器件没有 ACK。 我们捕捉到波形、发现与普通设备相比、NG 设备上的 AUX P/N 已交换。您能告诉我们如何通过设置 DSI86的寄存器来交换 AUXP 和 AUXN 吗?

    另外、如您所知、我们可以在一个项目上获得 EDID、但无法在另一个项目上获得 EDID、您可以采用任何调试方法吗?

    我们有时发现0xF4=9和0x78发送位无法清零。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Ikram、

    我们刚刚测试了 Tcon 代码、它交换了 AUXP 和 AUXN 可以获得 EDID。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Ikram、

    您能帮助我们了解  AUXP 和 AUXN 为何已交换、以及如何通过 DSI86的设置寄存器来交换它们吗?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、

    1.您能否分享所捕获的波形,以及它们在工作板和不工作板之间的区别? 还请提供原理图、包括整个链接中的 AUX 通道。 请检查此设备(源端)和接收端(显示/接收端)的 AUX 通道组件和连接。

    AUX 连接 应根据拉电流和灌电流原理图上的 DP/eDP 实现进行设置。






    2.在不工作的板上,当前出现的问题是什么?

    所有电路板的构建是否相同、或者是否存在任何差异、例如不同的显示、不同的 eDP/DP 接收端等?




    SN65DSI86只能交换数据通道的极性、而不能交换辅助通道。 因此没有寄存器设置来 反转极性。

    此致、
    Ikram


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Ikram、

    抱歉、我无法上传所有图片、因为我的电脑无法正常工作。

    我将在 PC 再次工作后上传 NG 波形。

    NG 波形与 OK 波形相反、这意味着 OK 波形上的电压电平较高、但 NG 波形上的电压电平较低。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Ikram、

    在典型应用中、为什么图9-2 1080p 面板的 AUX_N 不需要上拉电阻器? 我们的工程也是1080p 面板、AUX_N 上拉3.3V。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Haibin、

    您的面板是 DP 还是 eDP 配置? 这将决定 AUX 通道需要哪些元件(交流电容器、上拉和下拉电阻器)。 对于 DP 和 eDP 实现、数据表中的图9-1和9-2是不同的。  


    在接收到 DP 主链路和 AUX 的 DP/eDP 接收端(显示屏)上、这里添加了哪些元件? 请分享这部分原理图和 NG 情况的波形。

    谢谢您、
    Ikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Ikram、

    好的,我看。目前没有问题。

    感谢您的支持。