1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,MSCAN08/MSCAN12,#,CAN,总线及应用,MSCAN08/MSCAN12,2,一、目标定位,目标:,以,MSCAN08,和,MSCAN12,为示例,讲述,CAN,现场总线,初步掌握,CAN,总线技术的应用。,基本要求:,了解,CAN,通信协议基本概念,掌握,CAN,通信接口硬件设计和,MSCAN08,和,MSCAN12,编程方法,MSCAN08/MSCAN12,3,二、主要内容,CAN,技术规范,MSCAN08,模块,MSCAN08,通信接口硬件电路,MSCAN08,模块的编程结构,MSCAN08
2、,通信子函数与测试实例,MSCAN12,模块,MSCAN12,模块的编程结构,MSCAN12,的自环测试实例,MSCAN08/MSCAN12,4,CAN,通信协议主要描述设备之间的信息传递方式。,CAN,各层的定义与开放系统互连模型,OSI,一致。,CAN,技术规范定义了模型的最下面两层:数据链路层和物理层,是设计,CAN,应用系统的基本依据。,1991,年,9,月,Bosch,公司发布了,CAN,技术规范,Version2.0,。该技术规范包括,A,和,B,两部分,,2.0A,给出了在,Version1.2,中定义的,CAN,报文格式,而,2.0B,给出了标准的和扩展的两种报文格式。,规范主
3、要是针对,CAN,控制器的设计者,对大多数应用系统设计人员来说,只需对,Version2.0,版技术规范的基本结构、概念、规则作一般了解,知道一些基本参数和可访问的硬件即可。,CAN,技术规范,MSCAN08/MSCAN12,5,CAN,的基本概念,报文,信息,路由,位速率,优先权,远程数据,请求,多主机,仲裁,错误标志和,恢复时间,故障,界定,连接,单通道,总线数据,表示,应答,MSCAN08/MSCAN12,6,报文和信息路由,报文,(Messages),在总线上传输的信息。,信息路由,(Information Routing),CAN,不对通信单元分配地址,报文的寻址内容由报文的,标识符
4、,指定。所有,CAN,节点通过,报文滤波,来判断是否接收报文。,MSCAN08/MSCAN12,7,位速率,位速率,(Bit Rate),指总线的传输速率,下表列出了距离与位速率的相关数据。这里的最大距离是指不接中继器的两个单元之间的距离。,MSCAN08/MSCAN12,8,位定位与同步,标称位速率,(,Nominal Bit Rate,):理想的发送器在没有重新同步的情况下每秒发送的位数量。,标称位时间,(,Nominal Bit Time,):是标称位速率的倒数。分成几个不重叠的片段:,同步段,(SYNC_SEG,)、,传播段,(PROG_SEG),、,相位段,1,(PHASE_SEG1
5、),、,相位段,2,(PHASE_SEG2),。,MSCAN08/MSCAN12,9,优先权,优先权,(Priorities),在,CAN,总线上发送的每一个报文都具有唯一的一个,11,位或,29,位的标识符,,标识符越小,,则报文,优先权越高,,因此一个为全,0,标识符的报文具有最高级优先权。,MSCAN08/MSCAN12,10,单通道,单通道,(Single Channel),CAN,总线由单一通道组成,借助数据的同步实现信息传输,可以是单线,(,加地线,),、两条差分线、光纤等,通常使用双绞线。,MSCAN08/MSCAN12,11,总线表示,总线数据表示,(Bus Values),C
6、AN,总线上用,显性,(Dominant),和,隐性,(Recessive),表示,0,和,1,。当在总线上出现同时发送显性位和隐性位时,总线上数值将出现显性。总线上的信号使用差分电压传送,两条信号线被称为,CAN_H,和,CAN_L,。,MSCAN08/MSCAN12,12,标识符检验滤波,当总线上有报文到达时,,MSCAN08,会将该报文的,标识符,与,本地的标识符校验寄存器中,进行比较,,本地标识符屏蔽寄存器,则是用于指定比较结果是否有影响,,1,表示相应位的比较结果,不影响,报文的接收。,MSCAN08/MSCAN12,13,报文传输类型,报文传输由,4,种不同的帧类型表示和控制:,数
7、据帧:,数据帧将数据从发送器传输到接收器。,远程帧:,总线单元发出远程帧,请求发送具有同一标识符的数据帧。,错误帧:,任何单元检测到总线错误就发出错误帧。,过载帧:,过载帧用于在先行和后续数据帧(或远程帧)之间提供一附加的延时。,MSCAN08/MSCAN12,14,数据帧结构,数据帧组成,MSCAN08/MSCAN12,15,远程帧结构,远程帧的组成,帧间空间,仲裁场,控制场,CRC,场,帧结束,远程帧,帧起始,应答场,帧间空间,或过载帧,MSCAN08/MSCAN12,16,错误帧结构,错误帧的组成,MSCAN08/MSCAN12,17,过载帧结构,过载帧的组成,MSCAN08/MSCAN
8、12,18,MSCAN08,特性,MSCAN08-Freescale,可升级控制器局域网(,Motorola scalable controller area network,,,MSCAN,):,符合,CAN2.0A/B,协议标准,支持,标准,和,扩展,数据帧,位速率可编程,最大,1Mbps,数据帧长度为,08,字节,支持远程请求帧,1,个,FIFO,接收,缓冲区,,3,个,具有局部优先级的,FIFO,发送,缓冲区,标识符验收,模式可配置成,1,个,32,位过滤码、,2,个,16,位过滤码、,4,个,8,位过滤码,或者关闭滤波器,内置低通滤波的远程唤醒功能,自环,工作模式,MSCAN08/M
9、SCAN12,19,MSCAN08,外部引脚,MSCAN08,有,2,根外部引脚:,CANRX,(,输入,),和,CANTX,(,输出,),CANTX,代表,CAN,上的逻辑电平:,0,为高电平,(,显性,),,,1,为低电平,(,隐性,),。,MSCAN08,模块构建的典型的,CAN,系统如图所示:,MSCAN08/MSCAN12,20,MSCAN08,通信接口电路,MSCAN08/MSCAN12,21,MSCAN08,的编程结构,内存映射,MSCAN08/MSCAN12,22,MSCAN08,的编程结构,报文收发缓冲区,MSCAN08/MSCAN12,23,MSCAN08,的编程结构,寄存
10、器,MSCAN08/MSCAN12,24,MSCAN08,通信实现,初始化,MSCAN08/MSCAN12,25,MSCAN08,通信实现,发送和接收函数,MSCAN08/MSCAN12,26,MSCAN08,自环通信测试实例,(1),回环工作方式测试工程文件列表,MSCAN08/MSCAN12,27,MSCAN08,自环通信测试实例,(2),回环工作方式,C,语言主程序,MSCAN08/MSCAN12,28,MSCAN08,正常通信测试实例,(1),查询方式服务器节点,C,语言主程序,MSCAN08/MSCAN12,29,MSCAN08,正常通信测试实例,(2),查询方式客户节点,C,语言主
11、程序,MSCAN08/MSCAN12,30,MSCAN12,模块简介,MSCAN12,特性(与,MSCAN08,几乎相同):,符合,CAN2.0A/B,协议标准,支持,标准,和,扩展,数据帧格式,数据长度为,08,字节,位速率可编程,最大,1Mbps,支持,远程帧,拥有,5,个,FIFO,机制的,接收,缓冲区,,3,个,具有局部优先级的,发送,缓冲区,具有灵活的,标识符验收,模式,MSCAN08/MSCAN12,31,MSCAN12,模块框图,MSCAN08/MSCAN12,32,MSCAN12,外部引脚,MSCAN08/MSCAN12,33,MSCAN12,报文缓冲区结构,报文缓冲区组织图,
12、MSCAN08/MSCAN12,34,MSCAN12,编程结构,内存映射,MSCAN08/MSCAN12,35,MSCAN12,编程结构,寄存器,1)MSCAN,控制寄存器,0(CANCTL0),2)MSCAN,控制寄存器,1(CANCTL1),3)MSCAN,总线时钟寄存器,0(CANBTR0),4)MSCAN,总线时钟寄存器,1(CANBTR1),5)MSCAN,接收器标志寄存器,(CANRFLG),6)MSCAN,接收器中断使能寄存器,(CANRIER),7)MSCAN,发送器标志寄存器,(CANTFLG),8)MSCAN,发送器中断使能寄存器,(CANTIER),9)MSCAN,发送器
13、消息中止控制寄存器,(CANTARQ),10)MSCAN,发送器消息中止控制寄存器,(CANTAAK),11)MSCAN,发送缓冲区选择寄存器,(CANTBSEL),12)MSCAN,标识符验收控制寄存器,(CANTIDAC),13)MSCAN,接收错误计数寄存器,(CANRXERR),14)MSCAN,发送错误计数寄存器,(CANTXERR),15)MSCAN,标识符验收码寄存器,(CANIDAR07),16)MSCAN,标识符屏蔽寄存器,(CANIDMR07),MSCAN08/MSCAN12,36,MSCAN12,模块的自环通信实例,MSCAN12,通信头文件(,MSCAN12.h,),(
14、,1,),CAN,通信寄存器及标志位定义,(,2,),CAN,通信用到的设置量定义,(,3,),CAN,通信相关函数声明,(,4,),CAN,通信初始化,MSCAN12,通信函数文件(,MSCAN12.c,),(,1,),CAN,通信初始化:,void CANInit(void),(,2,),CAN,发送,1,帧数据:,INT8U CANSND1DFRM(INT16U ID,INT8U*DataBUF,INT8U LEN),(,3,)查找空闲发送缓冲区:,INT8U GetSNDBUF(void),(,4,),CAN,接收,1,帧数据:,INT8U CANRCV1FRM(INT8U*CANRC
15、VBUF),MSCAN08/MSCAN12,37,MSCAN12,模块的自环通信实例,1.,自环通信方式测试工程主函数文件,main.c,第,1,步:定义常量,初始化变量,第,2,步:禁止总中断,第,3,步:芯片初始化,第,4,步:模块初始化,(,串口初始化、,MSCAN12,初始化),第,5,步:开放,SCI0,接收中断,第,6,步:开放总中断,MSCAN08/MSCAN12,38,MSCAN12,模块的自环通信实例,1.,自环通信方式测试工程主函数文件,main.c,第,7,步:等待时间增加,1,。若等待时间到转第,8,步,否则转第,7,步。,第,8,步:发送,Hello!,若发送成功转第,9,步,否则转第,10,步。,第,9,步:,CAN,等待接收数据,若接收到则通过,SCI,向,PC,发送数据,否则发送“,ReceiveError!”,。转第,11,步。,第,10,步:通过,SCI,向,PC,发送“,SendError!”,第,11,步:等待时间清零,转第,7,步。,MSCAN08/MSCAN12,39,MSCAN12,模块的自环通信实例,2.,自环通信方式测试工程,MT,环境的工程结构,MSCAN08/MSCAN12,40,MSCAN12,模块的自环通信实例,3.,自环通信方式测试工程,CW,环境的工程结构,