1、CAN总线及应用实例精品文档CAN总线及应用实例(1)CAN特点CAN为多主方式工作,网络上任意智能节点均可在任意时刻主动向网络上其他节点发送信息,而不分主从,且无需站地址等节点信息,通信方式灵活。利用这特点可方便地构成多机备份系统。CAN网络上节点信息分成不同优先级(报文有2032种优先权),可满足不同实时要求,高优先级数据最多可在134,us内得到传输。CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低节点会主动地退出发送,大大节省了总线冲突仲裁时间。CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式收发数据,无需专门“调度”。CAN直接通信距离最
2、远可达l 0km(速率5kbp以下):通信速率最高可达Mbps(此时通信距离最长为40m) 。CAN上节点数主要取决于总线驱动电路,目前可达110个;报文标识符可达2032种(CAN2.0A),而扩展(CAN2.0B)报文标识符几乎不受限制。(2)CAN总线协议 CAN协议以国际标准化组织开放性互连模型为参照,规定了物理层、传输层和对象层,实际上相当于ISO网络层次模型中物理层和数据链路层。图3.9 为CAN总线网络层次结构,发送过程中,数据、数据标识符及数据长度,加上必要总线控制信号形成串行数据流,发送到串行总线上,接收方再对数据流进行分析,从中提取有效数据。CAN协议一个最大特点是废除了传
3、统站地址编码,而代之以对通信数据块进行编码,数据在网络上通过广播方式发送。其优点是可使网络内节点个数在理论上不受限制(实际中受网络硬件电气特性限制),还可使同一个通信数据块同时被不同节点接收,这在分布式控制系统中非常有用。CAN 2.0A版本规定标准CAN标识符长度为11位,同时在2.0 B版本中又补充规定了标识符长度为29位扩展格式,因此理论上可以定义211次方或219次方种不同数据块。遵循CAN 2.0 B协议CAN控制器可以发送和接收标准格式报文(11位标识符)或扩展格式报文(29位标识符),如果禁止CAN 2.0B则CAN控制器只能发送和接收标准格式报文而忽略扩展格式报文,但不会出现错
4、误。每个报文数据段长度为0-8个字节,可满足通常工业领域中控制命令、工作状态及检测数据传送一般要求。同时,8个字节占用总线时间不长,从而保证了通信实时性。CAN协议采用CRC检验并提供相应错误处理功能,保证了数据通信可靠性。对象层:报文滤波、报文和状态处理传输层:故障界定、错误检测和信令、报文校验、应答、仲裁、报文分帧、传输速率和定时物理层:信号电平和位表示、传输媒体图3.9 CAN总线层次结构(3)报文传送和帧结构CAN总线以报文为单位进行信息传送。报文中包含标识符,它标志了报文优先权。CAN总线上各个节点都可主动发送。如同时有两个或更多节点开始发送报文,采用标识符ID来进行仲裁,具有最高优
5、先权报文节点赢得总线使用权,而其他节点自动停止发送。在总线再次空闲后,这些节点将自动重发原报文。CAN系统中,一个CAN节点不使用有关系统结构任何信息。报文中标识符并不指出报文目地址,而是描述数据含义。网络中所有节点都可有标识符来自动决定是否接收该报文。每个节点都有标识符寄存器和屏蔽寄存器,接收到报文只有与该屏蔽功能相同时,该节点才开始正式接收报文,否则它将不理睬标识符后面报文。CAN支持4种不同类型报文帧:数据帧、远程帧、出错帧、超载帧、帧间空间 1)数据帧用于在各个节点之间传送数据或命令,它有7个不同位场组成:帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束,如图3.10-13所示
6、。图3.10 数据帧帧起始标志数据帧开始。它由一个主控位构成。仲裁场由11位标识符(M)和远程发送请求位(RTR)组成,其中最高7位。不能全是隐性位。M决定了报文优先权。如主控位为0,隐性位为1,则M数值越小,优先权越高。对数据帧,RTR为主控电平。控制场r1和r0为保留位,应发送主控电平。DLC为数据长度码n,它为0-80数据场允许数据字节长度为08,由n决定。应答场包括应答位和应答分隔符。发送站发出这两位均为隐性电平。而正确地接收到有效报文接收站,在应答位期间应传送主控电平给发送站。应答分隔符为隐性电平。帧结束由7位隐性电平组成。图3.11 仲裁场图3.12仲裁场扩展格式 图3.13 控制
7、场以上为标准格式数据帧,除此之外,在CAN规范2.0 B中,还定义了扩展格式数据帧,它标识符扩展为29位。它前11位标识符后两位为SRR和ME,它们均为隐性电平,后面为新增18位标识符,其余与标准格式相同。 表3.2 数据长度码中数据字节数目编码数据字节数目数据长度码DLC3DLC2DLC1DLC00dddd1dddr2ddrd3ddrr4drdd5drdr6drrd7drrr8rddd2)远程帧图3.14 远程帧3)出错帧图3.15 出错帧1) 超载帧图3.16 超载帧(4)CAN通信接口图3.17是CAN通信部分电路,SJA1000是一种独立用于移动目标和一般工业环境中区域网络控制。它是P
8、hilips半导体公司PCA82C200CAN控制器(BasicCAN)替代品,而且它增加了一种新操作模式PeliCAN,这种模式支持具有很多新特性CAN2.0B协议, 独立CAN 控制器有2 个不同操作模式:BasicCAN 模式和PeliCAN模式其中BasicCAN模式可和PCA82c250相兼容BasicCAN 模式是上电后默认操作模式,因此用PCA82C250(是协议控制器和物理传输线路之间收发器)开发已有硬件和软件可以直接在SJA1000 上使用而不用作任何修改;PeliCAN 模式是新操作模式它能够处理所有CAN2.0B 规范帧类型而且它还提供一些增强功能和SJA1000 能应用
9、于更宽领域。图3.17 CAN通信部分电路1)SJA1000 特征能分成3组:已建立PCA82C200 功能这组功能已经在PCA82C200 里实现。 改良PCA82C200 功能这组功能部份已经在PCA82C200 里实现但是在SJA1000里这些功能在速度大小和性能方面得到了改良。PeliCAN 模式增强功能在PeliCAN 模式里SJA1000 支持一些错误分析功能支持系统诊断系统维护系统优化而且这个模式里也加入了对一般CPU 支持和系统自身测试功能。SJA1000管脚:AD0-AD7:地址/数据复用信号ALE/AS:ALE输入信号(Intel模式),AS输入信号(Motorola模式)
10、/CS:片选信号,低电平有效/RD:微控制器/RD信号(Intel模式),或E使能信号(Motorola模式)/WR:微控制器/WR信号(Intel模式),或R/W使能信号(Motorola模式)CLKOUT:提供给微控制器时钟输出信号,通过可编程分频器由内部晶振产生;时钟分频寄存器时钟关闭位可禁止该引脚。VSS1:接地端 ,VSS2:输入比较器接地端,VSS3:输出驱动器接地端。VDD1 :逻辑电路5V电源,VDD2输入比较器5V电源,VDD3输出驱动器5V电源。XTAL1,2:分别位振荡器放大电路输入输出。MODE:模式选择输入,1= Intel模式,0= Motorola模式。TX0,T
11、X1: 由输出驱动器0、1到物理线路输出端。/INT:中断输出,开漏输出。/RST:复位输入。RX0,RX1:由物理总线到SJA1000输入比较器输入端,显性电平将会唤醒SJA1000睡眠模式;如果RX1RX0电平高,读出为显性电平,反之读出隐性电平;如果时钟分频寄存器CBP位被置位,就忽略CAN输入比较器以减少内延时(此时连有外部收发电路);这种情况下只有RX0是激活;隐性电平被认为是高,而显性电平被认为是低。PCA82C250/251收发器是协议控制器和物理传输线路之间接口,对总线提供差动发送能力,对CAN控制器提供差动接收能力,可连接110个节点。PCA82C250/251管脚:TXD:
12、发送数据输入 GND:地 Vcc:电源 4.55.5 VRXD:接收数据输出Vref:参考电压输出 CANH:低电平CAN电压输入/输出CANH:高电平CAN电压输入/输出Rs:斜率电阻输入,接地选择高速工作模式2)SJA1000 基本功能和寄存器: BasicCAN 功能说明表3.3 为SJA1000寄存器说明。表3.3 SJA1000寄存器说明地址功能段操作模式中寄存器功能复位模式中寄存器高功能0各类控制器读写读写1控制控制控制控制2FFH命令FFH命令3状态状态4FFH中断5FFH验收代码验收代码6FFH验收屏蔽验收屏蔽7FFH总时序0总时序08FFH总时序1总时序19测试测试测试测试1
13、0发送缓冲器标识符位域10-3标识符位域10-3FFH11标识符位域2-0 RTR和DLC位域标识符位域2-0RTR和DLC位域FFH12-19数据字节1数据字节8数据字节1数据字节8FFHFFH20接受缓冲器标识符位域10-3标识符位域10-3标识符位域10-3标识符位域10-321标识符位域2-0RTR和DLC位域标识符位域2-0RTR和DLC位域标识符位域2-0RTR和DLC位域标识符位域2-0RTR和DLC位域22-29数据字节1数据字节8数据字节1数据字节8数据字节1数据字节8数据字节1数据字节830FFHFFH31时钟分频器时钟分频器时钟分频器时钟分频器时钟分频器 1 控制寄存器(
14、CR):如表3.4所示。表3.4 控制寄存器位符号名称值功能CR.7CR.6CR.5CR.4OIE超载中断使能1使能:如果数据超载位置位,微控制器接收一个超载中断信号0禁止:微控制器不从SJA1000接收超载中断信号CR.3EIE错误中断使能1使能:如果出错或总线状态改变,微控制器接收一个错误中断信号0禁止:微控制器不从SJA1000接收错误中断信号CR.2TIE发送中断使能1使能:当报文被成功或发送缓冲器可再次被访问时,SJA1000向微控制器发出一次发送中断信号0禁止:SJA1000不向微控制器发送中断信号CR.1RIE接收中断使能1使能:报文被无错误接收时,SJA1000向微控制器发出一
15、次中断信号0禁止:SJA1000不向微控制器发送接收中断信号CR.0RR复位请求1常态:SJA1000检测到复位请求后,忽略当前发送/接收报文,进入复位模式0非常态:复位请求位接收到一个下降沿后,SJA1000回到工作模式2 命令寄存器(CMR):如表3.5所示。表3.5 命令寄存器位符号名称值功能CMR.7CMR.6CMR.5CMR.4CTS睡眠1睡眠:如果没有CAN中断等待和总线活动,SJA1000进入睡眠模式0唤醒:SJA1000正常工作模式CMR.3CDO清除超载状态1清除:清除数据超载状态位0无作用CMR.2RRB释放接收缓冲器1释放:接收缓冲器中存放报文内存空间将被释放0无作用CM
16、R.1AT夭折发送1常态:如果不是在处理过程中,等待处理发送请求将忽略0非常态:无作用CMR.0TR发送请求1常态:报文被发送0非常态:无作用3 状态寄存器(SR):如表3.6所示。表3.6 状态寄存器位符号名称值功能SR.7BS总线状态1总线关闭:SJA1000退出总线活动0总线开启:SJA1000进入总线活动SR.6ES出错状态1出错:至少出现一个错误计数器满或超过CPU报警机制0正常:两个错误计数器都在报警限制以下SR.5TS发送状态1发送:SJA1000正在发送报文0空闲:没有要发送报文SR.4RS接收状态1接收:SJA1000正在接收0空闲:没有要接收报文SR.3TCS发送完毕状态1
17、完成:最近一次发送请求被成功处理0未完成:当前发送请求未处理完毕SR.2TBS发送缓冲器状态1释放:CPU可以向发送缓冲器写报文0锁定:CPU不能访问发送缓冲器,有报文正在等待发送或正在发送SR.1DOS数据超载状态1超载:报文丢失,因为RXFIFO中没有足够空间来存储它0未超载:自从最后一次清除数据超载命令执行,无数据超载发生SR.0RBS接收缓冲状态1满:RXFIFO中有可用报文0空:无可用报文4中断寄存器(IR):如表3.7所示。表3.7 中断寄存器位符号名称值功能IR.7IR.6IR.5IR.4WUI唤醒中断1置位:退出睡眠模式时此位被置位0复位:微控制器任何读访问将清除此位IR.3D
18、OI数据超载中断1置位:当数据超载中断使能位被置为1时,数据超载状态位由低到高跳变,将其置位。0复位:微控制器任何读访问将清除此位IR.2EI错误中断1置位:错误中断使能时,错误状态位或总线状态位变化会置位此位0复位:微控制器任何读访问将清除此位IR.1TI发送中断1置位:发送缓冲器状态由低到高跳变(释放)和发送中断使能时,置位此位0复位:微控制器任何读访问将清除此位IR.0RI接收中断1置位:当接收FIFO不空和接收中断使能时置位此位0复位:微控制器任何读访问将清除此位5验收代码寄存器(ACR):如表3.8所示。表3.8 验收代码寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1
19、BIT0AC.7AC.6AC.5AC.4AC.3AC.2AC.1AC.0复位请求位被置高(当前)时,该寄存器可以访问。如果一条报文通过了接收滤波器测试而且接收缓冲器有空间,描述符和数据将被分别顺次写入RXFIFO,当报文被正确接收完毕,则有:接收状态位置高(满);接收中断使能位置高(使能),接收中断置高(产生中断)。验收代码(AC.7AC.0)和报文标识符高8位(ID.10ID.3)必须相等,或验收屏蔽位(AM.7AM.0)所有位为1。即如果满足以下方程描述,则予以接收。(ID.10ID.3)(AC.7AC.0) (AM.7AM.0)111111116验收屏蔽寄存器(AMR):如表3.9所示。
20、表3.9 验收屏蔽寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0AM.7AM.6AM.5AM.4AM.3AM.2AM.1AM.0复位请求位被置高(当前)时,该寄存器可以访问。验收屏蔽寄存器定义验收代码寄存器哪些位对接收过滤器是“相关”或“无关”(即可为任意值)当AM.i=0时,是“相关”当AM.i=1时,是“无关”(i=07)7发送缓冲区:如表3.10所示。表3.10 验收屏蔽寄存器区CAN地址名称位76543210描述符10标识符字节1ID.10ID.9ID.8ID.7ID.6ID.5ID.4ID.311标识符字节2ID.2ID.1ID.0RTRDLC.3DLC.2D
21、LC.1DLC.0数据12TX数据1发送数据字节113TX数据2发送数据字节214TX数据3发送数据字节315TX数据4发送数据字节416TX数据5发送数据字节517TX数据6发送数据字节618TX数据7发送数据字节719TX数据8发送数据字节8标识符(ID):11位,就像报文名字,值越低,优先级越高。远程发送请求(RTR):当RTR=1,总线以远程帧发送数据。如果RTR没有被置位,数据将以数据长度码规定长度来传送数据帧。数据长度码(DLC):数据字节数=8DLC.3+4DLC.2+2DLC.1+DLC.0报文数据区字节数根据数据长度码编制。在远程帧传送中,因为RTR被置位,数据长度码是不被考
22、虑。这就迫使发送/接收数据字节数为0。然而,数据长度码必须正确设置,以避免两个CAN控制器用同样识别机制启动远程帧传送而发生总线错误。数据字节数是0-8。数据区:传送数据字节数由数据长度码决定。发送第一位是地址12单元数据字节1最高位。BasicCAN 和PeliCAN公用寄存器1总线时序寄存器0(BTR0):如表3.11所示。表3.11 总线时序寄存器0BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0SJW.1SJW.0BRP.5BRP.4BRP.3BRP.2BRP.1BRP.0波特率预置器位域 位域BRP使得CAN系统时钟周期时tSCL是可编程:同步跳转宽度位域 为了补偿在
23、不同总线控制器时钟振荡器之间相位漂移,任何总线控制器必须在当前传送任一相关信号边沿重新同步。同步跳转宽度定义了一个位周期可以被一次重新同步缩短或延长时钟周期最大数目。2总线时序寄存器1(BTR1):如表3.12、13所示。总线时序寄存器1定义了一个位周期长度、采样点位置和在每个采样点采样数目。在复位模式中,这个寄存器可以被读/写访问。在PeliCAN模式操作模式中,该寄存器是只读,在BasicCAN模式操作模式中总是“FFH”表3.12 总线时序寄存器1BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0SAMTSEG2.2TSEG2.1TSEG2.0TSEG1.3TSEG1.2T
24、SEG1.1TSEG1.0采样位(SAM)表3.13 采样位位值功能SAM13次:总线采样3次,建议在低/中速总线上使用,这对过滤总线上毛刺是有效0单次:总线采样1次,建议使用在高速总线上时间段1和时间段2位域3输出控制寄存器(OCR):如表3.14-16所示。允许软件控制建立不同输出驱动配置。在复位模式中,这个寄存器可以被读/写访问。在PeliCAN模式操作模式中,该寄存器是只读,在BasicCAN模式操作模式中总是“FFH”。表3.14 输出控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0OCTP1OCTN1OCPOL1OCTP0OCTN0OCPOL0OCMODE
25、1OCMODE0在SJA1000在睡眠模式中,TX0、TX1根据输出控制寄存器内容输出隐性电平。在复位状态(复位请求=1)或外部复位引脚/RST被拉低时,TX0、TX1悬空。表3.15 输出控制寄存器OCMODE1OCMODE0说明00双相输出模式:与正常输出模式相反01测试输出模式:在下一次系统时钟上升沿RX上电平反映到TXX上,系统时钟(fosc/2)与输出控制寄存器中编程定义极性相对应。10正常输出模式:通过TX0、TX1送出,取决于OCTPX、OCTNX、OCPOLX编程。11时钟输出模式:TX0同正常输出模式,TX1由发送时钟TXCLK取代表3.16 输出引脚配置驱动TXDOCTPX
26、OCTNXOCPOLXTPXTNXTXX悬空00关关悬空上拉0010关开低1010关关悬空0011关关悬空1011关开低下拉0100关关悬空1100开关高0101开关高1101关关悬空下拉推挽0110关开低1110开关高0111开关高1111关开低4时钟分频寄存器:如表3.17-18所示。表3.17 时钟分频寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0CAN模式CBPRXINTEN0保留CLOCK OFFCD.2CD.1CD.0=0,工作BasicCAN=1, 工作PeliCAN=1,只有RX0起作用,RX1应接到确定电平。例如Vss允许TX1输出用来做专用接收中断输
27、出时钟关闭位1有效 表3.18 CLKOUT频率选择CD.2CD.1CD.0时钟频率000fosc/2001fosc/4010fosc/6011fosc/8100fosc/10101fosc/12110fosc/14111fosc3)BASICCAN程序设计:CAN应用节点程序主要包括初始化、发送、接收子程序。CAN初始化子程序NODE EQU 30H;节点号缓冲区NBTR0 EQU 31H;总线定时寄存器0缓冲区NBTR1 EQU 32H;总线定时寄存器1缓冲区TXBF EQU 40H;RAM内发送缓冲区RXBF EQU 50H; RAM内接收缓冲区CR EQU 0BF00H;控制寄存器CM
28、R EQU 0BF01H;命令寄存器SR EQU 0BF02H;状态寄存器IR EQU 0BF03H;中断寄存器ACR EQU 0BF04H;接收码寄存器AMR EQU 0BF05H;接收码屏蔽寄存器BTR0 EQU 0BF06H;总线定时寄存器0BTR1 EQU 0BF07H;总线定时寄存器1OCR EQU 0BF08H;输出控制寄存器CDR EQU 0BF1FH;时钟分频寄存器RXB EQU 0BF14H;接收缓冲器TXB EQU 0BF0AH;发送缓冲器入口:节点号在NODE,波特率在NBTR0、NBTR1出口:无CANINI:MOV DPTR,#CR;写控制寄存器MOV A,#01H;
29、置复位请求为高MOVX DPTR,ACANI1:MOVX A,DPTR;判断复位请求有效JNB ACC.0,CANI1MOV DPTR,#ACR;写验收码寄存器MOV A,NODE;设置节点号MOVX DPTR,AMOV DPTR,#AMR;写接收码屏蔽寄存器MOV A,#00HMOVX DPTR,AMOV DPTR,#BTR0;写总线定时寄存器0MOV A,NBTR0;设置波特率MOVX DPTR,AMOV DPTR,#BTR1;写总线定时寄存器1MOV A,NBTR1MOVX DPTR,AMOV DPTR,#OCR;写输出控制寄存器MOV A,#0FAHMOVX DPTR,AMOV DPT
30、R,#CDR;写时钟分频寄存器MOV A,#00H;将CAN工作模式设为BASICCAN模式时钟2分频MOVX DPTR,AMOV DPTR,#CR;写控制寄存器MOV A,#0EH;开放中断源MOVX DPTR,ARETCAN接收子程序:入口:无出口:接收描述符、数据长度及数据放在RXBF开始缓冲区中。RXSB:MOV DPTR,#SR;读状态寄存器判接收缓冲区满MOVX A,DPTRJNB ACC.0,RXSBRXSB1:MOV DPTR,#RXB:将接收数据放在cpuRAM区MOV R0,#RXBFMOVX A,DPTRMOV R0,AINC R0INC DPTRMOVX A,DPTRM
31、OV R0,AMOV B,ARXSB2:INC DPTRINC R0MOVX A,DPTRMOV R0,ADJNZ B,RXSB2MOV DPTR,#CMR;接收完毕释放接收缓冲区MOV A,#04HMOVX DPTR,AMOV DPTR,#SR;读此状态寄存器MOVX A,DPTRJB ACC.1,DATAOVER;判断数据溢出JB ACC.7,BUSWRONG;判断总线状态JB ACC.6,CNTWRONG;判断错误计数器状态SJMP RECEENDDATAOVER:做相应数据溢出错误处理 SJMP RECEENDBUSWRONG: 做总线错误处理 SJMP RECEENDCNTWRONG
32、:做计数错误处理RECEEND:RETCAN发送子程序:入口:将要发送描述符放在TXBF, 将要发送数据长度放在TXBF+1, 将要发送数据放在TXBF+2开始单元。出口:无TXSB:MOV DPTR,#SR;读状态寄存器MOVX A,DPTR;判发送缓冲区状态JNB ACC.2,TXSBMOV R1,#TXBFMOV DPTR,#TXBTX1:MOV A,R1;向发送缓冲区10填入标识符MOVX DPTR,AINC R1INC DPTRMOV A,R1;向发送缓冲区11填入标识符MOVX DPTR, AMOV B,ATX2:INC DPTRINC R1MOV A, R1;向发送缓冲区12-19送数据MOVX DPTR ,ADJNZ B,TX2MOV DPTR,#CMR;置CMR.0为1请求发送MOV A,#01HMOVX DPTR,ARET收集于网络,如有侵权请联系管理员删除