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.

[参考译文] AM3358:使用 Pixcir 触摸屏传感器时、会非常间歇性地出现 I2C 写入错误

Guru**** 2419030 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1533411/am3358-getting-i2c-write-error-very-intermittently-with-pixcir-touchscreen-sensor

部件号:AM3358

工具/软件:

我完成了在基于 AM335x 的定制板上将 Linux 内核 3.12 升级到 5.10 版本和定制应用的过程。
作为应用程序 POST 序列的一部分、我正在从连接的基于 i2c 的 pxcir 触摸屏传感器检查写入和读取相同字节。
在测试时、我发现在少数电路板上、由于上述开机自检步骤中出现故障、应用程序会重新启动。
我正在获取 “ioctl 失败:连接超时“ 尝试在 i2c 总线上写入单字节时出错。
【但是,此代码在相同定制电路板的其他重复项中效果良好】

由于此错误是间歇性发生的、我只能在大约 30 个下电上电周期内重现一次/两次

此外,我观察到 i2c 错误弹出只有当我得到下面的消息在控制台上,当引导内核.

[38.01717173][T98] 8<--在这里切割--
[38.020980][T98]未处理故障:0xc22b9f54 处的外部中止 (0xc06) 不精确
[ 38.028677][T98] PgD = f2f83db2
[38.032090][T98][C22b9f54]*PgD=8220041e(错误)
[ 38.36831][T98]内部错误:::C06 [#1] ARM
[38.041558][T98]链接的模块:NF_LOG_IPv4 XT_LIMIT XT_LOG XT_conntrack iptable_mangle iptable_nat NF_nat NF_conntrack NF_defrag_IPv4 iptable_filter ip_tables SHA256_generic libsha256 SHA256_A4
[38.075620][T98] CPU:0 PID:98 通信:systemd-journal 污染:g O 5.10.168psprr-g991c5ce91e #1
[ 38.085923][T98]硬件名称:通用 AM33XX(展平器件树)
[ 38.092764][T98] PC 位于__seccomp_filter+0x2C/0x6cc
[ 38.098113][T98] LR 位于 SYSCALL_TRACE_ENTER+0x88/0x13c
[38.103708][T98] PC:[ Lr :[ ] PSR:60000013
[ 38.110697][t98] sp:c22b9ee0 ip:10c5387d fp:0003c52c
[38.116639][T98] R10:00800000 R9:00000000 R8:c01002e4.
[ 38.122582][T98] r7:00000193 R6:0003c52c r5:ffffffff000 r4:c22b9fb0
[38.129832][T98] R3:00000000 R2:00000000 R1:00000000 r0:00000193
[ 38.137085][T98]标志:模式 SVC_32 ISA ARM 段无上 FIQ 上的 nZCv IRQ
[ 38.144948][T98]控制:10c5387d 表:822ac019 DAC:00000051
[38.151415][T98]进程 systemd-journal (pid:98、堆栈限制= 0xa9f35bcb)
[ 38.158753][T98]堆栈:(0xc22b9ee0 至 0xc22ba000)
[ 38.163832][T98] 9ee0:00000000 00000000 00000000 00000000 00000000
[ 38.172745][T98] 9f00:00000004 f9805506 c22b8000 c213cd00 c22b8000 f9805506 10c5387d c22b8000
[ 38.181657][T98] 9f20:c22b9fb0 00000000 10c5387d 00000000 c22b8000 c0e0404c fffe30 c010a6c4
[38.190571][T98] 9f40:00000100 c0e9b3B0 c22b8000 c0101390 00000025 f9805506 c1008200 c22b9fb0
[ 38.199484][T98] 9f60:ffffffffe000 0003c52c 00000193 c01002e4 c22b8000 00800000 0003c52c c010986c
[ 38.208396][T98] 9f80:be919f24 f9805506 b6273ab0 b6f04e44 00000001 be91a8c0 0003c52c 00000193
[ 38.217309][T98] 9fa0:c01002e4 c010027c 00000001 be91a8c0 00000001 be91a8c0 b6fd5d00 00000000
[ 38.226223][T98] 9fc0:00000001 be91a8c0 0003c52c 00000193 000154e1 be91ad3c 00000000 0003c52c
[38.235136][T98] 9fe0:00000193 be91a8a0 b6d1239b b6cb1ae6 80000030 00000001 00000000
[38.244066][T98][ ](__seccomp_filter)、来自[ ](syscall_trace_enter+0x88/0x13c)
[38.253423][T98][ ](syscall_trace_enter)、来自[ ](_sys_trace+0xc/0x40)
[ 38.262156][T98]异常栈 (0xc22b9fa8 至 0xc22b9ff0)
[ 38.267928][T98] 9fa0:00000001 be91a8c0 00000001 be91a8c0 b6fd5d00 00000000
[ 38.276841][T98] 9fc0:00000001 be91a8c0 0003c52c 00000193 000154e1 be91ad3c 00000000 0003c52c
[ 38.285751][T98] 9fe0:00000193 be91a8a0 b6d1239b b6cb1ae6
[ 38.291527][T98]代码:e5922000 e58d2074 e3a02000 ee073f9a (e1510003)
[38.298349][T98]--[末端迹线 f5ead91bf57c8477 ]--
[38.305009][T419]8<--在此处切割--

以下是与此 i2c 器件相关的 DTS 部分
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;

status = "okay";
clock-frequency = <100000>;

tps: tps@2d {
reg = <0x2d>;
};
pixcir_tangoc: pixcir_tangoc@5c {
reg = <0x5C>;
compatible = "pixcir,pixcir_tangoc";
pinctrl-names = "default";
pinctrl-0 = <&pixcir_ts_pins>;
interrupt-parent = <&gpio0>;
interrupts = <28 IRQ_TYPE_EDGE_FALLING>;
//interrupt-gpio = <&gpio0 28 0>;
attb-gpio = <&gpio0 28 GPIO_ACTIVE_HIGH>;
touchscreen-size-x = <1024>;
touchscreen-size-y = <600>;
status = "okay";
linux,multi-touch;
};
};

不可能出现干焊问题或任何其他硬件问题、因为旧 Linux 3.12 版本的同一主板上的同一开机自检工作正常。

请提供解决/调试该问题的任何可能方法的建议。

谢谢、

普拉福尔·巴普特

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

    其他信息:

    在我的电路板中、PMIC  TPS65910A31A1RSLR 存在于地址为 0x002d 的同一 i2c 总线上、是因为 PMIC 在引导时造成的问题吗。  

    使用 bind 命令、我将得到以下日志

    echo -n “1-005C">“>/sys/bus/i2c/drivers/pixcir_ts/bind
    [ 2025年06月30日 11:49:31][ 537.856890][T57] OMAP-Li2c 4802a000.i2c:控制器超时
    [Pixcr_ts 1-005C:探头。2025年06月30日 11:49:31][537.864825][T924]
    [GPIO 11:49:31][ 537.869371][T924] pixcr_ts 1-005C:消费者属性的 2025年06月30日 查找
    [GPIO 2025年06月30日 11:49:31][ 537.875700][T924] pixcr_ts 1-005C:使用器件树查找 GPIO
    [COM 2025年06月30日 11:49:31][ 537.882541][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的'attb-GPIO'属性
    [CCS 2025年06月30日 11:49:31][ 537.898189][T924] of_get_named_gpiod_flags:解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的'attb-GPIO'属性 — 状态 (0)
    [GPIO 11:49:31][ 537.914369][T924] 2025年06月30日 gpiochip0:GPIO 28 不支持持久性
    [GPIO 11:49:31][ 537.921261][T924] pixcr_ts 1-005C:2025年06月30日 查找、用于消费者复位
    [GPIO 2025年06月30日 11:49:31][ 537.927714][T924] pixcr_ts 1-005C:使用器件树查找 GPIO
    [ 2025年06月30日 11:49:31][ 537.934436][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的“reset-GPIOs"属性“属性
    [ 2025年06月30日 11:49:31][ 537.950166][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的“reset-GPIO"属性“属性
    [GPIO 11:49:31][ 537.965711][T924] pixcr_ts 1-005C:使用查找表进行 2025年06月30日 查找
    [GPIO 11:49:31][ 537.972591][T924] pixcr_ts 1-005C:未找到 2025年06月30日 耗电元件复位
    [GPIO 11:49:31][ 537.978867][T924] pixcr_ts 1-005C:用于消费类唤醒的 2025年06月30日 查找
    [GPIO 2025年06月30日 11:49:31][ 537.985189][T924] pixcr_ts 1-005C:使用器件树查找 GPIO
    [ 2025年06月30日 11:49:31][ 537.991947][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的“wak-GPIOs"属性“属性
    [ 2025年06月30日 11:49:31][ 538.007518][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的“wak-GPIO"属性“属性
    [GPIO 11:49:31][ 538.022973][T924] pixcr_ts 1-005C:使用查找表进行 2025年06月30日 查找
    [GPIO 11:49:31][ 538.029860][T924] pixcr_ts 1-005C:未找到 2025年06月30日 消费类唤醒功能
    [GPIO 11:49:31][ 538.036019][T924] pixcr_ts 1-005C:2025年06月30日 查找以启用消费类产品
    [GPIO 2025年06月30日 11:49:31][ 538.042554][T924] pixcr_ts 1-005C:使用器件树查找 GPIO
    [ 2025年06月30日 11:49:31][ 538.049306][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的“enable-GPIOs"属性“属性
    [ 2025年06月30日 11:49:31][ 538.065090][T924] OF_get_named_gpiod_flags:无法解析节点“/ocp/interconnect@48000000/segment@0/target-module@2a000/i2c@0/pixcir_tangoc@5c[0]“的“enable-GPIO"属性“属性
    [GPIO 11:49:31][ 538.080737][T924] pixcr_ts 1-005C:使用查找表进行 2025年06月30日 查找
    [GPIO 11:49:31][ 538.087629][T924] pixcr_ts 1-005C:未找到 2025年06月30日 消费类启用
    [CCS 2025年06月30日 11:49:31][ 538.136792][T57] OMAP-Li2c 4802a000.i2c:地址:0x002d、len:1、标志:0x0、stop:0
    [ 2025年06月30日 11:49:32][ 539.216833][T57] OMAP-Li2c 4802a000.i2c:控制器超时
    [CCS 2025年06月30日 11:49:32][ 539.276922][T924] OMAP-Li2c 4802a000.i2c:地址:0x005c、len:1、标志:0x0、stop:0
    [ 2025年06月30日 11:49:33][ 540.336926][T924] OMAP-Li2c 4802a000.i2c:控制器超时
    [pixcir_set_power_mode: cannot read reg 51 :–110. 2025年06月30日 11:49:33][ 540.367035][T924] pixcir_ts 1-005C:pixcir_set_power_mode: can't read reg 51 :–110
    2025年06月30日 11:49:33][ 540.374976][T924] pixcr_ts 1-005C:无法设置空闲模式
    [pixcir_ts: 2025年06月30日 探测器 1-005C 失败、错误为–110
    [CCS 2025年06月30日 11:49:33]-bash:echo:写入错误:无此类设备[ 540.407381][T57] OMAP-Li2c 4802a000.i2c:地址:0x002d、len:1、标志:0x0、stop:0

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

    您好 Prafull、

    请注意、Linux 内核 5.10 现在太旧了、我们无法在 e2e 论坛上提供支持。 所以我可以提供一些反馈或建议,但我将无法在我这边运行测试,或保证事情会以某种方式工作。

    如需有关调试 Linux 问题的指导、请观看此处提供的一些有用视频:
    https://www.ti.com/video/series/debugging-embedded-linux-systems-training-series.html

    我不理解您对 PMIC 的疑问。 我能让你改一下这个问题吗?

    此致、

    Nick

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

    谢谢、Nick

    在我的电路板中,触摸屏 — 传感器和 PMIC 都连接在同一 i2c 总线上。 PMIC 的地址为 0x002d、触摸屏的地址为 0x005c。

    两个器件都收到错误消息。  

    [GPIO 11:51:30][ 603.464557][T924] pixcr_ts 1-005C:使用查找表进行 2025年06月30日 查找
    [GPIO 11:51:30][ 603.471445][T924] pixcr_ts 1-005C:未找到 2025年06月30日 消费类启用
    [ 2025年06月30日 11:51:30][ 603.487171][T57] OMAP-Li2c 4802a000.i2c:控制器超时
    [ 2025年06月30日 11:51:30][ 603.546773][T57] OMAP-Li2c 4802a000.i2c: 地址:0x002d 、长度:1、标志:0x0、停止:0
    [OMAP 2025年06月30日 11:51:30][ 604.576881][T57] OMAP-Li2c 4802a000.i2c:控制器超时
    [ 2025年06月30日 11:51:30][ 604.636925][T924] OMAP-Li2c 4802a000.i2c: 地址:0x005c 、长度:1、标志:0x0、停止:0
    [ 2025年06月30日 11:51:30][ 605.697220][T924] OMAP-Li2c 4802a000.i2c:控制器超时
    [pixcir_set_power_mode: cannot read reg 51 :–110. 2025年06月30日 11:51:30][ 605.726971][T924] pixcir_ts 1-005C: pixcir_set_power_mode: cannot read reg 51 :–110
    [PIXCIR_ts 1-005C:未能设置空闲模式。2025年06月30日 11:51:30][ 605.734969][T924]
    [ 2025年06月30日 11:51:30][ 605.754197][T924] pixcir_ts:1-005C 探测器失败、错误为–110
    [CCS 2025年06月30日 11:51:30][ 605.767358][T57] OMAP-Li2c 4802a000.i2c:地址:0x002d、len:1、标志:0x0、stop:0
    [CCS 2025年06月30日 11:51:30][ 607.027379][T57] OMAP-Li2c 4802a000.i2c:控制器超时
    [CPU 11:51:30][ 607.056976][T57] 2025年06月30日 CPU0:_set_opp_voltage:无法设置电压 (931000 950000 969000mV):–110
    [CPU 11:51:30][ 607.066494][T57] cpufreq:__target_index:无法更改 2025年06月30日 频率:–110
    [CCS 2025年06月30日 11:51:30][ 607.106923][T57] OMAP-Li2c 4802a000.i2c:地址:0x002d、len:1、标志:0x0、stop:0
    [CCS 2025年06月30日 11:51:30][ 608.176900][T57] OMAP-Li2c 4802a000.i2c:控制器超时

    由于是“连接超时失败“、我只需明确说明 PMIC 是否会因为哪个触摸屏也出现故障而导致总线失败。

    附加信息是指发生描述的错误时出现的信息;我无法在上看到任何条目 /dev/inpu T 文件夹(但是 /dev/i2c-1 始终存在)

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

    内核启动期间是否收到任何有用的输出日志?

    此致、

    Nick

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

    我在该线程开始时内核启动时共享了 consol 日志。 除此之外,我在下面找到了与 i2c 相关的日志行

    [  37.056807][T60]  OMAP-Li2c 4802a000.i2c:控制器超时