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:如何通过 i2c over aux 修改 OLED 面板的指定寄存器

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

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1201716/sn65dsi86-how-to-modify-the-specified-register-of-oled-panel-through-i2c-over-aux

器件型号:SN65DSI86

您好、TI!

我们需要使用 sn65dsi86并通过 AUX 修改 OLED 面板的0x0320和0x0321寄存器、以控制亮度。

sn65dsi86的哪个寄存器可以控制面板的0x0320和0x0321寄存器?

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

    您好!

    此示例将从灌电流的 DPCD 寄存器0x00320中读取16个字节。




    ========= 清除 AUX request===的状态寄存器

    F4 FF />
    ========= 从 DPCD 0x00320 ===发送16字节的 AUX 请求
    =========== DPCD 地址为0x000320 ===
    74 00 />
    75 03. />
    76 20. />
    =========== 要读取的字节数为16===
    77 10. />
    =========== 发送 AUX 读取请求===
    78 91.
    ========= AUX 请求的读取状态===
    ========= 确保 SEND_INT 已设置,且没有错误===
    F4. />
    00 />
    ========= 清除 AUX request===的状态寄存器
    F4 FF />
    ========= 从 AUX_RDATA===中读取16个字节
    79 />
    00 />


    谢谢

    大卫

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

    尊敬的 David:

    这个答案对我很有帮助!

    1.根据你给出的代码、我对代码的理解不是很好、
    F4. />
    0x0是否写入了0xF4地址?

    2.通过调优工具,我用下面的代码在 quelcoom 平台上启动 LCD 面板。 如果我需要获取值0x0320、是否可以在旧代码之后编写得到0x0320的新代码?  

    //启动面板,旧代码
    eDP_WRITE_reg (0x09、0x00);
    eDP_WRITE_reg (0x0A、0x06);
    eDP_WRITE_reg (0x0D、0x00);
    eDP_WRITE_reg (0x10、0x80);
    eDP_WRITE_reg (0x11、0x00);
    eDP_WRITE_reg (0x12、0x2a);
    eDP_WRITE_reg (0x13、0x2a);
    eDP_WRITE_reg (0x20、0x00);
    eDP_WRITE_reg (0x21、0x05);
    eDP_WRITE_reg (0x22、0x00);
    eDP_WRITE_reg (0x23、0x05);
    eDP_WRITE_reg (0x24、0x40);
    eDP_WRITE_reg (0x25、0x06);
    eDP_WRITE_reg (0x2C、0x20);
    eDP_WRITE_reg (0x2D、0x80);
    eDP_WRITE_reg (0x30、0x06);
    eDP_WRITE_reg (0x31、0x80);
    eDP_WRITE_reg (0x34、0x50);
    eDP_WRITE_reg (0x36、0x25);
    eDP_WRITE_reg (0x38、0x30);
    eDP_WRITE_reg (0x3A、0x03);
    eDP_WRITE_reg (0x3C、0x00);//normal
    eDP_WRITE_reg (0x3D、0x00);
    edp_WRITE_reg (0x3E、0x00);
    eDP_WRITE_reg (0x5B、0x00);
    edp_WRITE_reg (0x93、0x3E);//30
    eDP_WRITE_reg (0x94、0x80);
    mdelay (20);
    // eDP_WRITE_reg (0x3C、0x10);//测试
    eDP_WRITE_reg (0x5C、0x01);//rm HPD
    eDP_WRITE_reg (0x5A、0x05);
    eDP_WRITE_reg (0x0d、0x01);
    mdelay (20);
    eDP_WRITE_reg (0x64、0x01);
    eDP_WRITE_reg (0x74、0x00);
    eDP_WRITE_reg (0x75、0x01);
    eDP_WRITE_reg (0x76、0x0A);
    eDP_WRITE_reg (0x77、0x01);
    edp_WRITE_reg (0x78 0x81);
    eDP_WRITE_reg (0x96、0x01);
    eDP_WRITE_reg (0x5A、0x0D);

    /*create code 以获取值0x0320*/
    eDP_WRITE_reg (0xF、0xFF);
    eDP_WRITE_reg (0x74、0x00);
    eDP_WRITE_reg (0x75、0x03);
    edp_WRITE_reg (0x76、0x20);
    eDP_WRITE_reg (0x77、0x10);
    eDP_WRITE_reg (0x78 0x91);
    mdelay (20);
    eDP_WRITE_reg (0xF4、0x00);//这对吗?
    eDP_READ_reg (0x00);//读取数据
    eDP_WRITE_reg (0xF、0xFF);
    eDP_WRITE_reg (0x79、0x00);//这对吗?
    eDP_WRITE_reg (0x00、0x00);//这是正确的??
    eDP_READ_REG (((0x0320&0xFF00)>> 8);//读取0x0320 LSB
    eDP_READ_REG ((0x0320和0xff));//读取0x0320 MSB

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

    除了读取值0x0320、我们还需要写入该寄存器、该寄存器用于通过 AUX 更改 OLED 面板亮度。
    如何配置 sn65dsi86的寄存器以写入 OLED 面板的寄存器0x0320?

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

    您好!

    F4 FF />

    此命令将0xFF 值写入寄存器0xF4

    F4. />
    00 />

    此命令从寄存器0xF4读取1字节数据

    2.通过调优工具,我用下面的代码在 quelcoom 平台上启动 LCD 面板。  如果我需要获取值0x0320、是否可以在旧代码之后编写得到0x0320的新代码?  

    可以

    下面是 DCPD 写入的示例

    此示例将0x01写入灌电流的 DPCD 0x0010A 寄存器。



    ========= 清除 AUX 写入请求的状态寄存器===
    F4 FF />
    ========= 将 DPCD 寄存器0x0010A 写入 Sink 以启用 ASSR===
    =========== 要写入的数据为0x01。 =========
    64 01. />
    =========== DPCD 寄存器为0x0010A。 =========
    74 00 />
    7501 />
    76 0A. />
    =========== 要写入的字节数为1 ===
    77 01. />
    =========== 发送 AUX 写入请求===
    78 81.
    ========= AUX 请求的读取状态===
    ========= 确保 SEND_INT 已设置,且没有错误===
    F4. />

    00 />
    ========= 清除 AUX request===的状态寄存器
    F4 FF />

    我还认为大部分 DPCD 地址00701h 至0074Fh 被分配用于背光控制。  edp_backlight_brightness、MSB/LSB 寄存器分别为 DPCD 地址00722h 和00723h、为何要使用0x00320?

    谢谢
    大卫

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

    尊敬的 David:

    1.我会尝试你的代码,谢谢!

    2.为什么要使用0x00320?

    >>我们使用了三星的 OLED 面板,数据表提示0x0320是 AMD 的亮度控制, 0x0354是内部的亮度控制。 我检查了 Inter 和 AMD 的源代码。 为0x0320和0x0354写入亮度值。

    3.我还认为大部分 DPCD 地址00701h 至0074Fh 被分配给背光控制。 eDP_backlight_brightness _MSB/LSB 寄存器是 DPCD 地址00722h 和00723h

    >>使用00701h 至0074Fh 地址来控制亮度。 它是 DPCD 的通用数据包地址吗? 是否有 DPCD 的数据包解释文件

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

    尊敬的 David:

    F4. />
    00 />

    此命令从寄存器0xF4读取1字节数据

    为什么需要读取 F4地址? 有什么功能吗?

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

    尊敬的 David:

    我想将0x4076写入地址0x320
    我使用 i2c_over_aux_set_Breight 成功写入0x40、使用 i2c_over_aux_get_backlight 读取0x40
    我如何将0x4076写入0x320?

    void i2c_over_aux_SET_backlight (int level)

    eDP_WRITE_reg (0xF4、0xFF);
    eDP_WRITE_reg (0x64、0x40);
    eDP_WRITE_reg (0x74、0x00);
    eDP_WRITE_reg (0x75、0x03);
    eDP_WRITE_reg (0x76、0x20);
    eDP_WRITE_reg (0x77、0x02);
    eDP_WRITE_reg (0x78、0x81);
    mdelay(10);
    PR_INFO ("%s"、ret[0xF4]=%X\n"、__func__、edp_read_reg (0xF4));
    eDP_WRITE_reg (0xF4、0xFF);
    }

    void i2c_over_aux_get_backlight()

    eDP_WRITE_reg (0xF4、0xFF);
    eDP_WRITE_reg (0x74、0x00);
    eDP_WRITE_reg (0x75、0x03);
    eDP_WRITE_reg (0x76、0x20);
    eDP_WRITE_reg (0x77、0x10);
    eDP_WRITE_reg (0x78、0x91);
    mdelay (20);
    PR_INFO ("%s"、ret[0xF4]=%X\n"、__func__、edp_read_reg (0xF4));
    eDP_WRITE_reg (0xF4、0xFF);

    pr_err ("%s"、ret[0x79]=%x\n"、__func__、edp_read_reg (0x79));
    }

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

    您好!

    寄存器0xF4是状态寄存器。 您可以使用它来检查 AUX 读取/写入请求是否成功。

    如果0x00320是 DPCD 寄存器、那么我看不到您如何向其写入值0x4076、因为寄存器仅为8位。 您是否应该将0x76写入寄存器0x00321?

    谢谢

    大卫

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

    尊敬的 David:

    1.将0x4076写入寄存器0x0320。 03h 是 LSB、20h 是 MSB。 我需要将0x40写入 LSB、将0x76写入 MSB。 如何配置寄存器?


    edp_backlight_brightness _MSB/LSB 寄存器是 DPCD 地址00722h 和00723h、这些 DPCD 可以寻址公共寄存器吗? 如何将0x40写入 MSB 并将0x76写入 LSB?


    3、如何配置寄存器以读取 EDP_Brelight_brightness 或 MSB/LSB 的值?

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

    您好、Chen!

    我要为大卫一周的其余时间填写。 我正在回顾对话内容以了解背景、一旦我了解了背景、我将尽我所能回答您的问题。

    谢谢。

    察赫