查看: 1659|回复: 4

[原创] LPC55S16的Classical CAN 测试

[复制链接]
  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2941

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7842
    最后登录
    2024-5-11
    发表于 2021-7-15 15:59:04 | 显示全部楼层 |阅读模式
    本帖最后由 jundao721 于 2021-7-15 16:00 编辑

    拿到LPC55S16的板卡好几天了,本来目标是测试CANFD和USB转换通信的,发现板卡上接的外设还挺多,话说可以玩一段时间了。在测试CANFD通信之前,先测试一下Classical CAN。,关于这两者的不同,网上说的比较详细。主要的就是通信速率,数据比特率提高到了8Mbps和最大数据帧提高到了64个字节。当前只在应用层面来考虑。官方的SDK提供了MCAN例程,考虑到NXP的IDE还在熟悉当中,还是移植到keil里调试比较方便,如图1所示。

    这次测试的目的就是完成Classical CAN每隔2s完成8字节发送,中断接收。
    连接图如图2所示:

    官方原理图如如3所示:

    将demo移植到keil后,就是读程序,然后为目的修改程序测试。
    2S延时使用的是SYSTick,如下:
    1. /* Set systick reload value to generate 1ms interrupt */
    2.     if (SysTick_Config(SystemCoreClock / 1000U))
    3.     {
    4.         while (1)
    5.         {
    6.         }
    7.     }
    8. SysTick_DelayTicks(2000U);
    复制代码
    按照以往的定义,初始化时钟,引脚,CAN定义,主要是字节数,ID和波特率。
    整个过程的思路是先测试CAN的发送,如果没问题,再测试CAN的接收,最后整合一下。
    波特率的使用:
    1. if (MCAN_CalculateImprovedTimingValues(mcanConfig.baudRateA, MCAN_CLK_FREQ, &timing_config))
    2.     {
    3.         /* Update the improved timing configuration*/
    4.         memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));
    5.     }
    复制代码
    可以追到波特率的定义上,demo使用的baudRateA 500Kbps,当然也可以选1Mbps.
    发送配置:
    1. /* TX buffer config. */
    2.     memset(&txBuffer, 0, sizeof(txBuffer));
    3.     txBuffer.address       = TX_BUFFER_OFS;
    4.     txBuffer.dedicatedSize = 1U;
    5.     txBuffer.fqSize        = 0;
    6.     txBuffer.datafieldSize = kMCAN_8ByteDatafield;
    7. MCAN_SetTxBufferConfig(EXAMPLE_MCAN, &txBuffer);
    复制代码
    模式选择:
    1. /* Finish software initialization and enter normal mode, synchronizes to
    2.        CAN bus, ready for communication */
    3.     MCAN_EnterNormalMode(EXAMPLE_MCAN);
    复制代码

    接收配置:
    1. /* STD filter config. */
    2.     rxFilter.address  = STD_FILTER_OFS;
    3.     rxFilter.idFormat = kMCAN_FrameIDStandard;
    4.     rxFilter.listSize = 1U;
    5.     rxFilter.nmFrame  = kMCAN_reject0;
    6.     rxFilter.remFrame = kMCAN_rejectFrame;
    7.     MCAN_SetFilterConfig(EXAMPLE_MCAN, &rxFilter);

    8.     stdFilter.sfec = kMCAN_storeinFifo0;
    9.     /* Classic filter mode, only filter matching ID. */
    10.     stdFilter.sft   = kMCAN_classic;
    11.     stdFilter.sfid1 = rxIdentifier;
    12.     stdFilter.sfid2 = 0x7FFU;
    13.     MCAN_SetSTDFilterElement(EXAMPLE_MCAN, &rxFilter, &stdFilter, 0);

    14.     /* RX fifo0 config. */
    15.     rxFifo0.address       = RX_FIFO0_OFS;
    16.     rxFifo0.elementSize   = 1U;
    17.     rxFifo0.watermark     = 0;
    18.     rxFifo0.opmode        = kMCAN_FifoBlocking;
    19.     rxFifo0.datafieldSize = kMCAN_8ByteDatafield;
    复制代码
    发送帧格式并完成发送:
    1. txIdentifier = 0x123U;
    2. txFrame.xtd  = kMCAN_FrameIDStandard;
    3.             txFrame.rtr  = kMCAN_FrameTypeData;
    4.             txFrame.fdf  = 0;
    5.             txFrame.brs  = 0;
    6.             txFrame.dlc  = 8U;
    7.             txFrame.id   = txIdentifier << STDID_OFFSET;
    8.             txFrame.data = tx_datac;
    9.             txFrame.size = CAN_DATASIZE;
    10. txXfer.frame     = &txFrame;
    11.             txXfer.bufferIdx = 0;
    12.             MCAN_TransferSendNonBlocking(EXAMPLE_MCAN, &mcanHandle, &txXfer);
    复制代码

    接收帧格式并完成数据接收:
    1. rxIdentifier = 0x321U;
    复制代码

    在测试的时候demo上有这么一段:
    1.            while (!rxComplete)
    2.            {
    3.         }
    4.             rxComplete = false;
    复制代码

    就是用了一个while语句,接收完才会继续发送,屏蔽到就不影响按时发送了。
    发送和接收数据如图4和图5所示:
    在《How to Use CAN-FD to Transfer Data on LPC5500 Series 》文档中也有对Timing config的解释,在深入学习中还需要继续理解。测试完CAN,就是继续CANFD。
    顺便吐个槽,官方文档很多明面上没有,需要找,这会多花费一些时间。

    图4

    图4

    图5

    图5

    图2

    图2
    55S16图2.JPG

    图1

    图1

    mcan_main.zip

    3.63 KB, 下载次数: 12, 下载积分: 威望 1

    测试文件

    加油哦
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 1338 天

    [LV.10]以坛为家III

    88

    主题

    4296

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9067
    最后登录
    2024-5-11
    发表于 2021-7-15 16:43:19 | 显示全部楼层
    先跟着楼主学习CAN-FD了。
    楼主的硬件也挺全的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3312

    主题

    6566

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32204
    最后登录
    2024-5-11
    发表于 2021-7-15 17:05:08 | 显示全部楼层
    jobszheng5 发表于 2021-7-15 16:43
    先跟着楼主学习CAN-FD了。
    楼主的硬件也挺全的

    感觉什么都有的样子
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2941

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7842
    最后登录
    2024-5-11
     楼主| 发表于 2021-7-16 08:43:37 | 显示全部楼层
    jobszheng5 发表于 2021-7-15 16:43
    先跟着楼主学习CAN-FD了。
    楼主的硬件也挺全的

    兄台谦虚了,共同学习
    加油哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2941

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7842
    最后登录
    2024-5-11
     楼主| 发表于 2021-7-16 08:44:19 | 显示全部楼层
    NXP管管 发表于 2021-7-15 17:05
    感觉什么都有的样子

    感谢社区,感谢管管
    加油哦
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-12 05:52 , Processed in 0.133138 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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