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.

[参考译文] AM3354:5线触摸屏

Guru**** 2553260 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/575751/am3354-5-wire-touchscreen

器件型号:AM3354

P {页边距-底部:0.1英寸;行高度:120%;}A:link {}

我尝试将5线触摸屏与基于 BBB 的定制板集成在一起。 处理器为 AM3354BZCZ60。  我使用的是 ti-processor-sdk-linux-am335x-evm-03.01.00.06 SDK。 Linux 内核为4.4.4.19-gdb0b54cdad。 我已将以下内容添加到器件树(AM335x-bonrblack.dts):

/*设置5线触摸屏*/
tscadc{(&T)
       状态="正常";
       TSC{
               TI、电线=<5>;
               TI、x 板电阻=<129>; /*在引脚 UL 和 UR 之间以及引脚 LL 和 LR 之间测得。 *
               ti、坐标读数=<5>;
               TI、wire-config =<0x00 0x11 0x22 0x33>;
      TI、充电延迟=<0x400>;
       };

       /*ADC{
               TI、ADC 通道=<5 6 7>;
       };*/
};

请参阅随附的整个 DT:

e2e.ti.com/.../1258.am335x_2D00_boneblack.dts.txt

触摸屏似乎沿着 x 轴工作、但不会使 y 轴长。

evtest 实用程序的输出显示 ABS_X 和 ABS_Y 具有大致相同的值、无论是否触摸了屏幕。

请参阅随附的 evtest 实用程序的完整输出:

e2e.ti.com/.../evtest_2D00_data.txt

在随附的文件中,我在方括号[]中指明了触摸屏幕的位置。 "... 指示为清晰起见删除数据的位置。

在下图中、通道1为 AIN0 (UL)、通道2为 AIN1 (UR)、通道4为 AIN2 (LL)、通道3为 AIN3 (LR):

P {页边距-底部:0.1英寸;行高度:120%;}A:link {}

我认为2 Ω 上拉/下拉电阻器的开关似乎不正确。 预期的顺序是什么?

启动期间、串行输出中将出现以下内容:

[8.043284]   输入:TI-TSC 作为/devices/platform/ocp/44e0d000.tscadc/TI-am335x-tsc/input/input0

请在连接的整个引导过程中查看串行输出:

e2e.ti.com/.../boot_2D00_msg.txt

P {页边距-底部:0.1英寸;行高度:120%;}A:link {}

我缺少什么? DT 是否正确? 是否需要从 SDK 提供的内容中修改内核配置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Ron:

    正如您描述的 tscadc 与 LCD 之间的连接:
    [引用]在下图中、通道1为 AIN0 (UL)、通道2为 AIN1 (UR)、通道4为 AIN2 (LL)、通道3为 AIN3 (LR):[/引用]

    我认为您需要修改 DTS 中的线配置参数。 请参阅 Documentation/devicetree/bindings/sinput/touchse/ti-tsc-adc.txt 文件中对此参数的描述:
    TI, Wire-config:不同的主板的顺序可能不同
    在触摸屏上连接电线。 我们需要提供
    8位数、其中前四位表示
    模拟线路和接下来的4位代表正/
    负极端子。 符号到
    重新表示输入线路和端子
    如下所示:
    AIN0 = 0、AIN1 = 1、依此类推、直至 AIN7 = 7。
    XP = 0、XN = 1、YP = 2、YN = 3。

    也可以尝试使用 LCD 时钟进行播放、即使用较低或较高的时钟速度进行实验。

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

    感谢你的答复。

    我认为我的线配置参数是正确的。

    TI、wire-config =<0x00 0x11 0x22 0x33>;

    0x00→第一个4位=0→AIN0→第二个4位=0→XP→左上角(UL)→运算上的通道-1。

    0x11→第一个4位=1→AIN1→第二个4位=1→XN→右上角(UR)→运算上的通道-2。

    0x22→第一个4位=2→AIN2→第二个4位=2→YP→左下角(LL)→运算上的通道4。

    0x33→第一个4位=3→AIN3→第二个4位=3→YN→右下角(LR)→运算上的通道3。

    “在下图中,通道1是 AIN0 (UL),通道2是 AIN1 (UR),通道4是 AIN2 (LL),通道3是 AIN3 (LR):”行剂量不描述 tscadc 和 LCD 之间的连接。 相反、它将示波器图像上显示的信号映射到 AIN 信号。 我是否误解了 XP、XN、YP 和 YN 的含义? 我认为接线是正确的。 如果我监控 AIN4 (雨刮器)并按下 LCD 的 UL 角、我会看到通道1的已布置示波器图像中显示的图形。 同样、按下 UR、LL 和 LR 角可分别显示通道2、4和3的模式。

    LCD 时钟频率为71.1MHz。 制造商(Densitron)建议使用此方法。 Densirton 指定的范围为68.9至73.4 MHz。 我担心超出该范围会对图像质量造成不利影响、但我会尝试一下。

    更新了:我尝试了40到80 MHz 的 LCD 时钟频率、但触摸屏的性能没有变化。

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

    P {裕度-底部:0.1英寸;线高:120%;}

    我尝试了不同的线性配置参数、希望看到 AIN0到 AIN3的信号发生移位、但它们并没有发生变化。 然后、我针对不同的线性配置参数运行 evtest。 evtest 的输出也没有变化。 这些是我尝试的参数:

    TI、wire-config =<0x00 0x11 0x22 0x33>;

    TI、wire-config =<0x10 0x01 0x22 0x33>;

    TI、wire-config =<0x01 0x10 0x22 0x33>;

    TI、wire-config =<0x20 0x11 0x02 0x33>;

    TI、wire-config =<0x10 0x21 0x32 0x03>;

    TI、wire-config =<0x01 0x12 0x23 0x30>;

    然后、我尝试更改触摸屏的接线。 通过更改接线、我可以更改哪些角相对较高、哪些角相对较低、但无论接线如何或屏幕在何处触碰、evtest 报告的 ABS_X 和 ABS_Y 值都是相同的。

    我不知道什么是 ABS_X 和 ABS_Y 吗? 我认为、当触摸一个角时、它们应该都是低电平、在另一个角时都是高电平、在其他角、ABS_X 和 ABS_Y 应该是不同的。 是这样吗?

    驱动程序是否损坏? 我认为驱动程序是“……/linux.../drivers/input/touchscreen/ti_am335x_tsc.c”。 是这样吗? 我可以在不下载整个 SDK 的情况下获取新副本吗?

    有什么想法吗?

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

    TI_AM335x_TSC.c 驱动程序在内核4.4.4.19 (TISDK03.01.00.06)和内核4.4.41 (最新的 TISDK03.02.00.05)之间没有变化。 如果您需要驱动程序的新副本、可以下载最新的 SDK 并在其源树中复制.c 文件。

    ABS_X 和 ABS_Y 值取自内核值、请见静态 irqreturn_t titlesc_IRQ (int IRQ、void * dev):

               if (z <= MAX_12BIT){

                   INPUT_REPORT_ABS (INPUT_DEV、ABS_X、x);

                   INPUT_REPORT_ABS (INPUT_DEV、ABS_Y、y);

                   INPUT_REPORT_ABS (INPUT_DEV、ABS_PRESSURE、z);

                   Input_report_key (input_dev、BTN_touch、1);

                   INPUT_SYNC (INPUT_DEV);

               }

    我想到的另一个建议(我在调试 ADC 驱动器时使用过这种方法)是更改 DTS 中的 x_plate 电阻。 我在这里没有通用解决方案、他们应该尝试(使用较低和较高的值)以了解哪种方法将改善触摸屏行为。

    他们还可以更改计算压力的公式、根据我的经验、我使用了:

                                                EQN (1)

    而不是当前在驱动程序中实现的功能:

    遗憾的是、我无法在电路板上重现他们的问题、因此我不确定自己会有多大帮助。

    此致、

    Yordan

    Yordan、

    当您在电子邮件中说“…”时 我无法在我的主板上重现他们的问题...”,您的主板与5线触摸面板集成是否按预期工作;或者您的意思是您没有重现问题的设备(即 5线触摸面板)?

     我现在使用的是 TI 最新 SDK (ti-processor-sdk-linux-am335x-evm-03.03.00.04)的新副本。 结果是相同的(无论触摸面板的位置如何、X 和 Y 值总是一起变化)。

     我尝试了不同的 x_plate 电阻值(20、50、100、200、300、 和400欧姆)。

     由于某些未知原因、您计算压力的公式未随电子邮件下载 我认为问题不在于压力计算。 系统能够检测何时触摸并释放面板。 当我触摸面板时、evtest 开始报告值。 当我停止触摸面板时、evtest 停止报告值。

     我尝试了不同的“线配置”值。 我尝试了40种不同的组合。 在37种情况下、结果是当触摸面板的左上角(UL)或左下角(LL)时、X 和 Y 值均为高电平(约3800)。 当触摸右上角(UR)或右下角(LR)时、X 和 Y 值均为低电平(约500)。 在其他三种情况下、当触摸 UL 或 LL 角时、没有响应。  当触摸 UR 或 LR 角时、响应与其他37种情况相同(X 和 Y 值均为低电平)。 我尝试的“Wire-config”值为:

    0x00 0x11 0x22 0x33>、<0x01 0x10 0x22 0x33>、<0x00 0x12 0x21 0x33>、<0x02 0x10 0x21 0x33>、<0x01 0x12 0x20 0x33>、<0x02 0x11 0x20 0x33>、<0x00 0x11 0x23 0x32>、<0x01 0x10 0x32 0x21 0x32、0x03 0x21 0x32 0x32 0x21 0x32 0x23 0x32 0x23 0x32 0x32 0x03 0x21 0x21 0x21 0x32 0x32 0x21 0x32 0x32 0x23 0x32 0x32 0x32 0x32 0x03 0x21 0x21 0x32 0x23 0x32 0x32 0x32 0x32 0x23 0x32 0x32 0x00 0x12 0x23 0x31>、<0x02 0x10 0x23 0x31>、<0x00 0x13 0x22 0x31>、<0x03 0x10 0x22 0x31>、<0x02 0x13 0x20 0x31>、<0x03 0x03 0x12 0x20 0x31>、<0x01 0x12 0x23 0x30>、<0x02 0x22 0x30> 0x03 0x21 0x30、0x21 0x30> 0x03 0x21 0x30 0x21 0x30 0x23 0x30 0x03 0x21 0x30 0x23 0x23 0x30 0x23 0x23 0x30 0x03 0x30 0x23 0x23 0x23 0x30 0x23 0x30 0x03 0x30 0x23 0x03 0x23 0x23 0x23 0x30 0x10 0x03 0x21 0x32>、<0x00 0x23 0x11 0x32>、<0x20 0x03 0x11 0x32>、<0x10 0x23 0x01 0x32>、<0x20 0x13 0x32>、<0x00 0x13 0x31 0x22>、<0x10 0x03 0x31 0x22>、<0x00 0x31 0x22>、0x22 0x22 0x31 0x22 0x22 0x22 0x22 0x31 0x22 0x22 0x22 0x22 0x31 0x22 0x22 0x30 0x22 0x22 0x31 0x22 0x22 0x22 0x31 0x22 0x22 0x22 0x22 0x31 0x22 0x22 0x22 0x22 0x30 0x22 0x22 0x22 0x22 0x22 0x22 0x 0x20 0x03 0x31 0x12>、<0x00 0x33 0x21 0x12>、<0x30 0x03 0x21 0x12>、<0x20 0x33 0x01 0x12>。

    当触摸 UL 或 LL 角时、导致无响应的三个原因是:<0x00 0x13 0x21 0x32>、<0x00 0x13 0x22 0x31>、<0x00 0x13 0x31 0x22>。

     我使用 J-tag 查看寄存器的设置方式。 我认为寄存器 STEPCONFIG5到 STEPCONFIG9保存了五个 X 读数的设置。 其值为0X002401F2。 寄存器 STEPCONFIG12至 STEPCONFIG16保持五个 Y 读数的设置。 其值为0X002001F2。 我可能有 X 和 Y 相反的值。

     Ron Zander

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

    尊敬的 Ron:

    [报价]我无法在我的板上重现他们的问题[/报价]

    我没有带5线触摸显示屏的板... 因此,我无法报告这一点。

    [报价]由于某些未知原因、您计算压力的公式未通过电子邮件下载[/报价]

    其中包括:

    过去、我在代码中实现了以下功能:  

    press1 = ts->x_plate_ohm * x;
    press1 /= 4096;
    press1 *= 4096 - Z1;
    press1 /= Z1;
    press2 = ts->y_plate_ohm;
    press2 *= 4096 - y;
    press2 /= 4096;
    压力=压力1 -压力2;

    x & y 是 从读取坐标函数返回的值...  

    您是否有参考 TI 设计可供您使用以比较 evtest 的结果?

    此致、
    Yordan  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan、
    感谢你的答复。
    TI 何时会为您提供一个5线电阻式触摸面板、以便我们可以解决此问题?
    这可能只是术语、但我注意到、压力方程是指 x 板和 y 板。 与4线制不同、5线制 x 和 y 线制在同一个板上。
    我没有参考 TI 设计。 我们的电路板基于 BBB 设计。 5线触摸面板接口直接连接到 AIN0至 AIN4 (AIN0=UL、AIN1=UR、AIN2=LL、AIN3=LR、AIN4=WIPER)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ron、

    您能否应用这两个修补程序并告诉我们您的 Y 坐标是否开始工作:
    www.spinics.net/.../msg110646.html
    www.spinics.net/.../msg110645.html

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

    Jason、

    谢谢你。

    显然、修补程序是为驱动程序的早期版本创建的。 修补实用程序只能匹配部分代码以自动进行更新。 因此我们采用了旧的方法:在查看修补程序文件更改时手动编辑驱动程序。 然后编译、查看错误、编辑、修复、编译、 等等... 直到内核成功构建。 现在、X 和 Y 值不同、对应于触摸面板的位置。

    Ron

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

    Ron、

      为了维护我们的5线触摸屏支持的修复程序、我的小组中的一位开发人员询问您是否可以尝试连接的内核、并查看您的触摸屏是否继续工作。

    感谢您在该修复程序的升级过程中提供的任何帮助。

    Jason

    /cfs-file/__key/communityserver-discussions-components-files/791/zImage

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

    您是否已验证上述补丁是否支持5线触摸功能并正常工作?

    BTW,您是否已将解决方案更新为主线?

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

    我用您提供的内核替换了我们正在使用的内核。 使用 evtest 进行的测试表明 X-Y 坐标现在是正确的。

    驱动程序存在其他问题。 当我将手指从触摸模块中提起时、X 和 Y 坐标都会变高。 另外、在我抬起手指和 evtest 停止显示更多数据之间存在很长的延迟。 在 https://e2e.ti.com/support/arm/sitara_arm/f/791/p/319613/1298838上有一篇文章 、可解决许多触摸屏问题。 只要您正在处理驱动程序、您可能会发现有一些值得整合的东西。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ron、感谢您确认 zImage 更正了 X-Y 坐标问题。

    您链接到的帖子中是否有任何内容可以纠正您提到的两个问题? 否则、我们可能需要启动新的 E2E 主题以进行跟踪。

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

    我们没有纠正其他两个问题。 我们将感谢您的任何帮助。

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

    以下是开发人员的回答:

    [报价用户="Ron Zander "]当我从触摸模块上提起手指时、X 和 Y 坐标都变为高电平[/QUERT]

    我特别不知道这个问题、我在 AM335x EVM 的4线触摸模块上看不到这个问题。

    这是否在每次触摸释放时发生? 是否始终是 X 和 Y 都变为高电平的最后报告的 evtest 事件?

    电阻式触摸屏对噪声有点敏感。 我强烈建议使用触控笔进行测试、并确保触摸模块安装牢固、并且不会在从屏幕上取下触控笔时移动。

    此外、电阻式触摸屏容易产生噪声、因此用户空间在使用触摸驱动器的原始事件之前应进行一些预处理/滤波(evtest 不进行任何滤波)。 滤波将消除此类错误值。

    [引用 USER="Ron Zander "]另外,从我拿起手指到 evtest 停止显示更多数据之间也有很长的延迟。

    这是预期的。 evtest 打印到控制台无法跟上 Touch 驱动程序报告事件的速度。 因此、即使在从触摸模块中提起手指后、仍会有大量打印件被丢弃到控制台。

    [引用 USER="Ron Zander ]e2e.ti.com/.../1298838上有一篇文章 ,介绍了许多触摸屏问题。 只要您正在处理驱动程序、您可能会发现有一些值得整合的东西。

    您提到的上述主题中报告的问题导致 AM335x 触摸屏驱动器进行了大量返工。 所有这些问题都应在驱动程序中解决(IIRC、这些补丁是内核 v4.4+的一部分、应在您使用的 Proc SDK 版本中提供)。

    Jason Reeder