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 自动接收
4、LPC1768滤波原理当总线上面有报文传送时,每个节点都会接收到报文,但是该报文是不是自己需要的,如果没有进行滤波,只要总线上有报文,控制器就接收(不管是否有效)这样就会浪费大量的系统资源,因此CAN控制器添加了滤波操作。
CAN总线在的帧数据在总线上传送时,其它的CAN控制器是通过验收滤波来决定总线上的数据帧的ID是否和本节点相吻合,如果与本节点吻合,那么总线上的数据就被存入总线控制器的相应寄存器里,否则就抛弃该数据,从而也能够减轻总线控制器的工作量。换句话说,总线上数据帧的ID 通过待接收节点的验收滤波后是吻合的,是可以被接收的。
LPC1768提供了512*32(2KB)滤波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对应CAN1,0001代表CAN2(1768只有2个CAN控制器),禁能位为0表示检查该标识符
验收滤波器筛选过程:
1)FullCAN(标准帧格式)标识符区
2)独立的标准帧格式标识符区
3)标准帧组格式标识符区
4)独立的扩展帧格式标识符区
5)扩展帧组格式标识符区
在打开滤波器的模式下,当通过CAN总线接收到一帧数据时,将接收到的报文ID在表LUT中进行查找匹配,从1~5个区中依次进行查找,当ID匹配时就会中断筛选过程,否则一直往下查找知道LUT表结束,若没有找到匹配ID则抛弃该报文。
本章以“CAN滤波”例程为例介绍滤波,这里没有使用到FullCAN模式,因此SFF_sa=0x0000,从独立的标准帧格式标识符区开始查询:
当使用USB转CAN调试助手发送标准数据帧ID为0x0001、0x0002、0x200<=ID<=0x210或扩展帧ID为0x100000、0x100001、0x200000<=ID<=0x200010时开发板能接收到数据,否则接收不到。
5、CAN通信配置步骤
1)电源使能:在PCONP寄存器中设置PCAN1/2
2)时钟使能:在PPCLK_SEL0寄存器中选择PCLK_CAN1/2和验收滤波器的PCLK_ACF
3)唤醒:CAN控制器能够将为控制器从掉电模式唤醒
4)引脚:通过PINSEL寄存器选择CAN1/2引脚,并通过PINMODE寄存器选择引脚模式
5)中断:使能相应中断
6)CAN控制器初始化:在CANNOD寄存器中设置
在这里就不对寄存器做详细说明了
6、例程说明
本实验提供两个例程:CAN通信非滤波方式和滤波方式。
CAN通信非滤波方式:本例程只需使用一块宝马开发板即可进行实验,实验将开发板串口与电脑相连,CAN1与CAN2相连,电脑通过串口向开发板发送字符,开发接收到字符后通过CAN1将字符发送出去,CAN2接收到CAN1发送的数据后通过串口打印出来,其主函数如下:
程序初始化CAN1和CAN2控制器后通过串口打印测试信息,其中波特率配置如下,本实验使用的CAN时钟为25MHz,通过配置CAN总线时序寄存器来配置总线波特率25M/(BRP+1)/(SJW+TESG1+TESG2)
CAN通信非滤波方式:本例程使用USB转CAN进行调试,将开发板串口与电脑相连,USB转CAN与开发板CAN1接口相连,打开电脑CAN总线调试工具设置波特率为500KBps连接设备,串口调试助手发送字符到开发板后通过CAN1发送出去,在CAN总线调试工具中分别设置不同的ID发送数据,当ID在滤波范围内,开发板即可接收到数据并通过串口打印出来。
7、实验现象
1)非滤波方式:设置串口波特率为9600,插上跳线帽JP15,串口调试助手输入字符即可回显出来
2)滤波方式:设置串口波特率为9600,连接USB转CAN调试助手,波特率设置为500K,改变发送ID,当ID在滤波范围内,串口打印接收到的字符