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.

[参考译文] AM263P4-Q1:CAN 外部读写 Tx

Guru**** 2551570 points
Other Parts Discussed in Thread: AM263P4

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1534036/am263p4-q1-can-external-read-write-tx

器件型号:AM263P4-Q1
主题:AM263P4 中讨论的其他器件

工具/软件:

我正在使用 CAN FD 外部读取/写入示例 在上 AM263Px ADC 启动设备 MCU+SDK 10.02.00.15

我将示例修改为:

  • 以 1Mbps 波特率发送和接收数据。        

  • 传输 CAN FD 消息 远程显示器 ISR 的软件示例。

  • 使用接收数据 中断模式 、并从发送数据 PCAN-View Application“。

但是、在进行这些更改后:

  • 未发送或接收任何数据

  • 即使我绕过计时器并将CAN_transmitMsg()函数放在里面也是如此 while(1)无限循环 、数据为 仍然未发送或接收到数据。

  • PCAN-View 已正确配置 CAN 1mbps

我附上了修改后的代码的屏幕截图以供参考。

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

    您好、
    我已收到您的查询。 请给我一些时间来研究一下。

    此致、
    Aswathi

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

    您是否可以按照以下步骤操作并检查您的应用程序是否正在使用此修复程序? 驱动程序中有一个错误、该补丁将修复。

    1.将以下文件粘贴到此路径中:{SDK}/source/drivers/mcan/v0

    e2e.ti.com/.../3527.canfd.c

    2.将这个更新后的 canfd_external_read_write 工程导入 CCS

    e2e.ti.com/.../canfd_5F00_external_5F00_read_5F00_write_5F00_am263px_2D00_cc_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    在这个更新的示例和构建基础上进行更改、然后重试。 请告诉我它是否有效。

    谢谢、
    Aswathi

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

    尊敬的 Aswathi:

    我遵循了上述程序。 但是、在执行期间、循环滞留在MCAN_enableTransceiver 函数上。

    此致

    Sravanthi


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

    您好 Sravanthi、

    您拥有的 AM263Px 电路板版本是什么? 另外、请告诉我执行卡在函数内部的确切位置。 代码片段中的 CCS 步骤或来自控制台的任何错误消息都会很有帮助。  

    谢谢、
    Aswathi

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

    HII Aswathi,

    我正在使用 AM263P4ACOMF ZCZ 板。 它卡住电路板版本选择(随附图片)。 我应该选择哪个版本。

    此致、

    Sravanthi R.

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

    您好 Sravanthi、

    在执行第 124 行后、数组“boardVer"的“的值是多少? 因为需要使用 STB 信号将 MCAN 收发器唤醒。 对于不同的电路板版本、该信号来自不同的 IO 扩展器。 这是您共享的图像中使用的逻辑。

    此外、在执行程序时、您是否能够观察到 MCAN 接头引脚上的任何信号? 这将有助于了解收发器是否成功唤醒。

    谢谢
    Aswathi

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

    尊敬的 Aswathi:

    ]数组“boardVer"在“在执行第 124
    行后的值是多少
    1. 不执行第 124 行。因为在 I2C_transfe 函数(第 480 行、位于 SemaphoreP_pend()) 中停止执行。 已附加图像。

    此致

    Sravanthi R.

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

    嗨、aswathi

    上述查询的余数。

    此致

    Sravanthi R.

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

    您好 Sravanthi、
    对延迟深表歉意。 您能否将修改后的程序以 zip 文件的形式共享? 让我在我这边测试一下、然后返回给您。

    此致、
    Aswathi

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

    尊敬的 Aswathi:

    我没有对代码进行任何修改。 我已经按照您提供的完全测试了它。

    此致

    Sravanthi R.

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

    尊敬的 Aswathi:

    希望一切都是好的:) 感谢帮助 Sravanthi 这个问题。 您能指导我们测试您分享的代码吗?  

    此致、

    Madhurya  

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

    尊敬的 Madhurya:

    您能否确认电路板是 AM263Px controlCard 还是 LaunchPad? 我附加的程序适用于控制卡、它不能在 LP 上工作、因为 CC 中的收发器使能逻辑有一个额外的步骤、需要查找电路板版本并调用相应的 IO 扩展器。  

    此致、
    Aswathi

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

    尊敬的 Aswathi:

    我正在使用 AM263P4 LP。

    此致

    Sravanthi R.

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

    您好 Sravanthi、

    这个问题是我怀疑的。 请按照以下步骤操作

    1. 将 {SDK}/source/drivers/mcan/v0 上的 canfd.c 替换为我之前附加的文件
    2. 将 C:\ti\mcu_plus_sdk_am263px_installers\mcu_plus_sdk_am263px_10_02_00_15\examples\drivers\mcan\canfd_external_read_write 中的 canfd_external_write.c 替换为以下文件:
      1. e2e.ti.com/.../canfd_5F00_external_5F00_read_5F00_write.c
    3. 将 am263px-LP 项目导入 CCS: mcu_plus_sdk_am263px_installers\mcu_plus_sdk_am263px_10_02_00_15\examples\drivers\mcan\canfd_external_read_write\am263px-lpx\
    4. 使用替换后的文件构建工程

    请告诉我这是否有效。

    此致、
    Aswathi

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

    尊敬的 Aswathi:

    我已经做了以下更改,当我尝试使用计时器每 1 毫秒传输一次数据,并同时每 10 毫秒从另一个节点接收一次数据时。 只有传输是工作的,但接收没有发生。在相同的代码,如果我禁用了传输并只保留接收,那么数据被接收。

    发送和接收不能同时工作的原因。

    附加了代码和系统配置的图像。

    e2e.ti.com/.../IMG_5F00_20250806_5F00_172139237_2D00_1.pdf

    此致

    Sravanthi R.

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

    尊敬的 Aswathi:

    只有传输工作,但接收没有发生。在同一个代码中,如果我禁用传输并仅保留接收,则数据被接收。

    在这种情况下,我也只收到 5 到 10 帧.. 同样、没有发生接收。 我观察到传统 CAN(1Mbps 速度)和 CAN FD(2Mbps 至 5Mbps 速度)的这种情况。

    CCS: mcu_plus_sdk_am263px_installers\mcu_plus_sdk_am263px_10_02_00_15\examples\drivers\mcan\canfd_external_read_writ\am263px-lpx\

    我已使用此代码并按照上面随附的 pdf 中的内容修改了 main.c 和 canfd_external_read_write.c 文件。

    此致

    Sravanthi R.

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

    您好 Sravanthi、


    如果您能以 zip 文件的形式共享该程序、将会很有帮助。 使用映像很难读取/调试。 另外、请分享您的 PCAN 端比特率配置。 应用程序和 PC 之间的采样点应匹配。

    此致、

    Aswathi

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

    尊敬的 Aswathi:

    如果您能以 zip 文件的形式共享该程序、将会很有帮助。 使用映像很难读取/调试。 [/报价]

    实际上、我们在没有 Extranet 访问权限的系统中打开代码、这就是我分享图像的原因。

    我已在 CAN pCAN 应用中选择 75%处的采样点。随附了 CAN 和 CAN FD PCAN 侧比特率的图像。

    此致

    Sravanthi R.

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

    HII Aswathi,

    我通过以下方式执行了示例代码:

    1.注释 CANFD_Write () 函数  

    2.在 App_CANFD_TransferCallback () 函数中保留一个变量(在 reason == CANFD_receive 中)以了解接收到的帧数。

    并将 while 循环保持为无限循环。

    4.评论了 Tx 和 Rx frame(因为我只接收帧)的组合。

    我正在每隔 100 毫秒从 PEAK CAN 查看应用程序发送数据、但我只收到一个帧。附加了我在应用程序中所做的 4 处更改的图像、PEAK 可以查看控制器中接收到的应用程序设置和 帧数(在表达式窗口中作为 Rx 变量)与从 PEAK CAN 查看应用程序传输的帧数。

    我 External_Read 也尝试过 MCAN_CC.Write 示例,它在中断创建点(在行 143 的附加图像)陷入困境。

    请尽快找到这些问题的解决方案。

    此致

    Sravanthi R.

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

    HII Aswathi,

    是否有任何更新。  

    我甚至尝试了 MCAN_EXTERNAL_READ_WRITE 示例、对写入函数进行了注释、并在循环期间保留了读取函数。 但我没有收到任何数据。 在某些时候 ,我甚至在 MCAN_EXTERNAL_READ_WRITE 示例中观察到接收 fifo0 消息的中断。

    此致

    Sravanthi R.

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

    您好 Srivanthi、

    我正在为 Aswathi 挑选这一线程。

    我很难在这里追随历史。 您能否提供最新测试状态以及遇到的问题?

    您是否使用最新版本的 MCU+SDK?

    谢谢。此致、

    Zackary Fleenor

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

    HII Fleenor

    我正在使用 Canfd_external_read_write 示例、修改了 main.c 文件和 canfd_external_read_write.c 文件、与我的应用程序一致。我每隔 1ms 发送一次数据、并尝试使用中断同时接收数据。 但我仅接收几个帧。

    如果我禁用了发送并只保留用于接收使用中断,在这种情况下,我也只接收 5 到 10 帧.. 同样、没有发生接收。 我观察到传统 CAN(1Mbps 速度)和 CAN FD(2Mbps 至 5Mbps 速度)的这种情况。

    附加了代码和系统配置的图像。

    e2e.ti.com/.../Canfd_5F00_external_5F00_read_5F00_write.pdf

    此致

    Sravanthi R.

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

    您好:

    感谢您提供这些详细信息。 一些后续问题:

    能否提供物理测试设置的说明?

    我看到您将 CAN 读取器器件连接到总线、这些器件是如何连接在一起的?

    您是否能够在运行期间探测 CAN_H/CAN_L 和 MCAN_TX/MCAN_RX 信号、以确定是否可能出现信号完整性问题?

    此致、

    Zackary Fleenor

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

    HII Fleenor,

    您能否提供物理测试设置的说明?

    我正在使用 AM263P4 LaunchPad

    。 MCU+SDK 10.02.15。

    CAN 读取器器件作为 PCAN 工具。

    我看到您有一个 CAN 读取器设备连接到总线、这些设备是如何连接在一起的?

    我将 CAN3(LP 中的收发器提供) 从高电平连接到第 7 引脚、从低电平连接到 PCAN 工具的 DB9 连接器的第 2 引脚。

    您是否能够在操作期间探测 CAN_H/CAN_L 和 MCAN_TX/MCAN_RX 信号、以确定是否可能出现信号完整性问题?

    我已在传输期间探测并验证了 CANH 和 CANL 信号。

    令人遗憾

    Sravanthi R.

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

    HII Fleenor,

    您能否提供物理测试设置的说明?

    我正在使用 AM263P4 LaunchPad

    。 MCU+SDK 10.02.15。

    CAN 读取器器件作为 PCAN 工具。

    我看到您有一个 CAN 读取器设备连接到总线、这些设备是如何连接在一起的?

    我将 CAN3(LP 中的收发器提供) 从高电平连接到第 7 引脚、从低电平连接到 PCAN 工具的 DB9 连接器的第 2 引脚。

    您是否能够在操作期间探测 CAN_H/CAN_L 和 MCAN_TX/MCAN_RX 信号、以确定是否可能出现信号完整性问题?

    我已在传输期间探测并验证了 CANH 和 CANL 信号。

    令人遗憾

    Sravanthi R.

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

    您好 Sravanthi、

    感谢您确认此信息。

    您能否为我们提供 CAN_H/CAN_L 和 MCAN_RX/MCAN_TX 的作用域截图以供参考?

    您能否提供您正在使用的 PCAN 工具的确切型号?

    您应该在 Launchpad 和 PCAN 工具之间建立接地连接、您能否确认?

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    您能否提供您正在使用的 PCAN 工具的确切型号?

    我正在使用 PCAN-USB FD(用于高速 USB 2.0 的 CAN 和 CANFD 接口)。

    您应该在 Launchpad 和 PCAN 工具之间有接地连接、您能否确认?

    是的、我已进行接地连接。

    我修改了 MCAN 外部读取/写入示例 以便它只接收帧、从而检查传输是否导致任何干扰。 我观察到 设置 CAN_IR 中的中断标志 、但为中断线路 36(MCAN 的中断)配置了中断回调   从不调用。

    在回调内部、我放置了一个函数mcan_read() ( In this function, when a frame is received the FIFO level updates to 1 when data is received, so by polling it I can read the data using MCAN_readMsgRam()) ,来读取 FIFO 并进行确认。 但是、即使在发生事件时设置了中断标志 (CFG_IR)CFG_IE、回调本身也不会 被触发(如中所配置)、且 RxFIFO0_STATUS 将 folevel 显示为 1、fifo full 显示为 1。

    为了进行进一步测试、我将mcan_read() 函数移到中 while 循环 。  通过断点、我可以看到 FIFO 级别(在 fifoStatus 变量中更新) 更新、并且函数正确执行。 但如果没有断点、就MCAN_readMsgRam()不会执行、因为 ifolevel 没有更新。

    我随附了这两个代码版本以供参考:

    • mcan_external_read_write_am263px-lp_r5fss0-0_nortos_ti-arm-clang mcan_read()回调中的 Δ T

    • mcan_external_read_write_interrupt_am263px-LP_r5fss0-0_nortos_ti-arm-clang →在mcan_read()循环内。

      我正在使用 MCU+SDK 10.02.15、System Config 1.23.0 和 AM263P4 LP。
    • e2e.ti.com/.../AM263P4_5F00_MCAN.zip

    此致

    Sravanthi R.

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

    您好 Sravanthi、

    我们感谢您仍在处理问题、并感谢您的耐心。 我们的专家正在进一步研究这个问题、并将尝试在本周结束前提供一些反馈。

    此致、

    Zackary Fleenor

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

    嗨、Zack、

    对此申请是否有任何更新? 我们需要尽快解决这个问题。 如果您需要与客户通话、请告知我们

    此致、

    Madhurya  

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

    尊敬的 Madhurya:

    我看了一下您提供的代码。

    您已将 APP_MCAN_FIFO_0_CNT 定义为 0、这意味着 MSG RAM 中没有专用于将消息存储在 FIFO0 中的 ENTERS。

    这可能是最大的问题。 我根本不知道状态缓冲区是如何更新的。 我认为 CAN RX 内核正在访问数据包、设置标志并尝试将其存储在 RX FIFO0 中、但由于大小为 0、消息本质上会丢失。

    其次:

    在 App_mcanIntrISR() 函数中、您替换了以下内容:

    static void App_mcanIntrISR(void *arg)
    {
        uint32_t intrStatus;
    
        intrStatus = MCAN_getIntrStatus(gMcanBaseAddr);
        MCAN_clearIntrStatus(gMcanBaseAddr, intrStatus);
    
        if (MCAN_INTR_SRC_TRANS_COMPLETE ==
            (intrStatus & MCAN_INTR_SRC_TRANS_COMPLETE))
        {
            SemaphoreP_post(&gMcanTxDoneSem);
        }
    
        /* If FIFO0/FIFO1 is used, then MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG macro
         * needs to be replaced by MCAN_INTR_SRC_RX_FIFO0_NEW_MSG/
         * MCAN_INTR_SRC_RX_FIFO1_NEW_MSG respectively */
        if (MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG ==
            (intrStatus & MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG))
        {
            SemaphoreP_post(&gMcanRxDoneSem);
        }
    
        return;
    }

    其中:

    static void App_mcanIntrISR(void *arg)
    {
        uint32_t intrStatus;
        printf("interrupt occured");
    
        intrStatus = MCAN_getIntrStatus(gMcanBaseAddr);
        MCAN_clearIntrStatus(gMcanBaseAddr, intrStatus);
    
        /* If FIFO0/FIFO1 is used, then MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG macro
         * needs to be replaced by MCAN_INTR_SRC_RX_FIFO0_NEW_MSG/
         * MCAN_INTR_SRC_RX_FIFO1_NEW_MSG respectively */
        if (MCAN_INTR_SRC_RX_FIFO0_WATERMARK ==
            (intrStatus & MCAN_INTR_SRC_RX_FIFO0_WATERMARK))
        {
           mcan_read();
           printf("interrupt occured due to rx fifo level");
        }
    
        return;
    }

    此处的关键行是:

    IF (MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG ==(INTRStatus & MCAN_INTR_SRC_DEDICATED_RX_BUFF_MSG))

    Vs

    IF (MCAN_INTR_SRC_RX_FIFO0_WATCHDOG ==(INTERStatus 和 MCAN_INTR_SRC_RX_FIFO0_WATCHDOG))

    当它应该是:

    IF (MCAN_INTR_SRC_RX _FIFO0_NEW_MSG ==(INTRStatus 和 MCAN_INTR_SRC_RX _FIFO0_NEW_MSG ))

    rxFIFO0WaterMark 宏在 MCAN_initMsgRampConfigParams () 中初始化为 0、旨在通过提醒用户当前占用 FIFO 的指定入口数来保护 FIFO 溢出、这意味着在 FIFO 溢出并开始丢弃消息或覆盖之前的消息(根据 FIFO 工作模式、分别为阻塞/覆盖)之前、只能接受一定数量的附加消息。

    通过将其替换为 FIFO0_NEW_MSG、您将确保在每个接受的消息上都执行 mcan_read() 函数、而不仅仅是在消息水印数可用时执行。

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    感谢回复问题已解决。

    此致

    Sravanthi R.