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.

AM2634: AM263X MCAL MCAN测试例子demo CanApp.c 无法正常发送数据

Part Number: AM2634
Other Parts Discussed in Thread: TCAN1042H

使用的MCAL版本: MCAL_AM263x_00.09.00_03

CCS版本: 12.0.0.00009 

硬件:AM263x 控制卡评估模块 (EVM)

导入MCAL源代码编译通过,调试CanApp.c 使用MCAN1无法正常发送数据

EB重新配置port 模块生成代码

测试发现,需要修改Can_mcanStart 增加

MCAN_lpbkModeEnable(baseAddr, (uint32_t)MCAN_LPBK_MODE_EXTERNAL,(uint32_t)TRUE);

才能正常发数据,因为这个代码为MCAL底层代码,修改是不符合要求的。

因此还想确认下还有没有其他可能的原因?

MCAL 例子初始化函数是否有BUG?

另外想请求TI support 能否提供MCAL基于CCS的测试工程?我们现在是在没有任何参考下新建的工程,不确定是否有疏漏,或者不合理的地方。

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    您是想让"CAN Loopback 模式"正常工作是吗? 如果是的话,CanApp.c 文件中有一个名为"app_loopback_mode"的宏,使其设为 STD_ON,然后 CanApp.c 在环回模式下就可以按照预期工作(用户无需添加或修改现有示例或源代码即可使其正常工作) 。

  • Hello Cherry感谢您的回复,我有留意到app_loopback_mode这个宏,但是我不想测试loopback模式,我重新表述一下我测试的步骤

    1. 我使用CanApp.c示例代码,我是想在AM263x 控制卡测试CAN数据往外发出来

    2. 选择非loopback模式下,示波器好像只是抓取到了一段波形,就停止了

    3. 我尝试修改MCAL代码(这个非常规操作)在Can_mcanStart()函数中增加MCAN_lpbkModeEnable(baseAddr, (uint32_t)MCAN_LPBK_MODE_EXTERNAL,(uint32_t)TRUE); 编译下载到控制卡,CAN可持续发出数据.

    Q1:我的疑问,为什么CanApp.c示例代码在我选择非loopback模式,不做任何修改的时候,为何不能持续发出CAN数据

    Q2:AM263这个MCAL示例代码的CCS完整工程能不能发我一份?

  • 好的了解,我们跟进给工程师看下哈。

  • 您好,

    工程师需要确认下为什么需要修改源代码。 理想情况下不是必需的,我们也可以在测试阶段看到消息。 

    工程师目前的理解是:在默认情况下,我们 AM263x-CC EVM 上的 CAN 收发器处于激活状态,并且示例中的端口配置的完成方式会使其使用此收发器 CAN 实例,来执行回送类型的操作。 但是您可以在示例中禁用loopback并且必须更改端口配置,来选择连接到某些跳线引脚的 MCAN 实例,以使 CAN 在外部模式下工作。 (待工程师确认后会向您详细介绍是什么实例以及哪些接头引脚是这些实例) 

  • 我在示例代码中,已经禁用Loopback,使用CanExample_ExternalTest(),通道选择MCAN1(这个通道已经接到EVM的TCAN1042H收发器了),在不加任何修改的情况下CANapp.c的示例代码无法持续发出CAN信号!J5插针端口监测不到波形。  (我是用的集成开发环境是CCS12,工程也是自己建立的,只是把MCAL代码集成进来测试)

  • 好的我们需要一些时间来确认下,最晚会在下周一给到您答复。

  • 十分抱歉回复晚了。

    工程师这边能够在外部传输模式下正确测试 CAN 应用,并且也能够在不对源代码进行任何更改的情况下验证 PCAN 模块上的传输。 您请按照以下步骤使其正常工作:

    1)您需要将端口配置添加到 Port_PBcfg.c 文件中,因为与 MCAN 相关的引脚多路复用器配置默认未完成。 请将以下更改添加到路径 mcal/examples/Config 下的 Port_PBCfg.c 文件(这些更改用于配置 MCAN Tx 和 Rx 线路):

    {
             .Port_PinId = 99,
             .Port_PullInhibitEnable = PORT_PIN_PULL_INHIBIT_DEFAULT,
             .Port_OutputOverride_Ctrl = 2,
             .Port_InputOverride_Ctrl = 2,
             .Port_DirectionChangeable = FALSE,
             .Port_PinModeChangeable = FALSE,
             .Port_PinLevelValue = PORT_PIN_LEVEL_HIGH,
             .Port_PinDirection = PORT_PIN_DEFAULT,
             .Port_PinInitialMode =  PORT_PIN_MODE_MCAN1,
             .Port_PullTypeSelect = PORT_PIN_PULLTYPE_DEFAULT,
             .Port_SlewControl = PORT_PIN_SLEWCONTROL_DEFAULT,
             .Port_NumPortModes = 1,
             .Port_PinMode =
             {            [0] =
                {
    
    
                    .mode = PORT_PIN_MODE_MCAN1,
    
                    .muxmode = 0,
                },
             },
             .Port_PinDioRegId = PORT_DIO_INVALID_REG_ID, /* GPIO register index is 0 based */
             .Port_PinDioChannelId = PORT_DIO_INVALID_REG_ID,
             .Port_RegOffsetAddr = PINK1_MCAN1_TX,
             .Port_PinSignalName = (const sint8 *)"MCAN1_TX",
             .Port_PinName        = (const sint8 *)"PIN_K1",
             .Port_PinSetEdgeTrigger = FALSE,
             .Port_PinSelectEdgeTrigger = PORT_RISING_EDGE,
        },
        {
             .Port_PinId = 111,
             .Port_PullInhibitEnable = PORT_PIN_PULL_INHIBIT_DEFAULT,
             .Port_OutputOverride_Ctrl = 2,
             .Port_InputOverride_Ctrl = 2,
             .Port_DirectionChangeable = FALSE,
             .Port_PinModeChangeable = FALSE,
             .Port_PinLevelValue = PORT_PIN_LEVEL_HIGH,
             .Port_PinDirection = PORT_PIN_DEFAULT,
             .Port_PinInitialMode =  PORT_PIN_MODE_MCAN1,
             .Port_PullTypeSelect = PORT_PIN_PULLTYPE_DEFAULT,
             .Port_SlewControl = PORT_PIN_SLEWCONTROL_DEFAULT,
             .Port_NumPortModes = 1,
             .Port_PinMode =
             {            [0] =
                {
    
    
                    .mode = PORT_PIN_MODE_MCAN1,
    
                    .muxmode = 0,
                },
             },
             .Port_PinDioRegId = PORT_DIO_INVALID_REG_ID, /* GPIO register index is 0 based */
             .Port_PinDioChannelId = PORT_DIO_INVALID_REG_ID,
             .Port_RegOffsetAddr = PINL2_MCAN1_RX,
             .Port_PinSignalName = (const sint8 *)"MCAN1_RX",
             .Port_PinName        = (const sint8 *)"PIN_L2",
             .Port_PinSetEdgeTrigger = FALSE,
             .Port_PinSelectEdgeTrigger = PORT_RISING_EDGE,
        },

    2)在 Can_Cfg.h 文件和 CAN_app.c 文件中更改以下宏:

    3)在 CAN_app.c 文件(第601行)中注释以下行(这是导致您无法传输的实际错误,我们正在考虑在下一个版本时进行修复)。以下是用于参考的 JIRA ID:https://jira.itg.ti.com/browse/SITARA_MCU_MCAL-3612

    4)完成此操作后,请尝试执行全新的构建并运行 CAN_app.c 二进制文件来查看数据。工程师这边已使用 PCAN 模块对其进行了测试并且能够看到传输的数据,如下所示:

    希望以上方法对您有所帮助。