查看: 1194|回复: 0

[分享] LPC54s系列can包错乱解决方法

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 15:37
  • 签到天数: 42 天

    [LV.5]常住居民I

    42

    主题

    500

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1369

    热心会员

    最后登录
    2024-2-23
    发表于 2020-4-15 17:17:41 | 显示全部楼层 |阅读模式
    LPC54s系列can包错乱解决方法


    问题:在0.5ms的速率发送三个can包,发现can包错乱(canid和data不一致)

    解决:在读取过发现多任务情况下,在can包接收过程中数据没有出错,但是在应用曾收到数据时出错。
    查看can代码,发现MCAN_ReadRxFifo中canid是copy,而data是指针指向地址,从而有可能在应用层获取数据的时候,
    can data地址中数据又发生了变化(can又发送包来了),但是由于canid是copy,所以此时还没有发送变化,
    故导致canid和can data不一致,

        memcpy(rxFrame, elementAddress, 8U);
        rxFrame->data = (uint8_t *)elementAddress + 8U;
       
    改成    
            memcpy(rxFrame, elementAddress, 8U);
        //rxFrame->data = (uint8_t *)elementAddress + 8U;
        memcpy(rxFrame->data, (uint8_t *)elementAddress + 8U, 8U);


    1. status_t MCAN_ReadRxFifo(CAN_Type *base, uint8_t fifoBlock, mcan_rx_buffer_frame_t *rxFrame)
    2. {
    3.     /* Assertion. */
    4.     assert((0U == fifoBlock) || (1U == fifoBlock));
    5.     assert(NULL != rxFrame);

    6.     mcan_rx_buffer_frame_t *elementAddress = NULL;
    7.     if (0U == fifoBlock)
    8.     {
    9.         elementAddress = (mcan_rx_buffer_frame_t *)(MCAN_GetMsgRAMBase(base) + MCAN_GetRxFifo0ElementAddress(base));
    10.     }
    11.     else
    12.     {
    13.         elementAddress = (mcan_rx_buffer_frame_t *)(MCAN_GetMsgRAMBase(base) + MCAN_GetRxFifo1ElementAddress(base));
    14.     }
    15.     memcpy(rxFrame, elementAddress, 8U);
    16.     //rxFrame->data = (uint8_t *)elementAddress + 8U;
    17.     memcpy(rxFrame->data, (uint8_t *)elementAddress + 8U, 8U);
    18.     /* Acknowledge the read. */
    19.     if (0U == fifoBlock)
    20.     {
    21.         base->RXF0A = (base->RXF0S & CAN_RXF0S_F0GI_MASK) >> CAN_RXF0S_F0GI_SHIFT;
    22.     }
    23.     else
    24.     {
    25.         base->RXF1A = (base->RXF1S & CAN_RXF1S_F1GI_MASK) >> CAN_RXF1S_F1GI_SHIFT;
    26.     }
    27.     return kStatus_Success;
    28. }
    复制代码





    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-25 06:06 , Processed in 0.111888 second(s), 18 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表