购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 CAN独立通信控制器SJA1000

SJA1000是一种独立控制器,用于汽车和一般工业环境中的局域网络控制。它是Philips公司的PCA82C200 CAN控制器(BasicCAN)的替代产品,而且它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特点的CAN 2.0B协议,SJA1000具有如下特点。

1)与PCA82C200独立CAN控制器引脚和电气兼容。

2)PCA82C200模式(即默认的BasicCAN模式)。

3)扩展的接收缓冲器(64B、先进先出FIFO)。

4)与CAN 2.0B协议兼容(PCA82C200兼容模式中的无源扩展结构)。

5)同时支持11位和29位标识符。

6)位速率可达1Mbit/s。

7)PeliCAN模式扩展功能:

● 可读/写访问的错误计数器。

● 可编程的错误报警限制。

● 最近一次错误代码寄存器。

● 对每一个CAN总线错误的中断。

● 具有详细位号(Bit Position)的仲裁丢失中断。

● 单次发送(无重发)。

● 只听模式(无确认、无激活的出错标志)。

● 支持热插拔(软件位速率检测)。

● 接收过滤器扩展(4B代码,4B屏蔽)。

● 自身信息接收(自接收请求)。

● 24MHz时钟频率。

● 可以和不同微处理器接口。

● 可编程的CAN输出驱动器配置。

● 增大的温度范围(-40~+125℃)。

2.3.1 SJA1000内部结构

SJA1000 CAN控制器主要由以下几部分构成。

1.接口管理逻辑(IML)

接口管理逻辑解释来自CPU的命令,控制CAN寄存器的寻址,向主控制器提供中断信息和状态信息。

2.发送缓冲器(TXB)

发送缓冲器是CPU和BSP(位流处理器)之间的接口,能够存储发送到CAN网络上的完整报文。缓冲器长13个字节,由CPU写入,BSP读出。

3.接收缓冲器(RXB,RXFIFO)

接收缓冲器是接收过滤器和CPU之间的接口,用来接收CAN总线上的报文,并存储接收到的报文。接收缓冲器(RXB,13B)作为接收FIFO(RXFIFO,64B)的一个窗口,可被CPU访问。

CPU在此FIFO的支持下,可以在处理报文的时候接收其他报文。

4.接收过滤器(ACF)

接收过滤器将其数据和接收的标识符相比较,以决定是否接收报文。在纯粹的接收测试中,所有的报文都保存在RXFIFO中。

5.位流处理器(BSP)

位流处理器是一个在发送缓冲器、RXFIFO和CAN总线之间控制数据流的序列发生器。它还执行错误检测、仲裁、总线填充和错误处理。

6.位时序逻辑(BTL)

位时序逻辑监视串行CAN总线,并处理与总线有关的位定时。在报文开始,由隐性到显性的变换同步CAN总线上的位流(硬同步),接收报文时再次同步下一次传送(软同步)。BTL还提供了可编程的时间段来补偿传播延迟时间、相位转换(如由于振荡漂移)和定义采样点和每一位的采样次数。

7.错误管理逻辑(EML)

EML负责传送层中调制器的错误界定。它接收BSP的出错报告,并将错误统计数字通知BSP和IML。

2.3.2 SJA1000引脚功能

SJA1000为28引脚DIP和SO封装,引脚如图2-14所示。

图2-14 SJA1000引脚图

引脚功能介绍如下。

AD7~AD0:地址/数据复用总线。

ALE/AS:ALE输入信号(Intel模式);AS输入信号(Motorola模式)。

:片选输入,低电平允许访问SJA1000。

:微控制器的 信号(Intel模式)或E使能信号(Motorola模式)。

:微控制器的 信号(Intel模式)或 信号(Motorola模式)。

CLKOUT:SJA1000产生的提供给微控制器的时钟输出信号;此时钟信号通过可编程分频器由内部晶振产生;时钟分频寄存器的时钟关闭位可禁止该引脚。

V SS1 :接地端。

XTAL1:振荡器放大电路输入,外部振荡信号由此输入。

XTAL2:振荡器放大电路输出,使用外部振荡信号时,此引脚必须保持开路。

MODE:模式选择输入。1=Intel模式,0=Motorola模式。

V DD3 :输出驱动的5V电压源。

TX0:由输出驱动器0到物理线路的输出端。

TX1:由输出驱动器1到物理线路的输出端。

V SS3 :输出驱动器接地端。

:中断输出,用于中断微控制器; 在内部中断寄存器各位都被置位时被激活; 是开漏输出,且与系统中的其他 是线或的;此引脚上的低电平可以把IC从睡眠模式中激活。

:复位输入,用于复位CAN接口(低电平有效);将 引脚通过电容连到V SS ,通过电阻连到V DD 可自动上电复位(例如, C =1μF;R=50kΩ)。

V DD2 :输入比较器的5V电压源。

RX0,RX1:由物理总线到SJA1000输入比较器的输入端;显性电平将会唤醒SJA1000的睡眠模式;如果RX1比RX0的电平高,读出为显性电平,反之读出为隐性电平;如果时钟分频寄存器的CBP位被置位,就忽略CAN输入比较器以减少内部延时(此时连有外部收发电路);这种情况下只有RX0是激活的;隐性电平被认为是高电平,而显性电平被认为是低电平。

V SS2 :输入比较器的接地端。

V DD1 :逻辑电路的5V电压源。

2.3.3 SJA1000工作模式

SJA1000在软件和引脚上都是与它的前一款——PCA82C200独立控制器兼容的。在此基础上它增加了很多新的功能。为了实现软件兼容,SJA1000增加修改了两种模式。

1)BasicCAN模式:PCA82C200兼容模式。

2)PeliCAN模式:扩展特性。

工作模式通过时钟分频寄存器中的CAN模式位来选择。复位默认模式是BasicCAN模式。

在PeliCAN模式下,SJA1000有一个含很多新功能的重组寄存器。SJA1000包含了设计在PCA82C200中的所有位及一些新功能位,PeliCAN模式支持CAN 2.0B协议规定的所有功能(29位标识符)。

SJA1000的主要新功能如下。

1)接收、发送标准帧和扩展帧格式信息。

2)接收FIFO(64B)。

3)用于标准帧和扩展帧的单/双接收过滤器(含屏蔽和代码寄存器)。

4)读/写访问的错误计数器。

5)可编程的错误限制报警。

6)最近一次的误码寄存器。

7)对每一个CAN总线错误的错误中断。

8)具有详细位号的仲裁丢失中断。

9)一次性发送(当错误或仲裁丢失时不重发)。

10)只听模式(CAN总线监听,无应答,无错误标志)。

11)支持热插拔(无干扰软件驱动的位速率检测)。

12)硬件禁止CLKOUT输出。

2.3.4 BasicCAN功能介绍

1.BasicCAN地址分配

SJA1000对微控制器而言是内存管理的I/O器件。两器件的独立操作是通过像RAM一样的片内寄存器修正来实现的。

SJA1000的地址区包括控制段和报文缓冲器。控制段在初始化加载时,是可被编程来配置通信参数的(如位定时等)。微控制器也是通过这个段来控制CAN总线上的通信的。在初始化时,CLKOUT信号可以被微控制器编程指定一个值。

应发送的报文写入发送缓冲器。成功接收报文后,微控制器从接收缓冲器中读出接收的报文,然后释放空间以便下一次使用。

微控制器和SJA1000之间状态、控制和命令信号的交换都是在控制段中完成的。在初始化程序加载后,接收代码寄存器、接收屏蔽寄存器、总线定时寄存器0和1以及输出控制寄存器就不能改变了。只有控制寄存器的复位位被置高时,才可以再次初始化这些寄存器。

在复位模式和工作模式中访问寄存器是不同的。当硬件复位或控制器掉电时会自动进入复位模式。工作模式是通过置位控制寄存器的复位请求位激活的。

BasicCAN地址分配见表2-1。

表2-1 BasicCAN地址分配

(续)

2.控制段

(1)控制寄存器(CR)

控制寄存器的内容是用于改变CAN控制器的状态。这些位可以被微控制器置位或复位,微控制器可以对控制寄存器进行读/写操作。控制寄存器各位的功能见表2-2。

表2-2 控制寄存器(地址0)

(续)

(2)命令寄存器(CMR)

命令位初始化SJA1000传输层上的动作。命令寄存器对微控制器来说是只写存储器。如果去读这个地址,返回值是“1111 1111”。两条命令之间至少有一个内部时钟周期,内部时钟的频率是外部振荡频率的1/2。命令寄存器各位的功能见表2-3。

表2-3 命令寄存器(地址1)

(3)状态寄存器(SR)

状态寄存器的内容反映了SJA1000的状态。状态寄存器对微控制器来说是只读存储器,各位的功能见表2-4。

表2-4 状态寄存器(地址2)

(续)

(4)中断寄存器(IR)

中断寄存器允许识别中断源。当寄存器的一位或多位被置位时, (低电位有效)引脚被激活。该寄存器被微控制器读过之后,所有位被复位,这将导致 引脚上的电平漂移。中断寄存器对微控制器来说是只读存储器,各位的功能见表2-5。

表2-5 中断寄存器(地址3)

(5)验收代码寄存器(ACR)

复位请求位被置高(当前)时,这个寄存器是可以访问(读/写)的。如果一条报文通过了接收过滤器的测试而且接收缓冲器有空间,那么描述符和数据将被分别顺次写入RXFIFO。当报文被正确接收完毕,则有:

● 接收状态位置高(满)。

● 接收中断使能位置高(使能),接收中断置高(产生中断)。

验收代码位(AC.7~AC.0)和报文标识符的高8位(ID.10~ID.3)必须相等,或者验收屏蔽位(AM.7~AM.0)的所有位为1。即如果满足以下等式,则予以接收。

[(ID.10~ID.3)≡(AC.7~AC.0)]∨(AM.7~AM.0)≡11111111

验收代码寄存器各位功能见表2-6。

表2-6 验收代码寄存器(地址4)

(6)验收屏蔽寄存器(AMR)

如果复位请求位置高(当前),这个寄存器可以被访问(读/写)。验收屏蔽寄存器定义验收代码寄存器的哪些位对接收过滤器是“相关的”或“无关的”(即可为任意值)。

当AM. i =0时,是“相关的”;当AM. i =1时,是“无关的”( i =0,1,…,7)。

验收屏蔽寄存器各位的功能见表2-7。

表2-7 验收屏蔽寄存器(地址5)

3.发送缓冲区

发送缓冲区的全部内容见表2-8。缓冲区是用来存储微控制器要SJA1000发送的报文的。它被分为描述符区和数据区。发送缓冲区的读/写只能由微控制器在工作模式下完成。在复位模式下读出的值总是“FFH”。

表2-8 发送缓冲区

(1)标识符(ID)

标识符有11位(ID0~ID10)。ID10是最高位,在仲裁过程中是最先被发送到总线上的。标识符就像报文的名字。它在接收器的接收过滤器中被用到,也在仲裁过程中决定总线访问的优先级。标识符的值越低,其优先级越高。这是因为在仲裁时有许多前导显性位所致。

(2)远程发送请求(RTR)

如果此位置1,总线将以远程帧发送数据。这意味着此帧中没有数据字节。然而,必须给出正确的数据长度码,数据长度码由具有相同标识符的数据帧报文决定。

如果RTR位没有被置位,数据将以数据长度码规定的长度来传送数据帧。

(3)数据长度码(DLC)

报文数据区的字节数根据数据长度码编制。在远程帧传送中,因为RTR被置位,数据长度码是不被考虑的。这就迫使发送/接收数据字节数为0。然而,数据长度码必须正确设置以避免两个CAN控制器用同样的识别机制启动远程帧传送而发生总线错误。数据字节数是0~8,是以如下方法计算的:

数据字节数=8×DLC.3+4×DLC.2+2×DLC.1+DLC.0

为了保持兼容性,数据长度码不超过8。如果选择的值超过8,则按照DLC规定认为是8。

(4)数据区

传送的数据字节数由数据长度码决定。发送的第一位是地址12单元的数据字节1的最高位。

4.接收缓冲区

接收缓冲区的全部列表和发送缓冲区类似。接收缓冲区是RXFIFO中可访问的部分,位于CAN地址20~29。

标识符、远程发送请求位和数据长度码与发送缓冲区的相同,只不过是在地址20~29。RXFIFO共有64B的报文空间。在任何情况下,FIFO中可以存储的报文数取决于各条报文的长度。如果RXFIFO中没有足够的空间来存储新的报文,CAN控制器会产生数据溢出。数据溢出发生时,已部分写入RXFIFO的当前报文将被删除。这种情况将通过状态位或数据溢出中断(中断允许时,即使除了最后一位整个数据块被无误接收也使接收报文无效)反映到微控制器。

5.寄存器的复位值

检测到有复位请求后将中止当前接收/发送的报文而进入复位模式。当复位请求位出现了1到0的变化时,CAN控制器将返回操作模式。

2.3.5 PeliCAN功能介绍

CAN控制器的内部寄存器对CPU来说是内部在片存储器。因为CAN控制器可以工作于不同模式(操作/复位),所以必须区分两种不同内部地址的定义。从CAN地址32起所有的内部RAM(80B)被映像为CPU的接口。

必须特别指出的是:在CAN的高端地址区的寄存器是重复的,CPU 8位地址的最高位不参与解码。CAN地址128和地址0是连续的。PeliCAN的详细功能说明请参考SJA1000数据手册。

2.3.6 BasicCAN和PeliCAN的公用寄存器

1.总线时序寄存器0

总线时序寄存器0(BTR0)见表2-9,它定义了波特率预置器(Baud Rate Prescaler-BRP)和同步跳转宽度(SJW)的值。复位模式有效时,这个寄存器是可以被访问(读/写)的。

如果选择的是PeliCAN模式,此寄存器在操作模式中是只读的。在BasicCAN模式中总是“FFH”。

表2-9 总线时序寄存器0(地址6)

(1)波特率预置器位域

位域BRP使得CAN系统时钟的周期 t SCL 是可编程的,而 t SCL 决定了各自的位定时。CAN系统时钟由如下公式计算。

t SCL =2 t CLK ×(32×BRP.5+16×BRP.4+8×BRP.3+4×BRP.2+2×BRP.1+BRP.0+1)

式中, t CLK =XTAL的振荡周期=1/ f XTAL

(2)同步跳转宽度位域

为了补偿在不同总线控制器的时钟振荡器之间的相位漂移,任何总线控制器必须在当前传送的任一相关信号边沿重新同步。同步跳转宽度 t SJW 定义了一个位周期可以被一次重新同步缩短或延长的时钟周期的最大数目,它与位域SJW的关系是:

t SJW = t SCL ×(2×SJW.1+SJW.0+1)

2.总线时序寄存器1

总线时序寄存器1(BTR1)见表2-10,定义了一个位周期的长度、采样点的位置和在每个采样点的采样数目。在复位模式中,这个寄存器可以被读/写访问。在PeliCAN模式的操作模式中,这个寄存器是只读的;在BasicCAN模式中,BTR 1总是“FFH”。

表2-10 总线时序寄存器1(地址7)

(1)采样位

采样位(SAM)的功能说明见表2-11。

表2-11 采样位的功能说明

(2)时间段1和时间段2位域

时间段1(TSEG1)和时间段2(TSEG2)决定了每一位的时钟周期数目和采样点的位置,如图2-15所示,其中:

t SYNCSEG =1× t SCL

t TSEG1 = t SCL ×(8×TSEG1.3+4×TSEG1.2+2×TSEG1.0+1)

t TSEG2 = t SCL ×(4×TSEG2.2+2×TSEG2.1+TSEG2.1+1)

式中, t SYNCSEG 为同步段时间。

图2-15 位周期的总体结构

3.输出控制寄存器

输出控制寄存器(OCR)见表2-12,允许由软件控制建立不同输出驱动的配置。在复位模式中此寄存器可被读/写访问。在PeliCAN模式的操作模式中,这个寄存器是只读的;在BasicCAN模式中,该寄存器总是“FFH”。

表2-12 输出控制寄存器(地址8)

当SJA1000在睡眠模式中时,TX0和TX1引脚根据输出控制寄存器的内容输出隐性的电平。在复位状态(复位请求=1)或外部复位引脚 被拉低时,输出TX0和TX1悬空。

发送的输出阶段可以有不同的模式。

(1)正常输出模式

正常模式中位序列(TXD)通过TX0和TX1送出。输出驱动引脚TX0和TX1的电平取决于被OCTPx、OCTNx(悬空、上拉、下拉、推挽)编程的驱动器的特性和被OCPOLx编程的输出端极性。

(2)时钟输出模式

TX0引脚在这个模式中和正常模式中是相同的。然而,TX1上的数据流被发送时钟(TXCLK)取代。发送时钟(非翻转)的上升沿标志着一个位周期的开始。时钟脉冲宽度是1× t SCL

(3)双相输出模式

与正常输出模式相反,这里位的表现形式是时间的变量而且会反复。如果总线控制器被发送器从总线上电流退耦,则位流不允许含有直流成分。这一点由下面的方案实现:在隐性位期间所有输出呈现“无效”(悬空),而显性位交替在TX0和TX1上发送,即第一个显性位在TX0上发送,第二个在TX1上发送,第三个在TX0上发送,以此类推。

(4)测试输出模式

在测试输出模式中,下一次系统时钟的上升沿RX上的电平反映到TXx上,系统时钟( f OSC /2)与输出控制寄存器中编程定义的极性相对应。

4.时钟分频寄存器

时钟分频寄存器(CDR)控制输出给微控制器的CLKOUT频率,它可以使CLKOUT引脚失效。另外,它还控制着TX1上的专用接收中断脉冲、接收比较器旁路和BasicCAN模式与PeliCAN模式的选择。硬件复位后寄存器的默认状态是Motorola模式(0000 0101,12分频)和Intel模式(0000 0000,2分频)。

软件复位(复位请求/复位模式)或总线关闭时,此寄存器不受影响。

保留位(CDR.4)总是0。应用软件应向此位写0,目的是与将来可能使用此位的特性兼容。 VLa67G3Flf/GdDwEFrIjRVEACbuddZUKlYOxYQk/A6SXSpfr9xIGHOWcqoJc2ZBj

点击中间区域
呼出菜单
上一章
目录
下一章
×