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.

[参考译文] AM62A7:AM62A7:AM62A7-Q1:MCU i2c 从测试

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1353292/am62a7-am62a7-am62a7-q1-mcu-i2c-slave-test

器件型号:AM62A7
主题中讨论的其他器件:SysConfig

尊敬的团队:

我们需要在终端评估 MCU r5f 上的 i2c1从站、

I2C 1从器件(MCU r5f 侧)、I2C 2主器件(A72 Linux 侧)

我们已经回顾了链路、可以在 MCU R5f 中实现 I2C 从器件

AM62A7:AM62A7主域 I2C 控制器支持从模式?-处理器论坛-处理器- TI E2E 支持论坛

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void i2c_slave_test() {
I2C_Params params;
I2C_Params_init(&params);
params.transferMode = I2C_MODE_BLOCKING;
I2C_init();
ggI2cHandle = I2C_open(CONFIG_I2C1, &params);
if (!ggI2cHandle) {
DebugP_assert(FALSE);
}
int32_t status;
I2C_Transaction i2cTransaction;
I2C_Transaction_init(&i2cTransaction);
i2cTransaction.writeBuf = NULL;
i2cTransaction.writeCount = 1U;
i2cTransaction.readBuf = NULL;
i2cTransaction.readCount = 2U;
i2cTransaction.slaveAddress = 0x49U;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--- a/mcu_plus_sdk_am62ax_08_06_00_18/examples/drivers/ipc/ipc_rpmsg_echo_linux/am62ax-sk/mcu-r5fss0-0_freertos/example.syscfg
+++ b/mcu_plus_sdk_am62ax_08_06_00_18/examples/drivers/ipc/ipc_rpmsg_echo_linux/am62ax-sk/mcu-r5fss0-0_freertos/example.syscfg
@@ -8,6 +8,9 @@
/**
* Import the modules used in this configuration.
*/
+const i2c = scripting.addModule("/drivers/i2c/i2c", {}, false);
+const i2c0 = i2c.addInstance();
+const i2c1 = i2c.addInstance();
const ipc = scripting.addModule("/drivers/ipc/ipc");
const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false);
const addr_translate1 = addr_translate.addInstance();
@@ -108,3 +111,10 @@ mcan2.MCU_MCAN.TX.$suggestSolution = "ball.D7"; /* hxh add*/
debug_log.uartLog.MCU_UART.$suggestSolution = "MCU_USART0";
debug_log.uartLog.MCU_UART.RXD.$suggestSolution = "ball.D8";
debug_log.uartLog.MCU_UART.TXD.$suggestSolution = "ball.F8";
+i2c0.$name = "CONFIG_I2C0";
+
+i2c1.$name = "CONFIG_I2C1";
+i2c1.useMcuDomainPeripherals = false;
+i2c1.I2C.$assign = "I2C1";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

已在 A72上识别了从器件、存在一些问题、 在 A72 i2c2中找到了新地址、但在尝试读取或写入时、发生了超时类打印

Pinmux 是正确的

Fullscreen
1
2
3
4
5
6
7
8
9
root@am62axx-evm:~# devmem2 0x000F41E8
/dev/mem opened.
Memory mapped at address 0xffff82713000.
Read at address 0x000F41E8 (0xffff827131e8): 0x00060000
root@am62axx-evm:~# devmem2 0x000F41EC
/dev/mem opened.
Memory mapped at address 0xffffa236a000.
Read at address 0x000F41EC (0xffffa236a1ec): 0x00060000
root@am62axx-evm:~#
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

如何实现中断模式从器件和主器件对从器件的读写

您能帮我检查我的代码是否有问题吗

或者

您能提供一个用于实现从模式的演示程序吗

 

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

    您好!

    感谢您访问德州仪器(TI) E2E 支持论坛。

    我已获取您的意见并进行处理。 请等待一段时间再回来。

    此致、

    Tushar

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

    谢谢  

    似乎是第一次检测到地址、但后来显示超时。 测量波形后、可能由于从器件 i2c1拉取、存在一种持续的低电平现象

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

    对不起、你有没有收到答复

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

    您好!

    感谢您的耐心。

    MCU R5F 内核上的代码似乎可以将 I2C 配置为从器件。

    我将把您的查询转给一位更熟悉 Linux 开发的团队成员。

    此致、

    Tushar

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

    你好、吴

    1)请帮助我理解你的用例是什么。 我假设您不打算在同一处理器上通过 I2C 连接 A53内核和 MCU R5F 内核。

    2) 2)您要在 Linux devicetree 文件中为用作 I2C 从器件的 R5F 内核使用什么 Linux 驱动程序?

    此致、

    Nick

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

    你好、Nick:

    1)请帮助我理解你的用例是什么。 我假设您不打算在同一处理器上通过 I2C 连接 A53内核和 MCU R5F 内核。

    我们希望 am62ax Linux A53支持其中一个 i2c 功能作为从器件、但我们需要反馈的是 Linux 中不支持 i2c 从器件、并且只能在 r5f MCU 中得到支持。 因此、我们将在调试 r5f MCU 时使用 main i2c2作为 i2c 主器件、并使用 main i2c1作为 i2c 从器件函数。 主 i2c2将在 A53 Linux 中充当主机

    2) 2)您要在 Linux devicetree 文件中为用作 I2C 从器件的 R5F 内核使用什么 Linux 驱动程序?

    我目前使用 i2c 工具与用作 i2c 从器件的 RF5 MCU (例如 i2cdetect、i2cset 和 i2cget)进行通信

    THX

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

    你好、吴

    嗯、还可以。 我将把您的主题传回给 MCU+人员。 我想在这里、我们真正需要的是一个"已知良好"的起点:TI 用于测试 I2C 从设备功能的 MCU+ SDK 代码、以及如何与该代码进行交互以验证该代码是否正常工作的确切步骤。 然后、用户可以使用这些代码、验证其是否工作、并开始进行修改以编写自己的代码。

    我实际上没有看到任何 I2C 从设备示例,无论是在 examples/drivers/i2c 下的 MCU+ SDK 中,还是在 test/drivers/i2c 下的 Bitbucket repo 中(其中 Bitbucket repo 在 https://github.com/TexasInstruments/mcupsdk-core-k3 )。 我将请 MCU+人员为您提供示例代码。

    此致、

    Nick

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

    您好:

    1 μ:A

    目前没有关于从属方的此链接的样例演示。 何时可以上传

    github.com/.../mcupsdk-core-k3

    2 μ:A

    以下代码

    如果需要持续通信、是否需要在调用 I2C_transfer 时循环运行

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void i2c_slave_test() {
    I2C_Params params;
    I2C_Params_init(&params);
    uint8_t txBuffer[I2C_WRITE_LEN];
    uint8_t rxBuffer[2];
    params.transferMode = I2C_MODE_BLOCKING;
    params.transferCallbackFxn = ptransferCallbackFxn;
    I2C_init();
    DebugP_log("\r\n -CONFIG_I2C1:%d\n",CONFIG_I2C1);
    ggI2cHandle = I2C_open(CONFIG_I2C1, &params);
    // ggI2cHandle = gI2cHandle[CONFIG_I2C1];
    if (!ggI2cHandle) {
    DebugP_assert(FALSE);
    }
    int32_t status;
    I2C_Transaction i2cTransaction;
    I2C_Transaction_init(&i2cTransaction);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    以下日志显示我的代码编写似乎有问题。 我可以继续读取(A53 Linux)、但当我突然写入它时、我会报告一个错误

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

    上面的代码、如果 A53 Linux 一直读取、可以读取数据、但只要写入一次、总线就会被下拉、我就无法找到原因

    稍后、会向中断 ISR 函数添加计数、但发生复制问题后无法触发中断

    I2C_TRANSFER

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    +static uint32_t gcount = 0;
    int32_t I2C_transfer(I2C_Handle handle,
    I2C_Transaction *transaction)
    @@ -1778,9 +1796,10 @@ int32_t I2C_transfer(I2C_Handle handle,
    * Wait for the transfer to complete here.
    * It's OK to block from here because the I2C's Hwi will unblock
    * upon errors
    - */DebugP_log("\r\n -%s:%d transaction->timeout:%d\r\n",__FUNCTION__,__LINE__,transaction->timeout);
    + */
    + DebugP_log("\r\n -%s:%d transaction->timeout:%d gcount:%d\r\n",__FUNCTION__,__LINE__,transaction->timeout,gcount);
    retVal = SemaphoreP_pend(&object->transferComplete, transaction->timeout);
    - DebugP_log("\r\n -%s:%d \r\n",__FUNCTION__,__LINE__);
    + DebugP_log("\r\n -%s:%d transaction->timeout:%d gcount:%d\r\n",__FUNCTION__,__LINE__,transaction->timeout,gcount);
    if ( retVal != SystemP_SUCCESS)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void I2C_transferCallback(I2C_Handle handle,
    I2C_Transaction *msg,
    int32_t transferStatus)
    {
    I2C_Object *object;
    -
    + DebugP_log("\r\n -%s:%d transferStatus %d\r\n",__FUNCTION__,__LINE__,transferStatus);
    + gcount++;
    + if (gcount > 32)gcount = 0;
    /* Input parameter validation */
    if (handle != NULL)
    {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    我想问是否有答复

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

    您好!

    感谢您的耐心。

    接下来的几天里、我要接受全天培训。 因此、对该线程的响应可能会延迟。 感谢您的合作。

    此致、

    Tushar

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

    嗨 Tushar:

    完成后、请帮助您解决这个问题

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

    嗨、Wu

    是的、确保培训结束后、我们将返回该主题。

    感谢您的耐心。

    此致、

    Vaibhav

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

    大卫您好:

    如果您希望 AM62Ax Linux 端提供 I2C 从站功能。 您或许可以按照这些补丁修改。

    这是用于旧 AM33x 器件的 TI Linux I2C 从模式驱动程序。 相信它可以帮助您实现 AM62Ax 的 Linux 侧 I2C 从器件功能。 它是同一个 SOC 系列。

    https://github.com/enndubyu/omap_i2c_slave/tree/master

    此致!

    Han Tao

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

    请注意、链接的 Linux 驱动程序 TAO 未经 TI 开发、测试或支持。 有关 TI 不支持 Linux I2C 从设备的原因、请参阅 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1024619/am6412-i2c-multi-master-mode/3793533#3793533

    有关从 Linux 角度看 I2C 从设备的更多信息、请参阅 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/887456/am3354-i2c-slave-mode-support 

    Vaibhav 仍需要从 MCU+侧进行响应。

    此致、

    Nick

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

    您好、 Vaibhav  

    MCU 侧 i2c1从器件

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static int gslave = 1;
    void i2c_slave_test() {
    I2C_Params params;
    I2C_Params_init(&params);
    uint8_t txBuffer[I2C_WRITE_LEN];
    uint8_t rxBuffer[3];
    params.transferMode = I2C_MODE_BLOCKING;
    params.transferCallbackFxn = ptransferCallbackFxn;
    I2C_init();
    DebugP_log("\r\n -CONFIG_I2C1:%d\n",CONFIG_I2C1);
    ggI2cHandle = I2C_open(CONFIG_I2C1, &params);
    // ggI2cHandle = gI2cHandle[CONFIG_I2C1];
    if (!ggI2cHandle) {
    DebugP_assert(FALSE);
    }
    int32_t status;
    I2C_Transaction i2cTransaction;
    I2C_Transaction i2cTransactionw;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Linux 端 i2c2主器件  

    Fullscreen
    1
    while true;do i2cset -f -y 2 0x49 0x0 0x1;sleep 1; i2cget -f -y 2 0x49 0x40;sleep 1;done;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    写入和读取每个 i2cTransaction、首先测试程序、然后再读取程序。 测试似乎不会卡住。 开始时、要求主器件以固定顺序读取和写入不会卡住、但我不理解为何无法使用相同的 i2cTransaction (可能会卡住)

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

    嗨、Wu

    感谢您的耐心。

    开始时、要求主设备按固定顺序读写、以免卡住

    这种情况不应出现、因为协议本身要求作为一个整体进行读取操作或作为一个整体进行写入+读取操作、而不是要求作为强制操作进行读取+写入。

    [报价 userid="588408" url="~/support/processors-group/processors/f/processors-forum/1353292/am62a7-am62a7-am62a7-q1-mcu-i2c-slave-test/5216587 #5216587"]

    MCU 侧 i2c1从器件

    [报价]

    您发送的代码适用于 MCU_I2C1作为外设(从器件)、SoC_I2C2或 MAIN_I2C2作为控制器(主器件)。

    我浏览过设备树源文件、发现 AM62A 的 Processor SDK Linux 中的 MAIN_I2C2的引脚多路复用配置不正确。

    目前、DTS 中为 MAIN_I2C2定义的引脚多路复用配置如下:

       MAIN_i2c2_PINS_DEFAULT:MAIN-i2c2-PINS-DEFAULT{
          PINCTL-SINGLE、PINS =<
             AM62AX_IOPAD (0x0b0、PIN_INPUT_PULLUP、1)/*(K22) GPMC0_CSn2.I2C2_SCL */
             AM62AX_IOPAD (0x0b4、PIN_INPUT_PULLUP、1)/*(K24) GPMC0_CSn3.I2C2_SDA */
          >;
       };

    但它应该是 M22和 M20、而不是 K22和 K24。

    可以通过 SysConfig 工具验证此信息、并在下面附上相应信息。

    您是否可以尝试修改引脚并重试?

    此致、

    Vaibhav

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

    测试用例

    我发送的样本存在问题。 您能给我发送可以通信以便我进行测试的 i2c slave2 MCU 演示吗?

    在前面的代码中、我们共享一个 i2cTransaction、其包括读写 buf、但 i2c 主器件的读写不能共存、只能在启动后单独写入和读取、否则会卡住

    介绍引脚多路复用

    这不是引脚问题。 虽然被标记为 K22、但是此寄存器的偏移量仍然是 M22

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

    嗨、Wu

    感谢您的耐心。

    这不是引脚问题。 虽然标记为 K22、但寄存器的偏移量为 M22[/报价]

    感谢您更正我的问题。

    您能给我发送 i2c slave2 MCU 演示吗?该演示可让我进行通信来进行测试

    当然、我将为此编写一个代码并发送给您。

    此致、

    Vaibhav

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

    您好、Vaibhav

    我没有收到样片、因此我确信这不是错误、而只是接口使用问题

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

    嗨、Wu

    感谢您的耐心。

    我没有收到样片、所以我确定它不是错误、而只是接口使用问题

    您说采样是指我应该发送的采样代码、还是指示波器上的信号(如果您要检查的话)。

    期待您的答复。

    此致、

    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    U 表示:
    您能给我发送 i2c slave2的 MCU 演示以便进行通信测试吗

    当然、我将为此编写一个代码并发送给您。

    -----------------------------------------------------------------------------------------------------------------

    那么、你会将这个幻灯片演示发送给我以供参考吗?

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

    嗨、Wu

    下面是我的行动计划。 其中的一两个点可能是重复的、但我们现在开始讨论。

    因此、为了演示 I2C 从设备、我们目前没有任何可说明这一点的 MCU 加 SDK 示例。

    但是、在声明 I2C 参数时、该字段具有一个称为 masterMode 的此类属性、可以将其设置为 False、以在从模式下运行特定 I2C。

    好的、我刚才编写了一个 MCSPI 控制器和外设的实现方案(控制器和外设都在同一块板上)。 我在那里使用了 IPC Notify 同步机制、以确保发送数据的流正确。 E2E: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1305146/sk-am64b-r5f-spi-dma-in-mcspi_ms_mode_peripheral/5064289#5064289

     MCSPI 的流程如下:

    • 控制器 实现

      • drivers_open()和 Board_driversOpen()。

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • 设置 TX 和 RX 缓冲器

      • 休眠5000微秒

      • 启动 MCSPI 传输
      • 比较在 rxBuffer 中从 MCSPI 外设接收的数据
      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • Drivers_Close()和 Board_driversClose ()。




    • 外设实现

      • drivers_open()和 Board_driversOpen()。

      • 设置 TX 和 RX 缓冲器

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)
      • 启动 MCSPI 传输

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • Drivers_Close()和 Board_driversClose ()。

    请注意使用 IPC 时使用的同步机制。

    我认为 I2C 可以遵循类似的实现方式、如下所示:

     I2C 的预期流程如下所示:

    • 控制器实现

      • drivers_open()和 Board_driversOpen()。

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • 设置 TX 和 RX 缓冲器

      • 休眠5000微秒

      • 启动 I2C 传输

      • 比较在 rxBuffer 中从 I2C 外设接收的数据

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • Drivers_Close()和 Board_driversClose ()。




    • 外设实现

      • drivers_open()和 Board_driversOpen()。

      • 设置 TX 和 RX 缓冲器

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • 启动 I2C 传输

      • IpcNotify_syncall (SystemP_WAIT_FOREVER)

      • Drivers_Close()和 Board_driversClose ()。

    我想首先在 MCU 方面实现它、即 MCU 控制器和外设示例。

    您是否具有允许为此编写代码的带宽并完全基于 MCU + SDK 对其进行测试、如果它能够正常工作、我们实际上可以确认 I2C 从设备是否正常运行。 否则、如果 I2C 从模式失败、那么我们需要生成一个相应的错误。

    此致、

    Vaibhav

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

    我期待在实现 MCU i2c 从器件例程后对您进行测试

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

    嗨、Wu

    因此、我有机会与开发人员一起编写一个应用程序、演示 I2C 从模式。

    我们调试和发现的关于驱动程序的一些事情如下所示:(这在 AM243-LP 上完成、设置:MAIN_I2C0控制器 R5F0_0和 MAIN_I2C1外设/从器件 R5F0_1)

    1. 第一次跑步 可确保主器件正确地从从器件接收数据 .

    2. 第二次运行会导致一些问题、从从从器件的应用角度来看、事务句柄变为空、信标仍处于挂起状态。 ( 注意:我们正在密切关注和调试过程、以了解处理从操作和中断的驱动程序 )

    3. 我们未使用任何同步机制、我们的流程如下:
      1. 首先将从应用程序.out 载入 R5F0_1、然后点击 RUN。
      2. 其次、将控制器应用程序.out 加载到 R5F0_0中、然后点击 RUN、然后您会看到您从外设/从站接收到了数据。
      3. 当我们再次尝试接收数据时、我们将看到 峰值  如上所述  第2点。

    尽管控制器和外设是 AM243-LP 的应用程序、我将随附它们、以便您进行 相同的操作。

    e2e.ti.com/.../i2c-slave.zip

    请注意、R50_0将 MAIN_I2C0用作控制器、R50_1将 MAIN_I2C1用作外设。

    在您执行控制器代码实现时、您会看到提到的 I2C 从设备为0x1C、原因是从设备在0x1C 从设备地址处标识自身。 这也可以从 SysConfig 中看到。 下面是相关的屏幕截图。






    希望这在我们继续调试的同时在一定程度上有所帮助。

    此致、

    Vaibhav

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

    好的、感谢您的支持

    我们在这里也遇到了这个问题

    第二次运行会导致一些问题、从从从器件的应用角度来看、事务句柄变为空、信标仍处于挂起状态。 ( 注意:我们正在密切关注和调试过程、以了解处理从操作和中断的驱动程序 )

    请注意、R50_0将 MAIN_I2C0用作控制器、R50_1将 MAIN_I2C1用作外设。

    我们确认该地址的配置方法一致、此外、该地址应能够通过配置文件进行配置

    +I2c1。 ownSlaveAddr1=0x49//从器件地址配置


    此外、最终需要同时读取和写入

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

    嗨、Wu

    感谢您的答复。

    第二次运行会导致一些问题、其中事务句柄变为空、信号量仍在从从属方应用程序的角度暂挂。

    是的、这是我们在最后进行测试时遇到的问题

    我将尝试与驱动程序所有者一起对此进行调试、看看我们是否可以找到解决此问题的方法并解决此错误。

    此致、

    Vaibhav

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

    你好、吴

    我意识到、我在 AM243x 上这样做是为了演示以检查从器件是否正常工作。 毫无疑问、我提供的上述文件适用于 AM243x。

    我将在 AM62A 上检查对应的文件、并将文件与示例一起发送给您。

    感谢您对此的耐心、我期待为您提供 AM62A 的复制。

    此致、

    Vaibhav

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

    感谢您的支持。 此功能已经过调整、也将有利于您的产品实现双赢

    在 am62a 上支持此特性

    THX

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

    吴国辉

    感谢您的耐心。

    此功能已经过调整、也将为您的产品带来双赢局面

    正确。

    我已经准备好了 AM62A 从站代码、结果表明不需要更改驱动程序、只需更改从站应用程序代码即可。

    请注意、我的设置如下所示。 请查看随附的图。

    因此、我的控制器是 AM243-LP 的 SoC_I2C0、外设是 AM62A 的 MCU_I2C0 (根据您的要求)。

    我附加了用于 MCU_I2C0从器件/外设应用的代码。

    在这里您可以:

     e2e.ti.com/.../0647.empty_5F00_am62ax_2D00_sk_5F00_mcu_2D00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    请注意、AM62A 的驱动程序目前至少没有更改。

    期待您的测试结果。

    此致、

    Vaibhav

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

    我们可以检测到0x49、它是我们的从器件地址、但在尝试读取和写入时、发生了错误。 主器件 i2c 位于 Linux 端

    我可以问一下具体的 i2c 格式是什么吗? 请确认我在结尾处的格式中犯了错误

    Fullscreen
    1
    while true;do i2cset -f -y 2 0x49 0x0 0x1;sleep 1; i2cget -f -y 2 0x49 0x40;sleep 1;done;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    2
    3
    4
    5
    root@am62axx-evm:~# i2cget -f -y 2 0x49 0x0
    0x06
    root@am62axx-evm:~# i2cget -f -y 2 0x49 0x0
    [ 37.191684] omap_i2c 20020000.i2c: controller timed out
    Error: Read failed
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    吴国辉

    [报价 userid="588408" url="~/support/processors-group/processors/f/processors-forum/1353292/am62a7-am62a7-am62a7-q1-mcu-i2c-slave-test

    已在 A72上识别了从器件、存在一些问题、 在 A72 i2c2中找到了新地址、但在尝试读取或写入时、发生了超时类打印

    [报价]

    从器件应该在您之前发送的屏幕截图中看到的地址0x1C 本身。 这是因为 MCU_I2C0位于0x1C 从器件地址。

    您能解释一下为什么显示0x49吗?

    此致、

    Vaibhav

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

    我们已在配置文件中配置了0x49

    examples/drivers/ipc/ipc_rpmsg_echo_Linux/am62ax-sk/mcu-r5fss0-0_freertos/example.syscfg

    Fullscreen
    1
    i2c1.ownSlaveAddr1 = 0x49;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    确认它是此 mcu1-0 i2c1的地址(我们称之为 i2c1从器件)、

    我们已将其修改为与您的地址0x1c 相同、这是一种相同的情况

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

    你好、吴

    我还想确保您首先运行从应用程序、然后通过内核启动控制器命令。

    examples/drivers/ipc/ipc_rpmsg_echo_linux/am62ax-sk/mcu-r5fss0-0_freertos

    您能否在此处附加项目文件? 我想做同样的解释。

    此致、

    Vaibhav

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

    我还想确保您首先运行从应用程序、然后通过内核启动控制器命令。   

    我会在从器件唤醒后输入密码、现在即使在这一侧的 i2cdelete 操作也会卡住

    在下面的左侧和中间打印 i2c 时仅包括用于打印的调试信息

    e2e.ti.com/.../ipc_5F00_rpmsg_5F00_echo_5F00_linux.tar.gz

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

    你好、吴

    感谢您发送编修。

    我将在几个工作日内详细介绍并与您跟进。

    此致、

    Vaibhav

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

    好的、感谢您的支持

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

    嗨、Wu

    感谢您的耐心。  
    请稍候再收到回复。

    此致、

    Vaibhav

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

    吴国辉

    感谢您的耐心。

    我已经完成了随附的代码和您发送给我的 SysConfig 文件。

    我的理解如下。

    • MCU_I2Cx 是外设、MAIN_I2Cx 是控制器。
    • 如果是这种情况、然后您使用 i2c 命令从内核空间控制主设备、则不需要在 MCU 和 SDK 方面定义主设备。
    • 我这么说是因为我看到您的 SysConfig 文件将 MAIN_I2Cx 声明为控制器、但您的 SysConfig 只应将 MCU_I2Cx 声明为控制器。
    • 附加相关章节。

    现在、我想使用 DTS 文件、其中定义了主域 I2C1的故事。 这将有助于我更快地调试问题。

    期待您的答复。


    此致、

    Vaibhav

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

    i2c2 main 是主控制、i2c1从器件禁用(Linux 禁用)位于 mcu1-0上

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    &main_i2c1 {
    status = "disabled";
    pinctrl-names = "default";
    pinctrl-0 = <&main_i2c1_pins_default>;
    clock-frequency = <100000>;
    exp1: gpio@22 {
    compatible = "ti,tca6424";
    reg = <0x22>;
    gpio-controller;
    #gpio-cells = <2>;
    status = "disabled";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    main_i2c1: i2c@20010000 {
    compatible = "ti,am64-i2c", "ti,omap4-i2c";
    reg = <0x00 0x20010000 0x00 0x100>;
    interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
    #address-cells = <1>;
    #size-cells = <0>;
    power-domains = <&k3_pds 103 TI_SCI_PD_EXCLUSIVE>;
    clocks = <&k3_clks 103 2>;
    clock-names = "fck";
    status = "disabled";
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    你可以看到下面没有 i2c1 主 控制器打开(从)

    Fullscreen
    1
    2
    3
    4
    5
    # dmesg|grep i2c
    [ 0.790946] i2c /dev entries driver
    [ 0.907042] omap_i2c 2b200000.i2c: bus 0 rev0.12 at 400 kHz
    [ 0.914210] omap_i2c 20000000.i2c: bus 1 rev0.12 at 400 kHz
    [ 0.921157] omap_i2c 20020000.i2c: bus 2 rev0.12 at 400 kHz
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    还可以看到下面向 shell 发送命令,它第一次读取正常,但第二次失败。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    root@am62axx-evm:~# [ 130.101163] Initializing XFRM netlink socket
    root@am62axx-evm:~# i2cdetect -r -y 2
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    root@am62axx-evm:~# i2cget -f -y 2 0x1c 0x40
    0x06
    root@am62axx-evm:~# i2cget -f -y 2 0x1c 0x40
    [ 254.849582] omap_i2c 20020000.i2c: controller timed out
    Error: Read failed
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    吴国辉

    感谢您为 main i2c1 (slave)提供器件树源文件。

    i2c2 main is master control

    我还想在器件树源文件中查看 main i2c2 (master)的所有实例/声明。

    我想了解更多有关以下内容的说明:为什么在 SysConfig 中定义了两个 I2C 实例? 这来自您发送给我的 SysConfig 文件。

    我理解的一个是从属的、但另一个呢?

    期待您的答复。

    此致、

    Vaibhav

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

    此处删除了 i2c0实例、这种现象是相同的

    root@am62axx-evm:~# i2cdetect -r -y 2.
    0 1 2 3 4 5 6 7 8 9 A b c d f
    00:--------- --- ---
    10:-------- --- 1c
    20:--------- --- --- ——
    第30章:我是你的女人 --- ---
    40:----- --- --- ——
    50:--------- --- --- ——
    60:--------- --- --- ——
    70:--------- ---
    root@am62axx-evm:~# i2cget -f -y 2 0x1c 0x40
    0x06
    root@am62axx-evm:~# i2cget -f -y 2 0x1c 0x40
    [ 56.257577] OMAP_i2c 200000.i2c:控制器超时
    错误:读取失败

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

    你好、吴

    感谢您的答复。

    我还想查看设备树源文件中 main i2c2 (master)的所有实例/声明。

    您能给我发送以下信息吗?

    期待您的答复。

    此致、

    Vaibhav

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

    你好、吴

    感谢您提供文件。 请允许我在某个时候浏览它们、并在某个时候与您联系。

    此致、

    Vaibhav

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

    你好、吴

    感谢您的耐心。

    我浏览了您的 dts 和 dtsi 文件。 我觉得很好。 我还假设 k3-am62a-main.dtsi 像在 k3-am62a-main.dtsi 文件中一样被 k3-am62a7-sk、dts 文件覆盖、每个实例的状态均为禁用。

    您能否与 MCU 加上 SDK MAIN_I2C1配置和 MAIN_I2C2主配置中的频率设置相匹配?

    &MAIN_i2c2{
    状态="正常";
    pinctrl-names ="默认值";
    pinctrl-0 =<&MAIN_i2c2_PINS_DEFAULT>;
    时钟频率=<400000>;-------------------------------------------------------     >请将其更新为 MAIN_I2C1的 MCU PLUS SDK SysConfig 配置中提到的频率。
    };

    在他的改变后,你可以重建 DTB 并重试?

    此致、

    Vaibhav