首页 > 技术知识 > 正文

1. 前言

使用一个941连接2个 948显示输出:

941的GPIO0/1/2/3到前948的GPIO0/1/2/3和 941的D_GPIO0/1/2/3到第二个948的GPIO0/1/2/3。

941的D_GPIO3可以改变第二948的GPIO3 但有一个问题: 941的GPIO3不能改变第一个948的GPIO3

[ 1.128404] Semidrive DS941 DS948 Goodix-TS 5-005d: I2C Address: 0x5d [ 1.137620] Semidrive DS941 DS948 Goodix-TS 5-005d: GPIO lookup for consumer irq [ 1.137628] Semidrive DS941 DS948 Goodix-TS 5-005d: using device tree for GPIO lookup [ 1.137711] of_get_named_gpiod_flags: parsed irq-gpios property of node /soc/i2c@30b70000/touch@5d[0] – status (0) [ 1.137729] Semidrive DS941 DS948 Goodix-TS 5-005d: GPIO lookup for consumer reset [ 1.137737] Semidrive DS941 DS948 Goodix-TS 5-005d: using device tree for GPIO lookup [ 1.137761] of_get_named_gpiod_flags: parsed reset-gpios property of node /soc/i2c@30b70000/touch@5d[0] – status (0) [ 1.138075] Semidrive DS941 DS948 Goodix-TS 5-005d: goodix_ts_probe(): get_gpio error=0 [ 1.146280] Semidrive DS941 DS948 Goodix-TS 5-005d: ts->addr_ds941=0xc, ts->addr_ds948=0x2c [ 1.154669] Semidrive DS941 DS948 Goodix-TS 5-005d: ts->irq_channel=3, ts->reset_channel=2 [ 1.163147] Semidrive DS941 DS948 Goodix-TS 5-005d: 941[4] reg=0x1e, val=0x1 [ 1.171158] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 reg=0x17, val=0x9e [ 1.178249] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 reg=0x7, val=0xba [ 1.185233] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 reg=0x8, val=0xba [ 1.192240] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 reg=0x70, val=0x28 [ 1.199309] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 reg=0x77, val=0x28 [ 1.206796] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 before out reg=0xf, val=0x0 [ 1.214776] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 after out reg=0xf, val=0x3 [ 1.222567] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 before out reg=0x1f, val=0x0 [ 1.230679] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 after out reg=0x1f, val=0x5 [ 1.258151] Semidrive DS941 DS948 Goodix-TS 5-005d: goodix_ts_probe(): call reset [ 1.265847] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 before reg=0x1e, val=0x0 [ 1.273605] usb 2-1: new SuperSpeed USB device number 2 using xhci-hcd [ 1.273969] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 after reg=0x1e, val=0x10 [ 1.292078] usb 2-1: no of_node; not parsing pinctrl DT [ 1.295916] hub 2-1:1.0: no of_node; not parsing pinctrl DT [ 1.295990] hub 2-1:1.0: USB hub found [ 1.296245] hub 2-1:1.0: 4 ports detected [ 1.366154] Semidrive DS941 DS948 Goodix-TS 5-005d: ts->client->addr == 0x14 0 [ 1.373695] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 before reg=0x1f, val=0x5 [ 1.381463] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 after reg=0x1f, val=0x1 [ 1.390844] Semidrive DS941 DS948 Goodix-TS 5-005d: goodix_reset(): reset high [ 1.399613] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 before reg=0x1e, val=0x10 [ 1.407469] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 after reg=0x1e, val=0x90 [ 1.418164] usb 1-1: new high-speed USB device number 2 using xhci-hcd [ 1.482306] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 in reg=0xf, val=0x3 [ 1.489794] Semidrive DS941 DS948 Goodix-TS 5-005d: 948 in reg=0x1f, val=0x1 [ 1.554964] Semidrive DS941 DS948 Goodix-TS 5-005d: goodix_i2c_test(): read error=0, test=0x5f [ 1.565179] Semidrive DS941 DS948 Goodix-TS 5-005d: Touch ID: 928, version: 0x1060 [ 1.573749] usb 1-1: no of_node; not parsing pinctrl DT [ 1.574459] Semidrive DS941 DS948 Goodix-TS 5-005d: dump 941: [ 1.580574] Semidrive DS941 DS948 Goodix-TS 5-005d: Direct firmware load for goodix_928_cfg.bin failed with error -2 [ 1.580620] goodix_configure_dev [ 1.599715] hub 1-1:1.0: no of_node; not parsing pinctrl DT [ 1.599763] hub 1-1:1.0: USB hub found [ 1.599960] hub 1-1:1.0: 4 ports detected [ 1.609712] Semidrive DS941 DS948 Goodix-TS 5-005d: goodix_read_config(): len=186, 0x5f, 0x0, 0x5, 0xe0, 0x1, 0x5, 0xd [ 1.610274] input: Goodix Capacitive TouchScreen as /devices/platform/soc/30b70000.i2c/i2c-5/5-005d/input/input0 [ 1.610413] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 out reg=0x0, val=0x18 [ 1.617755] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 out reg=0x1, val=0x0 [ 1.624996] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 out reg=0x2, val=0x0 [ 1.633780] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 out reg=0x3, val=0x9a [ 1.641132] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 out reg=0x4, val=0x0 [ 1.648385] Semidrive DS941 DS948 Goodix-TS 5-005d: 941 out reg=0x5, val=0x0 ……..
<

外部信号到948的GPIO3正常,检查完毕; 但941的GPIO3没有信号

2. 修改寄存器

想要948的GPIO3作为输入,而941的GPIO3作为输出 尝试添加如下配置

Write( 941, 0x1E, 0x01) Write( 941, 0x0F,0x01) Write( 948_port0, 0x34, 0x01) Write(948_port0, 0x1F,0x03)

仍然没有好 941的GPIO3一直很低。

touch_dump_all: dump ser-0xc: ser: Reg 0x00 = 0x18. ser: Reg 0x01 = 0x0. ser: Reg 0x02 = 0x0. ser: Reg 0x03 = 0x9a. ser: Reg 0x04 = 0x0. ser: Reg 0x05 = 0x0. ser: Reg 0x06 = 0x58. ser: Reg 0x07 = 0xba. ser: Reg 0x08 = 0xba. ser: Reg 0x09 = 0x1. ser: Reg 0x0a = 0xd4. ser: Reg 0x0b = 0x6. ser: Reg 0x0c = 0x67. ser: Reg 0x0d = 0x30. ser: Reg 0x0e = 0x0. ser: Reg 0x0f = 0x1. ser: Reg 0x10 = 0x0. ser: Reg 0x11 = 0x0. ser: Reg 0x12 = 0x0. ser: Reg 0x13 = 0x8f. ser: Reg 0x14 = 0x0. ser: Reg 0x15 = 0x0. ser: Reg 0x16 = 0xfe. ser: Reg 0x17 = 0x9e. ser: Reg 0x18 = 0x7f. ser: Reg 0x19 = 0x7f. ser: Reg 0x1a = 0x1. ser: Reg 0x1b = 0x0. ser: Reg 0x1c = 0x0. ser: Reg 0x1d = 0x0. ser: Reg 0x1e = 0x1. ser: Reg 0x1f = 0x0. ser: Reg 0x20 = 0xb. ser: Reg 0x21 = 0x0. ser: Reg 0x22 = 0x25. ser: Reg 0x23 = 0x0. ser: Reg 0x24 = 0x0. ser: Reg 0x25 = 0x0. ser: Reg 0x26 = 0x0. ser: Reg 0x27 = 0x0. ser: Reg 0x28 = 0x1. ser: Reg 0x29 = 0x20. ser: Reg 0x2a = 0x20. ser: Reg 0x2b = 0xa0. ser: Reg 0x2c = 0x0. ser: Reg 0x2d = 0x0. ser: Reg 0x2e = 0xa5. ser: Reg 0x2f = 0x5a. ser: Reg 0x30 = 0x0. ser: Reg 0x31 = 0xb9. ser: Reg 0x32 = 0x0. ser: Reg 0x33 = 0x5. ser: Reg 0x34 = 0xc. ser: Reg 0x35 = 0x0. ser: Reg 0x36 = 0x0. ser: Reg 0x37 = 0x0. ser: Reg 0x38 = 0x0. ser: Reg 0x39 = 0x0. ser: Reg 0x3a = 0x0. ser: Reg 0x3b = 0x0. ser: Reg 0x3c = 0x0. ser: Reg 0x3d = 0x0. ser: Reg 0x3e = 0x81. ser: Reg 0x3f = 0x2. ser: Reg 0x40 = 0x8. ser: Reg 0x41 = 0x5. ser: Reg 0x42 = 0x14. ser: Reg 0x43 = 0x0. ser: Reg 0x44 = 0x0. ser: Reg 0x45 = 0x0. ser: Reg 0x46 = 0x0. ser: Reg 0x47 = 0x0. ser: Reg 0x48 = 0x0. ser: Reg 0x49 = 0x0. ser: Reg 0x4a = 0x0. ser: Reg 0x4b = 0x0. ser: Reg 0x4c = 0x0. ser: Reg 0x4d = 0x0. ser: Reg 0x4e = 0x0. ser: Reg 0x4f = 0x8c. ser: Reg 0x50 = 0x16. ser: Reg 0x51 = 0x0. ser: Reg 0x52 = 0x0. ser: Reg 0x53 = 0x0. ser: Reg 0x54 = 0x2. ser: Reg 0x55 = 0x10. ser: Reg 0x56 = 0x0. ser: Reg 0x57 = 0x2. ser: Reg 0x58 = 0x0. ser: Reg 0x59 = 0x0. ser: Reg 0x5a = 0xd9. ser: Reg 0x5b = 0x5. ser: Reg 0x5c = 0x7. ser: Reg 0x5d = 0x6. ser: Reg 0x5e = 0x44. ser: Reg 0x5f = 0x67. ser: Reg 0x60 = 0x22. ser: Reg 0x61 = 0x2. ser: Reg 0x62 = 0x0. ser: Reg 0x63 = 0x0. ser: Reg 0x64 = 0x10. ser: Reg 0x65 = 0x0. ser: Reg 0x66 = 0x0. ser: Reg 0x67 = 0x0. ser: Reg 0x68 = 0x0. ser: Reg 0x69 = 0x0. ser: Reg 0x6a = 0x0. ser: Reg 0x6b = 0x0. ser: Reg 0x6c = 0x0. ser: Reg 0x6d = 0x0. ser: Reg 0x6e = 0x20. ser: Reg 0x6f = 0x0. touch_dump_all: dump des-0x2c: des: Reg 0x00 = 0x58. des: Reg 0x01 = 0x4. des: Reg 0x02 = 0x0. des: Reg 0x03 = 0xf0. des: Reg 0x04 = 0xfe. des: Reg 0x05 = 0x1e. des: Reg 0x06 = 0x0. des: Reg 0x07 = 0x18. des: Reg 0x08 = 0x0. des: Reg 0x09 = 0x0. des: Reg 0x0a = 0x0. des: Reg 0x0b = 0x0. des: Reg 0x0c = 0x0. des: Reg 0x0d = 0x0. des: Reg 0x0e = 0x0. des: Reg 0x0f = 0x0. des: Reg 0x10 = 0x0. des: Reg 0x11 = 0x0. des: Reg 0x12 = 0x0. des: Reg 0x13 = 0x0. des: Reg 0x14 = 0x0. des: Reg 0x15 = 0x0. des: Reg 0x16 = 0x0. des: Reg 0x17 = 0x0. des: Reg 0x18 = 0x0. des: Reg 0x19 = 0x1. des: Reg 0x1a = 0x0. des: Reg 0x1b = 0x0. des: Reg 0x1c = 0x23. des: Reg 0x1d = 0x10. des: Reg 0x1e = 0x90. des: Reg 0x1f = 0x3. des: Reg 0x20 = 0x0. des: Reg 0x21 = 0x0. des: Reg 0x22 = 0x40. des: Reg 0x23 = 0x20. des: Reg 0x24 = 0x8. des: Reg 0x25 = 0x0. des: Reg 0x26 = 0x83. des: Reg 0x27 = 0x84. des: Reg 0x28 = 0x1. des: Reg 0x29 = 0x0. des: Reg 0x2a = 0x0. des: Reg 0x2b = 0x0. des: Reg 0x2c = 0x0. des: Reg 0x2d = 0x0. des: Reg 0x2e = 0x0. des: Reg 0x2f = 0x0. des: Reg 0x30 = 0x0. des: Reg 0x31 = 0x0. des: Reg 0x32 = 0x90. des: Reg 0x33 = 0x25. des: Reg 0x34 = 0x1. des: Reg 0x35 = 0x0. des: Reg 0x36 = 0x0. des: Reg 0x37 = 0x8c. des: Reg 0x38 = 0x0. des: Reg 0x39 = 0x0. des: Reg 0x3a = 0x0. des: Reg 0x3b = 0x0. des: Reg 0x3c = 0x20. des: Reg 0x3d = 0xe0. des: Reg 0x3e = 0x23. des: Reg 0x3f = 0x0. des: Reg 0x40 = 0x43. des: Reg 0x41 = 0x3. des: Reg 0x42 = 0x3. des: Reg 0x43 = 0x0. des: Reg 0x44 = 0x60. des: Reg 0x45 = 0x88. des: Reg 0x46 = 0x0. des: Reg 0x47 = 0x0. des: Reg 0x48 = 0xf. des: Reg 0x49 = 0xe0. des: Reg 0x4a = 0x0. des: Reg 0x4b = 0x8. des: Reg 0x4c = 0x0. des: Reg 0x4d = 0x0. des: Reg 0x4e = 0x63. des: Reg 0x4f = 0x0. des: Reg 0x50 = 0x3. des: Reg 0x51 = 0x10. des: Reg 0x52 = 0x0. des: Reg 0x53 = 0x1. des: Reg 0x54 = 0x80. des: Reg 0x55 = 0x0. des: Reg 0x56 = 0x0. des: Reg 0x57 = 0x0. des: Reg 0x58 = 0x0. des: Reg 0x59 = 0x3f. des: Reg 0x5a = 0x20. des: Reg 0x5b = 0x20. des: Reg 0x5c = 0x0. des: Reg 0x5d = 0x0. des: Reg 0x5e = 0x0. des: Reg 0x5f = 0x0. des: Reg 0x60 = 0x0. des: Reg 0x61 = 0x0. des: Reg 0x62 = 0x0. des: Reg 0x63 = 0x0. des: Reg 0x64 = 0x10. des: Reg 0x65 = 0x0. des: Reg 0x66 = 0x0. des: Reg 0x67 = 0x0. des: Reg 0x68 = 0x0. des: Reg 0x69 = 0x0. des: Reg 0x6a = 0x0. des: Reg 0x6b = 0x0. des: Reg 0x6c = 0x0. des: Reg 0x6d = 0x0. des: Reg 0x6e = 0x0. des: Reg 0x6f = 0x0.
<
3.对948的GPIO3施加电压时,查看0x6E中GPIO状态的变化

948的reg默认值0x6E为0x0, 941的GPIO3为低 在切换948的GPIO3到高之后,这个值变为0x8,但是941的GPIO3仍然是低的

可以尝试通过在941AS上写入0x20来注册0x04 然后写入0x00来注册0x04

从而重新设置SER上的回传通道CRC错误 然后捕获一个寄存器转储

4. 修改0x0e

试着把寄存器0x0e改成0x01 设置ser 0x4为0x20,然后0x0

touch_dump_all: dump ser-0xc: ser: Reg 0x00 = 0x18. ser: Reg 0x01 = 0x0. ser: Reg 0x02 = 0x0. ser: Reg 0x03 = 0x9a. ser: Reg 0x04 = 0x0. ser: Reg 0x05 = 0x0. ser: Reg 0x06 = 0x58. ser: Reg 0x07 = 0xba. ser: Reg 0x08 = 0xba. ser: Reg 0x09 = 0x1. ser: Reg 0x0a = 0x0. ser: Reg 0x0b = 0x0. ser: Reg 0x0c = 0x65. ser: Reg 0x0d = 0x30. ser: Reg 0x0e = 0x0. ser: Reg 0x0f = 0x5. ser: Reg 0x10 = 0x0. ser: Reg 0x11 = 0x0. ser: Reg 0x12 = 0x0. ser: Reg 0x13 = 0x8f. ser: Reg 0x14 = 0x0. ser: Reg 0x15 = 0x0. ser: Reg 0x16 = 0xfe. ser: Reg 0x17 = 0x1e. ser: Reg 0x18 = 0x7f. ser: Reg 0x19 = 0x7f. ser: Reg 0x1a = 0x1. ser: Reg 0x1b = 0x0. ser: Reg 0x1c = 0x0. ser: Reg 0x1d = 0x0. ser: Reg 0x1e = 0x1. ser: Reg 0x1f = 0x0. ser: Reg 0x20 = 0xb. ser: Reg 0x21 = 0x0. ser: Reg 0x22 = 0x25. ser: Reg 0x23 = 0x0. ser: Reg 0x24 = 0x0. ser: Reg 0x25 = 0x0. ser: Reg 0x26 = 0x0. ser: Reg 0x27 = 0x0. ser: Reg 0x28 = 0x1. ser: Reg 0x29 = 0x20. ser: Reg 0x2a = 0x20. ser: Reg 0x2b = 0xa0. ser: Reg 0x2c = 0x0. ser: Reg 0x2d = 0x0. ser: Reg 0x2e = 0xa5. ser: Reg 0x2f = 0x5a. ser: Reg 0x30 = 0x0. ser: Reg 0x31 = 0xb9. ser: Reg 0x32 = 0x0. ser: Reg 0x33 = 0x5. ser: Reg 0x34 = 0xc. ser: Reg 0x35 = 0x0. ser: Reg 0x36 = 0x0. ser: Reg 0x37 = 0x0. ser: Reg 0x38 = 0x0. ser: Reg 0x39 = 0x0. ser: Reg 0x3a = 0x0. ser: Reg 0x3b = 0x0. ser: Reg 0x3c = 0x0. ser: Reg 0x3d = 0x0. ser: Reg 0x3e = 0x81. ser: Reg 0x3f = 0x2. ser: Reg 0x40 = 0x8. ser: Reg 0x41 = 0x5. ser: Reg 0x42 = 0x14. ser: Reg 0x43 = 0x0. ser: Reg 0x44 = 0x0. ser: Reg 0x45 = 0x0. ser: Reg 0x46 = 0x0. ser: Reg 0x47 = 0x0. ser: Reg 0x48 = 0x0. ser: Reg 0x49 = 0x0. ser: Reg 0x4a = 0x0. ser: Reg 0x4b = 0x0. ser: Reg 0x4c = 0x0. ser: Reg 0x4d = 0x0. ser: Reg 0x4e = 0x0. ser: Reg 0x4f = 0x8c. ser: Reg 0x50 = 0x16. ser: Reg 0x51 = 0x0. ser: Reg 0x52 = 0x0. ser: Reg 0x53 = 0x0. ser: Reg 0x54 = 0x2. ser: Reg 0x55 = 0x10. ser: Reg 0x56 = 0x0. ser: Reg 0x57 = 0x2. ser: Reg 0x58 = 0x0. ser: Reg 0x59 = 0x0. ser: Reg 0x5a = 0xd9. ser: Reg 0x5b = 0x5. ser: Reg 0x5c = 0x7. ser: Reg 0x5d = 0x6. ser: Reg 0x5e = 0x44. ser: Reg 0x5f = 0x67. ser: Reg 0x60 = 0x22. ser: Reg 0x61 = 0x2. ser: Reg 0x62 = 0x0. ser: Reg 0x63 = 0x0. ser: Reg 0x64 = 0x10. ser: Reg 0x65 = 0x0. ser: Reg 0x66 = 0x0. ser: Reg 0x67 = 0x0. ser: Reg 0x68 = 0x0. ser: Reg 0x69 = 0x0. ser: Reg 0x6a = 0x0. ser: Reg 0x6b = 0x0. ser: Reg 0x6c = 0x0. ser: Reg 0x6d = 0x0. ser: Reg 0x6e = 0x20. ser: Reg 0x6f = 0x0.
<

设置ser 0x1为0xe仍然不工作。

5. 调整0x01

试着把0x01写到0x0F而不是0x0e。 另外,为什么948的寄存器在第二个寄存器转储上都是0x00 ?

仍然没有好的。

我认为设置reg_0x1为0xf后,slaveid的reg 0x7是0x0,所以不能得到948的reg。

6. 四种实验结果如下

(1) des 948的GPIO3是高的,而941的GPIO3是低的;

(2) 将reg0x4设为0x20,然后设为0x0, 941的GPIO3仍然较低;

(3)设置reg0xf为0x1,941的GPIO3仍然低,

(4) 设置reg0xf为0x9, 941的GPIO3仍然低,

7. FAE+测试板 测试结果

FAE使用测试板,尝试了这个配置,工作ok: 941AS port 0 -> 948 941 reg 0x0F = 0x05 948 reg 0x1F = 0x03

当用伏特计探测时,我可以清楚地看到948侧的切换GPIO3在941AS侧正确地输出 使用此配置的941AS侧的0x1C中没有显示GPIO状态

是通过检查0x1C寄存器来检查这个,还是通过实际查看GPIO3引脚电压来检查这个? 如果正在查看0x1C寄存器,当用作远程BC GPIO时,它将不会显示GPIO切换

8.梳理问题

设置远程GPIO3为高,但检查941 GPIO3引脚低 确认如下问题:

1. 在这种状态下,转储的寄存器配置是否正确? 2. 可以通过0x6e检查948的gpio状态,但是941的reg 0x1c用于什么?

当941AS GPIO配置为输入时,使用941AS侧的0x1C 在这种情况下,941AS GPIO是一个输出,因此0x1C不会报告状态 然而,与上述配置,能够看到适当的引脚状态时,探针与万用表

我认为设置值和转储寄存器值都是好的 但是948的GPIO3是高的,然后941的GPIO3是低的,通过万用表和示波器检查

可以通过写入0x09到0x0F,然后测量GPIO3来检查GPIO是否烧坏 这将把输出设置为高

猜你喜欢