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.

[参考译文] AM2612-Q1:CAN MCAL 相关问题

Guru**** 2511415 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1552811/am2612-q1-can-mcal-related-question

器件型号:AM2612-Q1


工具/软件:

尊敬的专家:

我向我的客户询问这个问题。

我的客户正在进行 OTA 压力测试、他们发现 CAN 通信 会在 5 分钟~ 2 小时内出现问题。

发生问题时、 如果 BSW 调用 CAN_Write、则该函数不会返回错误(也不会关闭总线)、但在 CAN 总线中看不到 CAN 帧、并且不再触发 If_Tx  确认中断。 此时、CAN 可以接收帧。

然后它们将芯片复位、该功能将恢复(接收和发送都是正常的)。 但在 5 分钟~2 小时后、此问题将再次发生。

MCAL 版本:MCAL AM261x_10.02.00

CAN 配置:CANFD 模式、 仲裁域速度为 500kbps、数据域速度为 2Mbps、 接收和发送使用中断模式。

客户需要提供哪些其他信息来帮助他们找到根本原因?

BRS

Shuqing

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

    尊敬的 Shuqing:

    Can_Write () 是否返回 bus_busy?

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

    尊敬的 Shuqing:

    在今天上午的会议中、请咨询 Robosense 工程师、了解 CAN 总线上的电阻器端接、以及 MCAN 配置和状态寄存器的内容。  

    正如我们在会议中提到的、在请求的传输完成或取消后、请求待处理位将复位(清除为 0)。 设置挂起位后、TX 消息处理将检查挂起的 TX 请求并开始传输。

    TXBAR(请求)和 TXBRP(待处理)仅针对在 TXBC 寄存器中配置的 TX 缓冲器(起始地址和 TX 缓冲器数量)进行设置。 如果请求已处于待处理状态、则将忽略该请求。

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

    当消息被写入 MSG RAM 后、AM26x MCAL 驱动程序的 Can_Write () 会添加传输请求(TXBAR 的 SET 位):

     MCAN_writeMsgRam (baseAddr、memType、MessageBox、&elem);

    2. MCAN_txBufAddReq (baseAddr、canMessageBox);

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

    尊敬的 Qingjun:

    客户 启用自动重新传输、问题再次发生。  当问题发生时、他们会检查 CFG_TXBRP 寄存器值、但该值未设置。  

    我还上传寄存器值: e2e.ti.com/.../SaveReg.hex

    您能帮助检查是否有异常情况吗?

    BRS

    Shuqing

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

    尊敬的  Shuqing:

    我将检查 SaveReg.hex 文件中的数据。

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

    尊敬的 Shuqing:

    请 在 SaveReg.hex 中查找我对数据的解释:

    :20 8200 00 08063832 21436587 00000000 320A8100:DSJW=3、DTSEG2=2、DTSEG1=10、DBRP=1、TDC=1
    80000000 FFFF0000 40030000:ASM=1、DAR = 0、FDEOE=1、BRSE = 1、
    0F2E0108:NTSEG2=15、NTSEG1=02E、NBRP=1、SJW=4
    D2
    :20 8220 00 00000E00 00000000 0000FFFF 0000 00000000 00000000 34
    :20 8240 00 00000000 08301000 (PSR):LEC=00、ACT=1(空闲)、DLEC=1(填充错误)、TDCV=0
    0A060000 (TDCR):TDCF=0A、TDCO=06
    00000000
    03000820 (IR):RF0N=1、RF0W=1、DRX=1、ARA=1
    09020800 (IE):RF0NE=1、RF0LE=1、TCE=1、DRX=1
    00000000 01000000 (Ile):启用中断线 0
    87
    :20 8260 000000000000000000000000000000000000000000000000000000000000000000000000000000FE
    :20 8280 00 3F000000(GFC):拒绝远程帧、接受不匹配的帧
    00000300 (SIDFC):FLSSA=0、LSS=3
    00000000 (XIDFC):否
    00000000 FFFFFF1F (XIDAM):
    00000000
    01000000 (NDAT1):在 RX 缓冲器#1 中设置新数据标志
    00000000 7F
    :20 82A0 00 38010403 (RXF0C):F0SA = 0138、F0S = 4(RX FIFO0 大小)、F0WM = 3(水印)、FPOM = 0(阻塞模式)
    03010000 (RXF0S):F0FL=3、F0G1=01、其他=0
    00000000
    E8020000 (RXBC):RBSA=0x02E8、RX 缓冲器
    000000000000000000000000
    07070000 (RXESC)
    82.
    :20 82C0 00 18000002 (TXBC):TBSA=0018、NDTB=0(专用 TX 缓冲区)、TFQS=2(TX FIFO/队列中的缓冲区数)、TFQM=0
    02010100 (TXFQS):TFFL=0x12
    07000000 (TXESC):64 字节数据字段
    00000000:(TXBRP):TX 请求待处理、TRP=0
    00000000 (TXBAR):AR=0、无请求
    00000000 (TXBCR):CR=0、取消请求=0
    00000000 (TXBTO):TO=0、未发生传输
    01000000 (TXBCF):CF = 0、无取消
    78
    :20 82E0 00 03000000 (TXBTIE):tie=03、为 TX 缓冲器 1 和缓冲器 2 启用
    00000000 (TXBCIE):TX 取消中断、0
    00000000
    00000000
    00000A03 (TXEFC):EFSA=0x0、EFSA==10、EFS WM=3
    00000000 00000000 6E

    您可以从数据中看到 TX 缓冲区起始地址为 0x18、但 TX 缓冲区计数为零。 没有 TX 挂起、TX 请求、也没有发生传输。  

    设置 CCCR 中的 ASM 位、这意味着使用受限运行模式。  在受限运行模式下、CAN 节点能够接收数据和远程帧并对有效帧进行确认、但节点不会发送数据帧、远程帧、活动错误帧或过载帧。 如果出现错误情况或过载情况、节点不会发送显性位;相反、节点等待出现总线空闲条件、以重新与 CAN 通信同步。 当 Tx 处理程序无法及时从消息 RAM 读取数据时、会自动进入受限运行模式。 要退出受限运行模式、主机 CPU 必须重置 MCAN_CCCR.ASM 位。