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.
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 读写无效。
我不知道该怎么去做啦,请帮忙指导一下。
非常感谢
您好, 如果941和948之间的link建立没有问题的话,那么948的地址会自动加载到941中的,也就是说您通过读取941的寄存器DES_ID的值,如果是能正常读取到的,那说明是没问题的. 我看您这里描述就是通过读取DES_ID的值,能正确读取到948的地址.
您目前遇到的问题, 是通过i2cdetect命令探测948的地址是吗?
因为是使用的Linux系统,它有自带工具 i2c-tools,可以探测到总线上的设备,并列出来,也可以去写挂在i2c总线上的设备。目前通过这个工具去读写948的寄存器是失败的。
明白您的意思了,因为我对Linux系统不是很熟悉, 那么自带的这个I2C tools在其他芯片的I2C使用上, 是否能正确探测呢?
因为根据您的描述,我这边可以判断, 941和948的link是没问题的, 通过DES_ID也能正确读取948的地址, 也说明主机和941, 948都能正确通讯的.
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 */