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.

[参考译文] MSP430G2744:Linux 操作系统中的 QWERTY 键盘控制器

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1076099/msp430g2744-qwerty-keypad-controller-in-linux-os

部件号:MSP430G2744

您好,

我们在基于 Android 的笔记本电脑中使用 msp430g2744作为质量控制键盘控制器。

我从以下链接获得了相同的固件代码。

https://www.ti.com/tool/TIDM-KEYBOARD

我已经在主板 msp430g2744中构建并刷新了它。

现在,当我在 i2c 通道上运行 i2cdetect 命令时,我们连接了

msp430g2744,我们能够使用地址0x22检测从属设备。

Trinket:/sys/devices/platform/SOC/4c80000.i2c # i2cdetect 3.                                                                                                                                                
总线3上的探测芯片0x03-0x77? (y/n):y
    0 1 2 3 4 5 6 7 8 9 a b c d e f
00:         ---------- ---------- ----
10:---------- ---------- ---------- -
20:-22 ------- ---------- ----
30:---------- ---------- ---------- -
40:---------- ---------- ---------- -
50:---------- ---------- ---------- -
60:---------- ---------- ---------- -
70:---------- ----   

此地址仅在我们从以下链接获得的代码中配置。

www.ti.com/.../TIDM-KEYBOARD

我们知道 Android 是基于 Linux 的,Linux 支持 i2c-over hid 驱动程序。

以下是驱动程序在 Linux 源代码中的位置。

drivers/hid/i2c-hid/

为了能够使用此驱动程序,我们只需要启用设备树数据

只有两条信息

中断编号

从中读取 hid 描述符的-i2c 地址

我已经启用了魔鬼  

&qupv3_SE5_i2c{
      状态=“正常”;
      I2C-hid-dev@22{
              Compatible ="MSP-i2c-hid";
              REG =<0x22>;
              HID-Descr-addr =<0x0001>;
              interrup-parent =<&tlmm>;
              中断=<1 0>;
               状态=“已禁用”;
      };
};

现在,当设备启动并探测 msp430g2744 i2c-ver-hid 时

驱动程序被称为“失败”,并出现以下错误

[9.806578]   i2c_hid 3-0022:正在获取 HID 描述符
[9.811991]   i2c_hid 3-0022:__i2c_hid_command:cmd=01 00
[9.818574]   i2c_hid 3-0022:意外的 HID 描述符 bcdVersion (0x0000)

请帮助更正 hid-descr-addr 吗?

谢谢

迪什内德拉

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

    嗨,迪什内德拉,

    我不是很理解你的问题。  

    是否需要为  msp430g2744配置另一个从属地址? 还是将0x22配置为主端的从属地址?

    此致,

    现金很好

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

    您好,Cash Hao,

    我可以使用0x22地址。

    作为 QWERTY 键盘控制器的 msp430g2744是否已在任何 Linux 平台上进行过测试?

    请告诉我。

    此外,如果经过测试,那么在该平台上,i2c hid Linux 驱动程序应该能够读取 hid 描述符。如果是,该驱动程序在该代码中使用的地址是什么。

    您可以通过+919035169215与我联系,以获得更快的解决方案吗?

    谢谢,此致,

    Dishendra Deshmukh

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

    您好,现金

    任何更新。

    我想再提供一条意见。

    如您所知,在刷新下面提供的 QWERTY 键盘固件后:

    https://www.ti.com/tool/TIDM-KEYBOARD

    我可以在地址0x22处检测芯片。

    现在,每当我尝试读取任何寄存器时,我的值都将为零。

    当我浏览上述固件时,我看到了功能

    文件中的 USCI_B0_Rxx_ISR

    KBD430_SW/./hidi2c/i2c/USCI/i2c_engine_usci2xx.c.
    在这个函数中,我看到一个条件,

     IF (usciB0xferIndex == usciB0BytesToXfer)

    我无法理解这种情况。

    我认为这种状况对我们来说是失败的。

    请您朝这个方向看,并为我们提供根本原因和修复方法。

    谢谢,此致,

    Dishendra

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

    您好,Dishendra,

    我对这个代码“if (usciB0xferIndex == usciB0BytesToXfer)”的理解是在完成一个 TX 周期后更改一些状态。 它不应影响 TX 数据。  

    此外,我还在同一中断例程的代码中看到了。 “#ifdef USCI30WORKROUND”,默认情况下不会生成该值。 您可以尝试添加 此 USCI30变通办法,并确定它是否会对该问题产生影响。

    此致,

    现金很好

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

    您好,现金

    请详细说明这一点。

    我对这个代码“if (usciB0xferIndex == usciB0BytesToXfer)”的理解是在一个 TX 周期结束后更改一些状态

    我尝试过这种方法,  

    “#ifdef USC30WORKROUND

    但这种情况仍然没有帮助。

    您是否知道任何设置,无论是 Windows,固件工作的地方?

    请告诉我们这方面的情况。

    谢谢,

    Dishendra

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

    您好,Dishendra,

    我的意思是在代码中添加"#Define USCI30WORKROUND"以激活该变通办法。

    此致,

    现金很好

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

    您好,现金

    -我不小心单击了选项卡

    “这解决了我的问题”

    但问题没有得到解决。

    ——根据你的建议,我已经添加了

    #define USC30WORKROUND"(#define USC30WORKROUND)

    但这无助于解决问题。

    我收到编译错误消息

    HIDI2CUSCI30DELAY

    未定义。

    巴西,

    Dishendra

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

    您好,

    您还需要定义  HIDI2CUSCI30DELAY。 根据评论,“延迟是位时钟的四分之一”。 在此代码中,DCO 以8MHz 运行。 因此,请检查 I2C 主配置以获取位时钟,然后您可以使用.HIDI2CUSCI30DELAY。  

    此致,

    现金很好

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

    您好,现金

    案例状态显示已解决。

    请帮助您更改为“仅打开”。

    此外,我还尝试了你的最后一项建议。

    #define USC30WORKROUND

    #define HIDI2CUSCI30DELAY 25000

    因为主机 i2c 以100kHz 的频率运行

    但问题仍然是一样的。

    主机仍在读取0字节。

    请帮帮我。

    谢谢

    迪申拉

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

    您好,迪申拉,

    此线程状态 应立即打开。  

    我不知道要检查该代码的其他内容。 我只是想,可以运行 I2C 示例代码,并将地址更改为0x22,然后检查它是否可以正常工作。 您可以在此链接中找到示例代码。  

    https://dev.ti.com/tirex/explore/node?node=AI98NRZzwlSml4EJTBwAvw__IOGqZri__LATEST

    此致,

    现金很好