查看: 10078|回复: 5

[经验] NXP LPC1768 CAN总线滤波设置分享【可买书】

[复制链接]

该用户从未签到

发表于 2015-1-13 14:56:37 | 显示全部楼层 |阅读模式
分享到:
NXP LPC1768 CAN总线滤波设置分享

开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板

1 通用CAN特性
兼容CAN规范2.0B、ISO11898-1;
        多主机结构,带有无破坏性的位仲裁;
        由报文标识符(11位或29位)控制的总线访问优先级;
        为高优先级报文确保了等待时间;
        可编程传输速率(高达1Mbit/s);
        多播和广播报文功能;
        数据长度:0~8字节;
        强大的错误处理能力;
非归零(NRZ)编码/译码,带有位填充

2 CAN 控制器特性
        2个CAN控制器和总线;
        支持11位和29位的标识符;
        双重接收缓冲器和三态发送缓冲器;
        可编程的错误警报界限和可读/写的错误计数器;
        仲裁丢失捕获和错误代码捕获(带有详细的位位置);
        单次触发的发送(不会重复发送);
        只听模式(无答应,无活动错误标志);
        “自身”报文接收(自接收请求)

3 验收滤波器特性
        快速硬件实现的搜索算法,支持大量的CAN标识符;
        全局验收滤波器识别所有CAN总线的11位和29位的Rx标识符;
        允许11位和29位CAN标识符的明确定义和分组定义;
        验收滤波器可为被选中的标准标识符提供 FullCAN-style 自动接收

4LPC1768滤波原理
当总线上面有报文传送时,每个节点都会接收到报文,但是该报文是不是自己需要的,如果没有进行滤波,只要总线上有报文,控制器就接收(不管是否有效)这样就会浪费大量的系统资源,因此CAN控制器添加了滤波操作。
        CAN总线在的帧数据在总线上传送时,其它的CAN控制器是通过验收滤波来决定总线上的数据帧的ID是否和本节点相吻合,如果与本节点吻合,那么总线上的数据就被存入总线控制器的相应寄存器里,否则就抛弃该数据,从而也能够减轻总线控制器的工作量。换句话说,总线上数据帧的ID 通过待接收节点的验收滤波后是吻合的,是可以被接收的。
LPC1768提供了512*322KB)滤波RAM,该RAM空间可以存放1024个标准标识符或512个扩展标识符,软件可以在其中存放5个标识符表:FullCAN(标准帧格式)标识符区、明确的标准帧格式标识符区、标准帧组格式标识符区、明确的扩展帧格式标识符区和扩展帧组格式标识符区,形成一个LUT表:
FullCAN标识符区:0x0000~SFF_sa SFF_sa=0x0000禁止
明确标准帧格式标识符区:SFF_sa~SFF_GRP_sa SFF_GRP_sa=SFF_sa禁止
标准帧组格式标识符区:SFF_GRP_sa~EFF_sa EFF_sa=SFF_GRP_sa禁止
明确扩展帧格式标识符区:EFF_sa~EFF_GRP_sa EFF_GRP_sa=EFF_sa禁止
扩展帧组格式标识符区:EFF_GRP_sa~ENDofTable ENDofTable=EFF_GRP_sa禁止
其格式如下:

一行FullCAN下的单个标识符表

一行标准帧组格式标识符表

一行扩展帧格式标识符表
其中控制器代表CAN控制器编号:000对应CAN10001代表CAN21768只有2CAN控制器),禁能位为0表示检查该标识符
验收滤波器筛选过程:
1)FullCAN(标准帧格式)标识符区
2)独立的标准帧格式标识符区
3)标准帧组格式标识符区
4)独立的扩展帧格式标识符区
5)扩展帧组格式标识符区
在打开滤波器的模式下,当通过CAN总线接收到一帧数据时,将接收到的报文ID在表LUT中进行查找匹配,从1~5个区中依次进行查找,当ID匹配时就会中断筛选过程,否则一直往下查找知道LUT表结束,若没有找到匹配ID则抛弃该报文。
本章以“CAN滤波”例程为例介绍滤波,这里没有使用到FullCAN模式,因此SFF_sa=0x0000,从独立的标准帧格式标识符区开始查询:

当使用USBCAN调试助手发送标准数据帧ID0x00010x00020x200<=ID<=0x210或扩展帧ID0x1000000x1000010x200000<=ID<=0x200010时开发板能接收到数据,否则接收不到。

5CAN通信配置步骤
1)电源使能:在PCONP寄存器中设置PCAN1/2
2)时钟使能:在PPCLK_SEL0寄存器中选择PCLK_CAN1/2和验收滤波器的PCLK_ACF
3)唤醒:CAN控制器能够将为控制器从掉电模式唤醒
4)引脚:通过PINSEL寄存器选择CAN1/2引脚,并通过PINMODE寄存器选择引脚模式
5)中断:使能相应中断
6CAN控制器初始化:在CANNOD寄存器中设置
在这里就不对寄存器做详细说明了

6、例程说明
本实验提供两个例程:CAN通信非滤波方式和滤波方式。
CAN通信非滤波方式:本例程只需使用一块宝马开发板即可进行实验,实验将开发板串口与电脑相连,CAN1CAN2相连,电脑通过串口向开发板发送字符,开发接收到字符后通过CAN1将字符发送出去,CAN2接收到CAN1发送的数据后通过串口打印出来,其主函数如下:
程序初始化CAN1CAN2控制器后通过串口打印测试信息,其中波特率配置如下,本实验使用的CAN时钟为25MHz,通过配置CAN总线时序寄存器来配置总线波特率25M/(BRP+1)/(SJW+TESG1+TESG2)



CAN通信非滤波方式:本例程使用USBCAN进行调试,将开发板串口与电脑相连,USBCAN与开发板CAN1接口相连,打开电脑CAN总线调试工具设置波特率为500KBps连接设备,串口调试助手发送字符到开发板后通过CAN1发送出去,在CAN总线调试工具中分别设置不同的ID发送数据,当ID在滤波范围内,开发板即可接收到数据并通过串口打印出来。


7、实验现象
1)非滤波方式:设置串口波特率为9600,插上跳线帽JP15,串口调试助手输入字符即可回显出来
2)滤波方式:设置串口波特率为9600,连接USBCAN调试助手,波特率设置为500K,改变发送ID,当ID在滤波范围内,串口打印接收到的字符

CAN滤波.rar (84.92 KB, 下载次数: 175)
回复

使用道具 举报

  • TA的每日心情

    2021-12-7 12:35
  • 签到天数: 1354 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-13 22:26:26 | 显示全部楼层
    下载下来,好好学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2015-1-14 10:44:11 | 显示全部楼层
    jwdxu2009 发表于 2015-1-13 22:26
    下载下来,好好学习

    谢谢支持~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-11-25 18:15:15 | 显示全部楼层
    验收滤波正在学习中,非常好的资料
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2021-5-23 11:15:35 来自手机 | 显示全部楼层
    谢谢!先下载下来学习学习。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2021-5-23 11:17:20 来自手机 | 显示全部楼层
    谢谢!先下载下来学习学习。感觉lpc1768这个滤波器很奇怪,我原来用c8051和意法还有dsp都是设置一个掩码就滤波了,这个单片机感觉怎么这么复杂。。。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 19:10 , Processed in 0.167172 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.