
班级:物联网工程1202班
姓名:武朋真
学号:2012234050207
目录
1、CAN的特点
2、 CAN总线协议基本概念
3、CAN总线协议基本规则
4、CAN总线的工作原理
5、了解与学习SJA1000
6、SJA1000与单片机的接口
7、SJA1000与单片机图
1、CAN的特点
由于采用了许多新技术及独特的设计,CAN总线与一般的通信总线相比,它的数据通信具有突出的可靠性、实用性和灵活性。其特点可概括如下:
●CAN是到目前为止唯一有国际标准的现场总线。
●CAN为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上其他节点发送信息,而不分主从。
●在报文标识符上,CAN上的节点分成不同的优先级,可满足不同的实时要求,优先级高的数据最多在134μs内得到传输。
●CAN采用非破坏总线仲裁技术。当多个节点同时向总线发送信息出现冲突时,优先级较低的节点会主动退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。尤其是在网络负载很重的情况下,也不会出现网络瘫痪的情况(以太网则可能)。
●CAN节点只需通过对报文的标识符滤波即可实现点对点、一对多点及全局广播等几种方式传送接收数据。
●CAN的直接通信距离最远可达10km(速率在5kbps以下);通信速率最高可达1Mbps(这时通讯距离最长为40m)。
●CAN上的节点数主要取决于总线驱动电路,目前可达110个。在标准帧报文标识符有11位。而在扩展帧的报文标识符(29位)的个数几乎不受。
●报文采用短帧结构,传输时间短,受干扰概率低,保证了数据出错率极低。
●CAN的每帧信息都有CRC校验及其他检错措施,具有极好的检错效果。
●CAN的通信介质可为双绞线、同轴电缆或光纤,选择灵活。
●CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响
●CAN总线具有较高的性能价格比。它结构简单,器件容易购置,每个节点的价格比较低,而且开发技术容易掌握,能充分利用现有的单片机开发工具。
2、CAN总线协议基本概念
(1)什么是现场总线
顾名思义,现场总线应当是应用在生产最底层的一种总线型拓扑的网络。进一步的来说,这种总线是用作现场控制系统的、直接与所有受控(设备)节点串行相连的通信网络。工业自动化控制的现场范围可以从一台家电设备到一个车间、一个工厂。受控设备和网络所处的环境以及报文的结构都有其特殊性,对信号的干扰往往是多方面的,而要求控制必须实时性很强。这就决定了现场总线有别于一般网络的特点。
(2)报文
总线上的信息以几个不同的固定格式的报文发送,但长度受限。当总线空闲时,任何链接的单元都可以开始发送新的报文。
(3)信息路由
在CAN系统里,CAN的节点不使用任何关于系统结构的信息(比如,站地址)。以下是与此有关的几个重要的概念。
●系统灵活性:不需要应用层以及任何节点软件个硬件的任何改变,可以在CAN网络中直接添加节点。
●报文路由:报文的寻址内容由标识符指定。标识符不指出报文的目的地,但是这个数据的特点含义使得网络上所有的节点可以通过报文滤波来判断该数据是否与它们相符合。
●多点传送:由于报文滤波的作用,任何数目的节点对同一条报文都可以接收并同时对此作出反应。
●数据一致性:在CAN网络里确保报文同时被所有的节点接收(或无节点接收)。系统的这种数据一致性是靠多点传送和错误处理的功能来实现的。
(4)位速率
在一个给定的CAN系统里位速率是唯一的,并且是固定的。
(5)优先权
报文中的数据帧和远程帧都有标识符段,在访问总线期间,标识符确定了一个静态的(固定的)报文优先权。当多个CAN单元同时传输报文发生总线冲突时,标识符码值越小的报文优先级越高。
(6)多主机
总线空闲时,任何单元都可以开始传送报文具有较高优先权的报文的单元可以获得总线的访问权。
(7)仲裁
只要总线空闲,任何单元都可以开始发送报文。如果两个或两个以上的单元同时开始传送报文,那么就会有总线访问冲突。通过使用了标识符的逐位仲裁可以解决这个冲突。
仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。在仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一“隐性”电平而监视到的是一“显性”电平,那么这个单元就失去了仲裁,必须退出发送状态。
(8)安全性
为了获得最安全的数据发送,CAN的每一个节点均采取了强有力的措施来进行错误检测、错误标定及错误自检。
1)错误检测
要进行检测错误,必须采取以下措施
●监视(发送器对发送位的电平与被监控的总线电平进行比较);
●循环冗余检查:
●位填充;
●报文格式检查;
2)错误检测的执行
错误检测的机制具有以下的属性:
●检测到所有的全局错误;
●检测到发送器的所有的局部错误;
●可以检测到报文里多达5个任意分布的错误;
●检测到报文里长度低于15(位)的突发性错误;
●检测到报文里任一奇数个的错误。
(9)错误标定和恢复时间
任何检测到错误的节点会标志出损坏的报文。次报文会失效并将自动重新传送。如果不再出现错误,那么从检测到错误到下一报文的传送开始为止,恢复时间最多为31个位的时间。
(10)故障界定
CAN节点能够把永久故障和短暂的干扰区别开来。故障的节点会被关闭。
(11)连接
CAN串行通信链路是可以连接许多单元的总线。理论上,可以连接无数个单元。但实际上由于受延迟时间以及总线线路上电气负载能力的影响,连接单元的数量是有限的。
(12)应答
所有的接收器对接收到的报文进行一致性检查。对于一致的报文,接收器给予应答;对于不一致的报文,接收器做出标志。
3、CAN总线协议的基本规则
(1)总线访问:采用载波监听多路访问,CAN控制器能够在总线空闲时,就是节点侦听到网络上至少存在3个空闲(位)时开始发送,采用硬同步,所有的控制器同步都为与帧的起始的前沿。过了一定时间,并在在一定条件后,重同步。
(2)仲裁:各节点向总线发电平时也对总线上电平进行读取,并于自身发送的电平进行比较,相同则发下一位,直至全部发完。不同则说明网络上有更高优先级的信息帧正在发送,即停止发送,退出竞争。
(3)编码/解码:帧起始域、仲裁域、控制域、数据域和CRC序列均使用位填充技术进行编码,就是5个连续的同状态电平插入一位与它相补的电平,还原时每5个同状态的电平后的相补电平被删除。
(4)出错标注:当检测到位错误、填充错误、形式错误或应答错误时,检测出错条件的CAN控制器将发送一个出错标志。
(5)超载标注:一些控制器会发送一个或多个超载帧以延迟下一个数据帧或远程帧的发送。
4、CAN总线的工作原理
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO118)。是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计 算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。
CAN总线原理是通过CAN总线、传感器、控制器和执行器由串行数据线连接起来。它不仅仅是将电缆按树形结构连接起来,其通信协议相当于ISO/OSI参考模型中的数据链路层,网络可根据协议探测和纠正数据传输过程中因电磁干扰而产生的数据错误。CAN网络的配制比较容易,允许任何站之间直接进行通信,而无需将所有数据全部汇总到主计算机后再行处理。当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。
CAN信号可以使用双绞线、光纤等介质传输。具体信号也是逻辑电平,采用差分方式传输。两条线号线分别是CAN_H和CAN_L。H和L均为2.5V左右时,表示信号逻辑“1”,也称为“隐性”。采用CAN_H比CAN_L高表示逻辑“0”,称为“显性”,CAN_H=3.5V,CAN_L=1.5V。CAN总线采用CSMA/CD模式检测整个网络,只有当总线处于空闲状态时,才允许发送。当发生冲突时CAN收发器具备仲裁能力,仲裁规则根据每个设备的ID决定,ID越小优先权越高。
帧格式:
标准帧具有11bit识别符;扩展帧具有29bit标识符。
帧类型:
数据帧数据帧从发送器传输到接收器。由7个不同的位场组成:帧起始位、仲裁场、控制场、数据场、校验场、应答场、帧结尾。
数据场长度可以为0。
远程帧由总线单元发出,请求发送具有统一识别符的数据帧
错误帧任何节点检测到总线错误就发出错误帧
过载帧用以在先行和后续的数据帧之间附加一定延时
5、了解与学习SJA1000
(1)对SJA1000学习中主要用到的储存器及工作方式:发送缓冲器TXB和接收缓冲器RXFIFO、位流处理器BSP、接收过滤器ASP、位时序处理逻辑BTL错误管理逻辑EML、内部震荡器及复位电路。CPU的控制经IML,把要发送的数据写TXB,TXB中的数据由BSP处理后经BTL输出到CAN BUS。BTL始终监视CAN BUS,当检测到有效的信息头“隐性电平A控制电平”的转换时启动接收过程,接收的信息首先要由位流处理器BSP处理,并由ASP过滤,只有当接收的信息的识别码与ASP检验相符合时,接收信息才最终被写入RXB或RXFIFO中。RXFIFO最多可以缓存字节的数据,该数据可被CPU读取。EML负责传送层中调制器的错误管制,它接收BSP的出错报告,促使BSP和IML进行错误统计。
(2)常用到的寄存器的结构及地址分配
在学习中了解到CAN控制器工作模式的设定、数据的发送和接收都是通过这些寄存器来实现的。时钟分频寄存器OCR用于设定SJA1000工作于BASIC CAN还是PeliCAN还用于CLKOUT引脚输出始终频率的设定。在工作模式下,控制寄存器CR用于控制CAN控制器的行为,可读可写;命令寄存器CMR只能写;状态寄存器SR只能读,IR,ACR,AMR,BTR0,BTR1,OCR在工作模式下读写无意义。通常,在系统初始化时,先用CR.0=1进入复位模式。在此模式下IR,ACR,AMR,BTR0,BTR1,OCR均可读可写,此时设置相应的初值。当退出复位模式时,SJA1000即按复位时设定的相应情况工作于工作模式,除非再次使芯片复位,否则上次设定的值不变。当需要发送信息时,若发送缓冲器空闲,由CPU控制信息写入TXB,再由CMR控制发送;当接收缓冲器RXFIFO未满且接收信息通过了ASP,则接收到的信息被写入RXFIFO。可通过两种方法读取接收到的信息。一种方法是,在中断被使能的情况下,由SJA1000向CPU发中断信号,CPU通过SR及IR可以识别该中断,并读取数据释放接收缓冲器;另一种方法是直接读SR,查询RXFIFO的状态,当有信息接收时,读取该信息并释放接收缓冲器。当接收缓冲器中有多条信息时,当前的信息被读取后,接收缓冲器有效信号会再次有效,通过中断方式或查询方式可以再次读取信息,直到RXFIFO中的信息被全部读出为止。当RXFIFO已满,如还有信息被接收,此信息不被保存,且发出相应的缓冲器溢出信号供CPU读取处理。
6、SJA1000与单片机的接口
SJA1000引脚AD0——AD7时8位地址的数据复用线,可以接至单片机地址、数据复用口,用于传递单片机需要访问的SJA1000寄存器地址与数据。因为采用地址与数据分时复用,所以SJA1000要用到地址锁存信号,可由单片机ALE引脚提供,单片机对于SJA1000读写时,某一个时刻读或写的数据流向不确定,但可以把SlA1000看成片外RAM,SJA1000种的每一个寄存器就相当于片外RAM的一个单元,单片机对片外RAM操作的所有指令和接线都可以用于SJA1000。SJA1000的片选引脚CS可接到高位地址线上。SJA1000的读写地址锁存控制引脚接到单片机WR和RD,ALE端,当CS位状态有效时,SJA1000开始工作,依照程序需要这些控制引脚状态自动的按照时序工作,SJA1000的CLKOUT引脚用于提供了时钟信号,该引脚状态受SJA1000内部时钟分频寄存器控制,可以设置允许或禁止时钟输出,设置时钟时频率,当允许时钟输出时,该引脚输出时钟信号可作为单片机外部时钟源。接至单片机晶振输入端。SJA1000的复位引脚REST低电平有效,可以接电阻和电容实现自动上电复位,或接单片机i/o口,由单片机控制复位。SJA1000的INT引脚为中断输出,当SJA1000内部中断寄存器某一位被置位时,此引脚输出低电平表示产生了有效的中断,因为该引脚输出低电平表示产生了有效的中断,因为引脚为开漏输出,所以要经拉电阻接高电平。如果单片机对CAN的控制采用查询方式,INT引脚可不接,但需要不断读SJA1000状态寄存器判断是否产生了中断。
7、SJA1000与单片机图
程序:
NUM EQU 31H
SJA_BaseAdr EQU 7F00H
CR EQU 7F01H
NODECODE EQU 7F02H
BTR0 EQU 0010H
BTR1 EQU 0011H
AMR EQU 7F05H
OCR EQU 0008H
ORG 0000H ;单片机复位后的程序入口地址
LJMP MAIN
;ORG 0003H ;外部中断0的中断服务程序入口的地址
;ORG 000BH;定时器0的中断服务程序入口的地址
JMP LOOP
CONTINUE:
LCALL Delay
LCALL Display
JMP LOOP
CX:
LCALL Delay
JNB P3.3,CXX
LJMP LOOP
CXX:
MOV A,NUM
INC A
MOV NUM,A
CJNE A,#16,CXXX ;如果不相等,则跳转,相等就执行下一条指令
MOV NUM,#0
LJMP LOOP
CXXX:
LCALL CAN_SEND
LCALL Display
LCALL Delay
LJMP LOOP
CAN_SEND:
PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
CLR EA
MOV DPTR,#7F10H
MOV A,#1
MOVX @DPTR,A
MOV DPTR,#7F11H
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#7F13H
MOV R0,#NUM
MOV A ,@R0
MOVX @DPTR,A
MOV DPTR,#7F01H
MOV A,#01H
MOVX @DPTR,A
SETB EA
POP PSW
POP ACC
RET
Sja1000_init:
MOV DPTR,#CR ;控制寄存器CR的地址送DPTR
MOV A,#01H
MOVX @DPTR,A ;进入复位模式
MOV A,#00H
MOVX @DPTR,A ;选择BASIC CAN模式、时钟不输出
//MOV A,#NODECODE
MOVX @DPTR,A ;节点号NODECODE写入ACR
//MOVX DPTR,#AMR
MOV A,#00H
//MOV @DPTR,A ;AMR置为0,当且仅当RXIDO=ACR时接收数据
MOV DPTR,#BTR0 ;设定总线时序寄存器BTR0,系统采用12MHz晶振
MOV A,#85H ;分频后总线时钟频率为2MHz
MOVX @DPTR,A ;同步跳转宽度为3tscl
MOV DPTR,#BTR1 ;设定总线时序寄存器BTR1
MOV A,#0B4H ;为同步时间为1个tscl。采样开始位置TSEG1=5tscl
MOVX @DPTR,A ;TSEG2=4TSCL.每一位时间10tscl(200KHz),每位采样3次
MOV DPTR,#OCR ;设置输出控制寄存器
//MOV @DPTR,A ;TX1不用
MOV DPTR ,#CR ;初始化完成使控制器退出复位模式,进入工作模式工作
MOV A,#06H
//MOV @DPTR,A
Display:
CLR P2.0
CLR P2.1
CLR P2.2
CLR P2.3
MOV R1,#NUM
MOV A,@R1
MOV DPTR,#Tab ;将字形表的首地址
MOVX A,@A+DPTR ;取字形码
MOV P1,A ;将A中的值付给P1
LCALL Delay
RET
Tab:
DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3,
DB 99H,92H,82H,0F8H ;4,5,6,7,
DB 80H,90H,88H,83H ;8,9,A,B
DB 0C6H,0A1H,86H,8EH ;C,D,E,F
RET
Delay:
PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
MOV R7,#200
D1:
MOV R6,#200
D2:
DJNZ R6,D2
DJNZ R7,D1
POP PSW
POP ACC
RET ;返回
END
