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.

[参考译文] PROCESSOR-SDK-DRA8X-TDA4X:如何在 MCU2_1内核上运行 mcan 演示

Guru**** 2538930 points
Other Parts Discussed in Thread: TCA6424

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/940691/processor-sdk-dra8x-tda4x-how-can-i-run-mcan-demo-on-mcu2_1-core

器件型号:PROCESSOR-SDK-DRA8X-TDA4X

您好!

  我正在使用 PSDK_RTOS_auto_J7_07_00_00_11、并进行修改以启动 MCU2_1内核、现在 MCU2_1内核正在运行。

  那么、我想在 MCU2_1内核上运行 mcan 演示、但我不知道如何执行此操作?

  现在、我只需使用 mCAN_EVM_loopback _app_main_k3.c、并将其移动到 PSDK_RTOS_auto_J7_07_00_11\vision_apps\basic_demos\app_tirtos\tirtos_linux\MCU2_1、然后将 main 函数重命名为 mCAN_TEST_MAIN_MOST_MODE\APPS\APPS\APPS\APPS\APPS\APPS\APPS\APPS\APPS\APPS\AP  我是对的吗? 现在它仍然编译正常,但链接错误。  

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

    您好!

    需要注意的几点:

    您 参考的 mCAN_EVM_LOOP_APP_MAIN_K3.c 用于独立 PDK 测试。 这具有 while (1)循环和全局变量同步、而不是信标同步。 需要对这些参数进行更改、以便在您希望作为线程运行此代码并且需要在 MCU2_1上与此代码一起运行的情况下进行此操作。  

    2.在尝试编译时,您会看到什么错误?

    此致、

    Karan

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

    您好!

      感谢您的提醒。  

       我将修改代码作为我的要求。

       现在、错误是连接 GPIO_init 和 GPIO_write。

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

    您好,

      好消息! 我修复了链接问题。

      但现在我遇到了一个新问题。 它似乎一直停留在函数 padConfig_prcmEnable()中。 这是我的函数、只需在原始版本中添加打印信息。

    void padConfig_prcmEnable()

       /* UART 初始化*/
       board_initCfg  boardCfg;
       Board_status   boardStatus;
    #IF 定义(SOC_J721E)
       I2C_Params     i2cParams;
       I2C_Handle     handle = NULL;
       uint8_t        dataToSlave[4];
    #endif
       boardCfg = Board_init_module_clock |
                  BOARD_INIT_PINMUX_CONFIG;
    #if (APP_ENABLE_UART_PRINT = 1)
       boardCfg |= Board_init_uart_stdio;
    #endif
       boardStatus = Board_init (boardCfg);
       if (boardStatus!= Board_Sok)
       {
           APP_ConsolePrintf ("[Error]板初始化失败!!!\n");
       }
       APP_ConsolePrintf ("板初始化完成!!!!\n");
       用于 GESI 板中 CAN STB 的/*引脚多路复用器*
       *(volatile unsigned int *)(0x0011c0f4)= 0x20007;
       MAIN_MCAN4的/* Pinmux *
       *(volatile unsigned int *)(0x0011c020)= 0x60006;
       *(volatile unsigned int *)(0x0011c024)= 0x60006;
       MAIN_MCAN5的/* Pinmux *
       *(volatile unsigned int *)(0x0011c04c)= 0x60006;
       *(volatile unsigned int *)(0x0011c050)= 0x60006;
       MAIN_MCAN6的/* Pinmux *
       *(volatile unsigned int *)(0x0011c054)= 0x60006;
       *(volatile unsigned int *)(0x0011c06C)= 0x60006;
       MAIN_MCAN7的/* Pinmux *
       *(volatile unsigned int *)(0x0011c074)= 0x60006;
       *(volatile unsigned int *)(0x0011c078)= 0x60006;
       MAIN_MCAN9的/* Pinmux *
       *(volatile unsigned int *)(0x0011c0cc)= 0x60006;
       *(volatile unsigned int *)(0x0011c0d0)= 0x60006;
       MAIN_MCAN11的/* Pinmux *
       *(volatile unsigned int *)(0x0011c11c)= 0x60006;
       *(volatile unsigned int *)(0x0011c120)= 0x60006;
       /* GPIO 初始化*/
       GPIO_init();
       APP_ConsolePrintf ("GPIO_init Done!!!!\n");
       /*通过设置 STB 引脚来启用 CAN 收发器*/
    #IF 定义(SOC_AM65XX)
       GPIO_WRITE (0、GPIO_PIN_HIGH);
       GPIO_WRITE (1、GPIO_PIN_HIGH);
    定义了#Elif (SOC_J721E)
       /*在 GESI 板上启用 TCAN。
        *主域 MCAN 实例4、5、6、7、9、11。
        *
       GPIO_WRITE (0、GPIO_PIN_LOW);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       /*启用 MCU MCAN 1、WKUP_GPIO0_2。 *
       GPIOSetDirMode_V0 (CSL_WKUP_GPIO0_BASE、2、GPIO_DIRECTION _OUTPUT);
       GPIOPinWrite_V0 (CSL_WKUP_GPIO0_BASE、2、GPIO_PIN_LOW);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       
       /*启用 MCU MCAN 0、WKUP_GPIO0_0、WKUP_GPIO0_54 *
       GPIOSetDirMode_V0 (CSL_WKUP_GPIO0_BASE、0、GPIO_DIRECTION _OUTPUT);
       GPIOPinWrite_V0 (CSL_WKUP_GPIO0_BASE、0、GPIO_PIN_HIGH);
       GPIOSetDirMode_V0 (CSL_WKUP_GPIO0_BASE、54、GPIO_DIRECTION _OUTPUT);
       GPIOPinWrite_V0 (CSL_WKUP_GPIO0_BASE、54、GPIO_PIN_HIGH);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       
       /*启用主 MCAN 2、GPIO0_127。 *
       GPIO_WRITE (1、GPIO_PIN_LOW);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       /*
        *使用 addr 0x22配置 TCA6424 IO Exp 2
        *此 IO 扩展器由 i2c0控制
        *对于主 MCAN2 P13和 P14应设置为0、这应将 MCAN2 STB 线路路由到收发器。
        *对于主 MCAN0 P06和 P07、应设置为1。
        *
       /* I2C 初始化*/
       I2C_init();
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       I2C_Params_init (&i2cParams);
       i2cParams.transferMode = I2C_MODE_BLOCKING;
       i2cParams.bitrate = I2C_400kHz;
       i2cParams.transferCallbackFxn =空;
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       句柄= I2C_open (0U、&i2cParams);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       dataToSlave[0]= TCA6424_REG_CONFIG0 | TCA6424_CMD_AUTO_INC;
       dataToSlave[1]= 0x0U;
       SetupI2CTransfer (handle、0x22、&dataToSlave[0]、2、NULL、 0);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       dataToSlave[0]= TCA6424_REG_INPUT0 | TCA6424_CMD_AUTO_INC;
       dataToSlave[1]= 0x0U;
       dataToSlave[2]= 0x0U;
       dataToSlave[3]= 0x0U;
       SetupI2CTransfer (handle、0x22、&dataToSlave[0]、1、&dataToSlave[1]、 3);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
       /*将 P06和 P07设置为1。
        *将 P13和 P14设置为0。
        *
       dataToSlave[0]= TCA6424_REG_OUTPUT0 | TCA6424_CMD_AUTO_INC;
       dataToSlave[1]|= 0xC0;
       dataToSlave[2]和=~(0x18);
       SetupI2CTransfer (handle、0x22、&dataToSlave[0]、1、&dataToSlave[1]、 3);
       APP_ConsolePrintf ("[%s]行%d\n"、__function__、__line__);
    #endif
      橙色线卡在线中。
      能帮我吗?非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我建议首先尝试内部回送模式,然后在 I2C_init ()之后删除代码[包括此内容]。

    我建议这样做、因为 Linux 可能存在一些资源冲突、这就是为什么运行 R5的 BIOS 可能无法使用该 I2C 实例的原因、因为 A72已在使用该实例。   有关详细信息、请参阅 e2e.ti.com/.../931992。

    此致、

    Karan

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

    您好!

    谢谢。 我知道、Linux 没有 MCAN 驱动程序。 我想在我们的应用中使用 CAN 通信。 你有什么建议吗?

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

    您好!

    我建议尝试使用内部回送来缩小问题所在的范围。

    我们可以先尝试内部回放、然后继续启用收发器、然后在线路上发送数据。

    请参阅随附的补丁以禁用收发器使能代码并在内部回送中进行配置。 您只需要在 MCAN 处于 软件初始化模式的窗口中启用内部回送。

    diff - git a/packages/ti/CSL/example/mcanEvmLoopback/mcan_evm_loopback
    
    
    
    @@@@ app_main_k3.c b/packages/ti/CSL/example/mcan/mcan755 EvmLoopback/mCAN_EVM_loopback _app_main_k3.c index 66d14m/example/mcan/mcannexample/mcevm/mcprines+100cmpad_prin/mapp_mcprin/mcprinu_prinu_prinu_prinu_prue_cepcepcoopad_pr-381+13+m Ω/mc67_mc+m Ω/mc+m Ω/mcprin/mcprinu_prinu_prin/mcepcoop.mcepc+13_mcepcoopad_prin/mc+m Ω
    board_initCfg boardCfg;
    board_status boardStatus;
    
    +#if 0
    #if defined (SOC_J721E)
    I2C_Params i2cParams;
    I2C_Handle 句柄=空;
    uint8_t dataToSlave[4];
    #endif
    +#endif
    
    boardCfg = Board_init_module_clock |
    Board_init_PINMUX_CONFIG;
    @@-419、6 +421、7 @@ void padConfig_prcmEnable ()
    *(volatile unsigned int *)(0x0011c11c)= 0x60006;
    *(volatile unsigned int *)(0x0011c120)= 0x60006;
    
    +#if 0
    /* GPIO 初始化*/
    GPIO_init ();
    
    @@-478、6 +481、7 @@ void padConfig_prcmEnable ()
    dataToSlave[2]和=~(0x18);
    SetupI2CTransfer (handle、0x22、&dataToSlave[0]、1、&dataToSlave[1]、 3);
    #endif
    +#endif
    }
    
    int32_t main (void)
    @@-835,6 +839,11 @@ static Int32_t App_mcanConfig (void)
    /*配置标准 ID 过滤器元素*/
    MCAN_addStdMsgIDFilter (gMcanModAddr、0U、&stdFiltelem);
    /*使 MCAN 退出软件初始化模式*/
    +
    +/*启用数字回路*/
    + MCAN_lpbkModeEnable (gMcanModAddr
    、+ (uint32_t) MCAN_LPBK_MODE_INTERNAL、(uint32_t) true);
    +
    MCAN_setOpMode (gMcanModAddr、MCAN_OPERAT_MODE_NORMAL);
    while (MCAN_OPERAT_MODE_NORMAL!= MCAN_getOpMode (gMcanModAddr))
    {}
    

    此致、

    Karan

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

    您好,

    非常感谢。

    根据您的建议、我尝试一下、内部回送正常。

    我可以看到成功的日志。

    [MCU2_1]    24.401858秒: 正在启动应用程序...
    [MCU2_1]    24.401886 s:可用的 MCAN 模块:
    [MCU2_1]    24.401922 s:0。 BA:0x2708000 - MAIN_MCAN0。
    [MCU2_1]    24.401955 s:1. BA:0x2728000 - MAIN_MCAN2。
    [MCU2_1]    24.401992 s:2. BA:0x2748000 - MAIN_MCAN4 (GESI 扩展板)。
    [MCU2_1]    24.402032 s:3. BA:0x2758000 - MAIN_MCAN5 (GESI 扩展板)。
    [MCU2_1]    24.402072 s:4. BA:0x2768000 - MAIN_MCAN6 (GESI 扩展板)。
    [MCU2_1]    24.402112 s:5. BA:0x2778000 - MAIN_MCAN7 (GESI 扩展板)。
    [MCU2_1]    24.402153 s:6. BA:0x2798000 - MAIN_MCAN9 (GESI 扩展板)。
    [MCU2_1]    24.402193 s:7. BA:0x27b8000 - MAIN_MCAN11 (GESI 扩展板)。
    [MCU2_1]    24.402226 s:进入 MCAN 模块以使用:
    [MCU2_1]    24.402309 s:MCAN 时钟配置成功。
    [MCU2_1]    24.402351 s:MCAN 节点类型:
    [MCU2_1]    24.402374 s:1. 发送器侧。
    [MCU2_1]    24.402397 s:2. 接收器侧。
    [MCU2_1]    24.402419 s:输入节点类型:
    [MCU2_1]    24.402616 s:交叉开关/中断配置完成。
    [MCU2_1]    24.402664 s:[app_mcanConfig]即将推出
    [MCU2_1]    24.402702 s:MCANSS 修订版本 ID:
    [MCU2_1]    24.402725 s:方案:0x1
    [MCU2_1]    24.402746 s:业务部门:0x2
    [MCU2_1]    24.402768 s:模块 ID:0x8e0
    [MCU2_1]    24.402790 s:RTL 版本:0x9
    [MCU2_1]    24.402812 s:主要修订版本:0x1
    [MCU2_1]    24.402835 s:定制修订版:0x0
    [MCU2_1]    24.402858 s:次版本:0x1
    [MCU2_1]    24.402888 s:通过电子保险丝启用 CAN-FD 运行。
    [MCU2_1]    24.402924 s:字节值:0x87654321
    [MCU2_1]    24.402989 s:
    [MCU2_1]    24.403013 s:发送器侧应用:
    [MCU2_1]    24.403059 s:此测试将发送15 条消息、其中各种有效载荷的范围为1字节到64字节。
    [MCU2_1]    24.403099 s:消息对象:
    [MCU2_1]    24.403118 s:
    [MCU2_1]    24.403138 s:消息 ID:0x100000
    [MCU2_1]    24.403167 s:消息远程传输请求:0x0
    [MCU2_1]    24.403207 s:消息扩展帧 ID (0:11位 ID/1:29位 ID):0x0
    [MCU2_1]    24.403251 s:消息错误状态指示器(0:错误激活/1:错误认可):0x0
    [MCU2_1]    24.403290 s:消息数据长度代码:0xF
    [MCU2_1]    24.403316 s:消息 BRS:0x1
    [MCU2_1]    24.403340 s:消息 CAN FD 格式:0x1
    [MCU2_1]    24.403367 s:消息存储 Tx 事件:0x1
    [MCU2_1]    24.403395 s:消息标记:0xAA
    [MCU2_1]    24.403421 s:消息数据字节0:0x0
    [MCU2_1]    24.403447 s:消息数据字节1:0x1
    [MCU2_1]    24.403473 s:消息数据字节2:0x2
    [MCU2_1]    24.403499 s:消息数据字节3:0x3
    [MCU2_1]    24.403525 s:消息数据字节4:0x4
    [MCU2_1]    24.403582 s:消息数据字节5:0x5
    [MCU2_1]    24.403611 s:消息数据字节6:0x6
    [MCU2_1]    24.403638 s:消息数据字节7:0x7
    [MCU2_1]    24.403664 s:消息数据字节8:0x8
    [MCU2_1]    24.403690 s:消息数据字节9:0x9
    [MCU2_1]    24.403716 s:消息数据字节10:0xA
    [MCU2_1]    24.403743 s:消息 DataByte11:0xb
    [MCU2_1]    24.403770 s:消息数据字节12:0xc
    [MCU2_1]    24.403797 s:消息数据字节13:0xd
    [MCU2_1]    24.403823 s:消息数据字节14:0xe
    [MCU2_1]    24.403850 s:消息数据字节15:0xF
    [MCU2_1]    24.403876 s:消息数据字节16:0x10
    [MCU2_1]    24.403903 s:消息数据字节17:0x11
    [MCU2_1]    24.403930 s:消息数据字节18:0x12
    [MCU2_1]    24.403958 s:消息数据字节19:0x13
    [MCU2_1]    24.403985 s:消息数据字节20:0x14
    [MCU2_1]    24.404012 s:消息数据字节21:0x15
    [MCU2_1]    24.404039 s:消息数据字节22:0x16
    [MCU2_1]    24.404067 s:消息数据字节23:0x17
    [MCU2_1]    24.404094 s:消息数据字节24:0x18
    [MCU2_1]    24.404121 s:消息数据字节25:0x19
    [MCU2_1]    24.404148 s:消息数据字节26:0x1a
    [MCU2_1]    24.404176 s:消息数据字节27:0x1b
    [MCU2_1]    24.404203 s:消息数据字节28:0x1c
    [MCU2_1]    24.404230 s:消息数据字节29:0x1d
    [MCU2_1]    24.404257s:消息数据字节30:0x1E
    [MCU2_1]    24.404285 s:消息数据字节31:0x1f
    [MCU2_1]    24.404312 s:消息数据字节32:0x20
    [MCU2_1]    24.404339 s:消息数据字节33:0x21
    [MCU2_1]    24.404366 s:消息数据字节34:0x22
    [MCU2_1]    24.404393 s:消息数据字节35:0x23
    [MCU2_1]    24.404421 s:消息数据字节36:0x24
    [MCU2_1]    24.404448 s:消息数据字节37:0x25
    [MCU2_1]    24.404475 s:消息数据字节38:0x26
    [MCU2_1]    24.404503 s:消息数据字节39:0x27
    [MCU2_1]    24.404531 s:消息数据字节40:0x28
    [MCU2_1]    24.404574 s:消息数据字节41:0x29
    [MCU2_1]    24.404603 s:消息数据字节42:0x2a
    [MCU2_1]    24.404631 s:消息数据字节43:0x2b
    [MCU2_1]    24.404658 s:消息数据字节44:0x2C
    [MCU2_1]    24.404685 s:消息数据字节45:0x2D
    [MCU2_1]    24.404712 s:消息数据字节46:0x2E
    [MCU2_1]    24.404740 s:消息数据字节47:0x2F
    [MCU2_1]    24.404767 s:消息数据字节48:0x30
    [MCU2_1]    24.404794 s:消息数据字节49:0x31
    [MCU2_1]    24.404821 s:消息数据字节50:0x32
    [MCU2_1]    24.404848 s:消息数据字节51:0x33
    [MCU2_1]    24.404876 s:消息数据字节52:0x34
    [MCU2_1]    24.404903 s:消息数据字节53:0x35
    [MCU2_1]    24.404930 s:消息数据字节54:0x36
    [MCU2_1]    24.404957 s:消息数据字节55:0x37
    [MCU2_1]    24.404985 s:消息数据字节56:0x38
    [MCU2_1]    24.405012 s:消息数据字节57:0x39
    [MCU2_1]    24.405039 s:消息数据字节58:0x3a
    [MCU2_1]    24.405066 s:消息数据字节59:0x3B
    [MCU2_1]    24.405094 s:消息数据字节60:0x3c
    [MCU2_1]    24.405121 s:消息数据字节61:0x3D
    [MCU2_1]    24.405148 s:消息数据字节62:0x3E
    [MCU2_1]    24.405240 s:消息数据字节63:0x3F
    [MCU2_1]    24.405328 s:使用有效载荷字节:1成功传输消息
    [MCU2_1]    24.405426 s:使用有效载荷字节:2成功传输消息
    [MCU2_1]    24.405524 s:使用有效载荷字节:3成功传输消息
    [MCU2_1]    24.405642 s:使用有效载荷字节:4成功传输消息
    [MCU2_1]    24.405745 s:使用有效载荷字节:5成功传输消息
    [MCU2_1]    24.405848 s:使用有效载荷字节:6成功传输消息
    [MCU2_1]    24.405950 s:使用有效载荷字节:7成功传输消息
    [MCU2_1]    24.406061 s:使用有效载荷字节:8成功传输消息
    [MCU2_1]    24.406179 s:消息成功传输、有效载荷字节为:12
    [MCU2_1]    24.406304 s:使用有效载荷字节:16成功传输消息
    [MCU2_1]    24.406436 s:使用有效载荷字节:20成功传输消息
    [MCU2_1]    24.406583 s:使用有效载荷字节:24成功传输消息
    [MCU2_1]    24.406759 s:使用有效载荷字节:32成功传输消息
    [MCU2_1]    24.406960 s:使用有效载荷字节:48成功传输消息
    [MCU2_1]    24.407003 s:使用有效载荷字节:64成功传输消息
    [MCU2_1]    24.407034 s:TX 测试通过...

    如果 资源与 Linux 发生冲突、如何设置 i2c 实例以选择 CAN 通道、而不与 Linux 发生冲突。
    将来、我们需要 tidl_od 等应用程序、同时我们仍需要与主域 MCAN 通道进行 CAN 通信。 因此、我希望 Linux 通过 IPC 向 MCU2_1发送一些数据、而 MCU2_1通过 CAN 发送数据。 还可以吗?

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

    您好!

    很高兴知道内部回送现在工作正常。  

    现在我们知道问题是 I2C 冲突。

    一些建议和问题:

    使用 I2C 代码来启用 EVM 上通用处理器板上的主 MCAN0和主 MCAN2收发器。 (有关更多详细信息、请参阅原理图)。

    2.您是否有带 EVM 的 GESI 卡? 如果您的 GESI 卡与 EVM 配合使用、则我们可以解决此问题、您可以使用 GESI 卡上的 CAN 实例。

    此致、

    Karan

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

    您好!

    我没有 GESI 卡。 我只想使用主 MCAN0和主 MCAN2、现在已经足够了。下一步、我将尝试更多。
    但现在我无法使用它。

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

    您好!

    当我注释 i2c 代码时、请勿使用 TCA6424。只需测试 MCAN0和 MCAN2。

    但现在 Tx 中断无法触发。 我没有修改有关中断的代码。

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

    我无法在 MCAN0上看到信号、即 J27。

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

    您好!

    [引用 user="bin li2"]我在 MCAN0 (即 J27)上看不到信号。

    在内部回送中、您将无法在物理总线上看到信号、因为信号不是从 SoC 传出的。

    [引用 user="bin li2">当我注释 i2c 代码时、请勿使用 TCA6424。只需测试 MCAN0和 MCAN2。

    但现在 Tx 中断无法触发。 我没有修改有关中断的代码。

    但我记得您能够成功地以内部回送模式运行、这将依赖于中断。 之后发生了什么变化?

    [报价用户="bin li2">]我没有 GESI 卡。 我只想使用主 MCAN0和主 MCAN2、现在对我来说已经足够了。下一步、我将尝试更多内容

    配置后是否可以关闭 I2C 通道、这可能会使 I2C 在配置后可供 Linux 自由使用。 让我们看看这是否起作用:

    在这里、删除我之前对内部回送所做的更改。

    diff - git a/packages/ti/CSL/example/mcanEvmLoopback/mcan_evm_loopback
    
    
    
    @@@@ app_main_k3.c b/packages/ti/CSL/example/mcan/mcan755 EvmLoopback/mcan_evm_app_main_k3.c index 66dcs/example/mcan/mcannexample/mcevm/mcpracu_evm/pracu_pru_prue_ma/mc676+7、676+mcevm/pru_mcevm/pru_mcpru_mcprac/mcpracu_mc+7、676+mc+mc+mcevm/pru_mcpru_mc+7、67_mcevm/pru_mcevm/pru_mc+mc+7、67_mc+mc+mcevm/pr
    dataToSlave[1]|= 0xC0;
    dataToSlave[2]和=~(0x18);
    SetupI2CTransfer (handle、0x22、&dataToSlave[0]、1、&dataToSlave[1]、 3);
    +
    +/*关闭 I2C */
    + I2C_Close (handle);
    #endif
    }
    

    此致、

    Karan

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

    您好!

    是的、内部回送模式可以正常工作、中断也可以。

    但是、当我使用正常模式时、它将产生中断问题。 我关闭所有 i2c 代码。 请勿将其打开、也不要将其关闭。
    您还记得吗,我的过程将停留在 i2c 代码上。 然后我测试内部回送模式。

    现在、我想更改为正常模式来测试它。 因此、它将再次停留在 i2c 代码处。

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

    您好!

    [引用 user="bin li2">但当我使用正常模式时、它将产生中断问题。 我关闭所有 i2c 代码。 请勿将其打开、也不要将其关闭。
    您还记得吗,我的过程将停留在 i2c 代码上。 然后我测试内部回送模式。[/quot]

    您能对此进行详细解释吗? 关闭 I2C 是否没有帮助、代码仍然卡住?

    此致、

    Karan

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

    您好!

    好的。 首先关闭 i2c 代码。如图所示。

    然后我测试内部回送模式,只需添加 MCAN_lpbkModeEnable (gMcanModAddr、(uint32_t) MCAN_LPBK_MODE_INTERNAL、(uint32_t) true 即可;测试正常。

    之后、我测试正常模式、只需关闭内部回送模式代码。 然后我发现中断问题、它通过放弃 gMcanIsrIntr0Flag 而卡住。

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

    您好!

    您能否尝试执行 https://e2e.ti.com/support/processors/f/791/p/940691/3480606#3480606中提到的 I2C_Close (handle) 

    因此、基本上尝试采用 SDK 中的任何内容(正常模式、而不是内部回送)、只需添加 I2C_Close (handle);最后、正如我提到的那样。

    我希望您检查的是、即使我们关闭通道(在配置收发器之后)、我们仍然会遇到卡滞问题。

    此致、

    Karan

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

    您好!

    如果我打开代码、我使用#if 0来关闭。 它将被第二 个 SetupI2CTransfer 调用卡住。 无论是否添加 I2C_Close、都是如此、因为 I2C_Close 就在其末尾。

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

    您好!

    这不是一种执行操作的干净方法、但现在我对这个特定用例的想法是、如果我们可以使用 Linux 来配置 MCAN 0和 MCAN 2收发器。 您对这种方法有何看法?

    因此、基本上所有 i2c 代码都是我们将其移动到 Linux 并让其处理的。

    此致、

    Karan

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

    您好!

    是的、如果 Linux 能做到这一点、那就更好了。 Linux 能做到这一点吗? 我还记得我看到过 e2e 帖子、其中一位 TI 工程师说 Linux 没有 MCAN 驱动程序。
    如果有一个在 Linux 上控制主域 MCAN 的好主意、这对我来说是非常好的。
    如果可以的话,我该怎么做呢?

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

    您好!

    你有什么建议吗? 我没有解决这个问题:(

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

    您好!

    是的、Linux 上的 CAN 驱动程序不存在、但我们有一个补丁来启用它。 但请注意、它并未经过详尽的测试- https://e2e.ti.com/support/processors/f/791/t/922168 

    我建议您从补丁中获取收发器启用代码、并将 MCAN 应用保留在 MCU2_1上。

    我建议您使用 Linux 仅启用 CAN 收发器、在 RTOS 应用程序中仍会控制 MCAN 控制器。

    1.禁用 MCU2_1应用程序中的收发器启用代码。 保留此处的 pinmux、只需禁用收发器使能代码。 请告诉我、您是否需要一个补丁。

    2.从补丁中获取以下片段:

    +&MAIN_GPIO0{
    +p127{
    +GPIO-hog;
    +GPIO =<127 GPIO_ACTIVE_HIGH>;
    +输出-低电平;
    +线路名称="MCAN2_STB";
    +};
    +};
    
    MAIN_i2c1_exp4_PINS_DEFAULT:MAIN-i2c1-ex4引脚="MCAN2_STB";+ 1
    
    
    @@
    
    、GPIO2_ING_2 @@、GPIO0*= 3、24_IN_INU2、24_IN+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚+引脚2、
    
    +P06{
    +/* P06 - MCAN0_EN */
    +GPIO-hog;
    +GPIO =<6 GPIO_ACTIVE_HIGH>;
    +OUT-HIGH;
    +LINE-NAME ="MCAN0_EN";
    +}
    
    + P07{
    +/* P07 - MCAN0_STB#*
    +GPIOs ="MCAN0_EN";+
    GPIO"
    
    + GPIO_OUT-HOLD"
    ;+ GP0_OUT-HOT =+"+ GPIO"
    +
    P09{
    /* P11 - MCASP/TRACE_MUX_S0 */
    GPIO-HOG;
    @@-498,9 +554,35 @@
    OUTPUT HIGH;
    LINE-NAME ="MCASP/TRACE_MUX_S1";
    };
    +
    P13{
    +/* P13 - MLB_MUX_SEL */
    +GPIO-hog;
    +GPIO =<11 GPIO_ACTIVE_HIGH>;
    +输出低电平;
    +线路名称="MLB_MUX_SEL";
    + };
    +
    + P14{
    +/* P14 - MCAN_MUX_SEL */
    +GPIO-hog;
    +GPIO =<12 GPIO_ACTIVE_HIGH>;
    +输出低电平;
    +线路名称="MCAN_MUX_SEL";
    + };
    +
    };
    }
    
    ;&MAIN_pmx0{
    
    +
    +mcan0_GPIO_PINS_DEFAULT:mcan0_GPIO_PINS_DEFAULT{
    +pinctrl-single、PINS =<
    +J721E_IOPAD (0x0208、PIN_INPUT、0)/*(W5) MCAN0_RX:GPIO1_SING0
    
    + 0_IN_INTOP0 + 0_IN0_IN0_IN2;
    *+ GPIO0_IN2 + 0_IN_IN0_PIN_IN2 + 0_GPIO0_IN_IN2;*+ 0_IN0_IN_PIN_IN2 + 0_INPUT_IN_IN_IN_IN_IN_IN_
    
    mcan2_GPIO_PINS_DEFAULT{
    +pinctrl-single、PINS =<
    +J721E_IOPAD (0x01f0、PIN_INPUT、3)/*(AC2) MCAN2_RX.GPIO0_123 */
    +J721E_IOPAD (0x01f4、PIN_OUTPUT、3)/*(AC2)+ GPIO0_123 *
    
    +++++MCAN124.
    

    这些参数需要应用于 K3-j721e-common-proc-board.dts

    很抱歉、如果我无法详细解释并给出了指示、请告诉我、如果您在整合这些内容时需要帮助。

    此致、

    Karan