TI中文支持网
TI专业的中文技术问题搜集分享网站

DS90UB941AS-Q1: DS90UB941 连接两个 DS90UB948 ,i2cdetect 看不到 DS90UB948 的i2c地址

Part Number:DS90UB941AS-Q1

Hi:

硬件如图去设计:

DS90UB948 的 idx 是直接接地的:

DS90UB941 的I2C地址是 0x1a,DS90UB948 的地址是 0x2c。

Linux 上通过如下命令不能探测到 DS90UB948 的i2c地址:

1、开机探测
# i2cdetect -y 17
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — 1a — — — — —  ds90ub941 的地址
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — — 

2、复位
i2cset -fy 17 0x1a 0x01 0x0f b                        Reset DSI/DIGITLE 复位
i2cset -fy 17 0x1a 0x03 0xBA b                       Enable FPD-Link I2C pass through 打开透传,然后可以看到 948 的I2C地址

3、再探测
# i2cdetect -y 17
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — 1a — — — — —
20: — — — — — — — — — — — — — — — —    没有显示 ds90ub948 的地址
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — — 

通过读取 ds90ub941 的寄存器值,DES_ID_DES_ID_1 Register (Address = 6h) [reset = 0h] 里的值是 0x58 = 0x2c 左移一位,也就是找到了 ds90ub948 

通过命令对 ds90ub948  读写无效。

我不知道该怎么去做啦,请帮忙指导一下。

非常感谢

Kailyn Chen:

您好,  如果941和948之间的link建立没有问题的话,那么948的地址会自动加载到941中的,也就是说您通过读取941的寄存器DES_ID的值,如果是能正常读取到的,那说明是没问题的. 我看您这里描述就是通过读取DES_ID的值,能正确读取到948的地址. 

您目前遇到的问题, 是通过i2cdetect命令探测948的地址是吗?

,

relax:

因为是使用的Linux系统,它有自带工具 i2c-tools,可以探测到总线上的设备,并列出来,也可以去写挂在i2c总线上的设备。目前通过这个工具去读写948的寄存器是失败的。

,

Kailyn Chen:

明白您的意思了,因为我对Linux系统不是很熟悉, 那么自带的这个I2C tools在其他芯片的I2C使用上, 是否能正确探测呢?

因为根据您的描述,我这边可以判断, 941和948的link是没问题的, 通过DES_ID也能正确读取948的地址, 也说明主机和941, 948都能正确通讯的.

,

relax:

在其它芯片是可以的,我这边使用了两个941,一路是正常的,现在不正常的是另一路,可以看截图。

,

relax:

您好,我这里解决了,因为硬件问题,导致fpdlink的线连接不稳定导致。目前已经可以找到948的i2c地址啦。

也可以正常读写948的寄存器啦。

,

Kailyn Chen:

非常感谢您的反馈, 后续有什么问题,继续讨论.

,

relax:

请问这样的连接,该怎么配置941和948的寄存器呢?

有示例吗?

,

relax:

Hi 

我目前已经能够通过Linux i2ctool 写UB941/8的寄存器,让屏幕正常显示。

但是现在遇到了新问题。我把寄存器写的操作加入到驱动里,948的写报错了。要等一些时间,才能成功写948的寄存器。

下面是我使用的命令#define UB941_ADDR 0x1a#define UB948_ADDR 0x2c

ds90ub94x_write_reg(UB941_ADDR, 0x01, 0x0F); /* Reset ub941, Disable DSI */ds90ub94x_write_reg(UB941_ADDR, 0x5B, 0x0C); /* FPD3_TX_MODE=Single or Replicate, Align on DE */ds90ub94x_write_reg(UB941_ADDR, 0x4F, 0x8C); /* Set DSI_CONTINUOUS_CLOCK, 4 lanes, DSI Port 0 */

ds90ub94x_write_reg(UB941_ADDR, 0x40, 0x04); /* Select DSI Port 0 digital registers */ds90ub94x_write_reg(UB941_ADDR, 0x41, 0x21); /* Select DSI_CONFIG_1 register */ds90ub94x_write_reg(UB941_ADDR, 0x42, 0x60); /* Set DSI_CONFIG_1: DSI_VS_POLARITY=DSI_HS_POLARITY=1 */

ds90ub94x_write_reg(UB941_ADDR, 0x40, 0x04); /* Select DSI Port 0 digital registers */ds90ub94x_write_reg(UB941_ADDR, 0x41, 0x05); /* Select DPHY_SKIP_TIMING register */ds90ub94x_write_reg(UB941_ADDR, 0x42, 0x16); /* Write DPHY_SKIP_TIMING: TSKIP_CNT value */

ds90ub94x_write_reg(UB941_ADDR, 0x01, 0x00); /* Enable DSI */ds90ub94x_write_reg(UB941_ADDR, 0x1E, 0x01); /* Select FPD-Link III Port 0 */ds90ub94x_write_reg(UB941_ADDR, 0x03, 0x9A); /* Enable I2C_PASSTHROUGH, FPD-Link III Port 0 */

ds90ub94x_write_reg(UB948_ADDR, 0x01, 0x03); /* Reset ub948 */ds90ub94x_write_reg(UB948_ADDR, 0x1E, 0x90); /* lcd_led_pwm, Pull up*/ds90ub94x_write_reg(UB948_ADDR, 0x1F, 0x09); /* lcd_led_en, Pull up */

赞(0)
未经允许不得转载:TI中文支持网 » DS90UB941AS-Q1: DS90UB941 连接两个 DS90UB948 ,i2cdetect 看不到 DS90UB948 的i2c地址
分享到: 更多 (0)