Freescale CAN模块用户手册.docx

上传人:b****8 文档编号:9377437 上传时间:2023-02-04 格式:DOCX 页数:42 大小:884.03KB
下载 相关 举报
Freescale CAN模块用户手册.docx_第1页
第1页 / 共42页
Freescale CAN模块用户手册.docx_第2页
第2页 / 共42页
Freescale CAN模块用户手册.docx_第3页
第3页 / 共42页
Freescale CAN模块用户手册.docx_第4页
第4页 / 共42页
Freescale CAN模块用户手册.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

Freescale CAN模块用户手册.docx

《Freescale CAN模块用户手册.docx》由会员分享,可在线阅读,更多相关《Freescale CAN模块用户手册.docx(42页珍藏版)》请在冰豆网上搜索。

Freescale CAN模块用户手册.docx

FreescaleCAN模块用户手册

CAN模块用户手册

1.引言

FlexCAN(FC)模块实现控制器局域网络协议(CAN)通信。

CAN是一种用于汽车和工业控制系统异步通讯协议,是高速(1Mbit/sec)、短时间间隔、基于优先级的协议,能够使用多种通讯媒介(例如:

光缆,非屏蔽线对等)。

FlexCAN模块同时支持CAN协议规范2.0版、B部分所规定的标准帧和扩展帧。

CAN协议主要——但不是仅仅地用于车辆串行总线,面对这样的特殊要求现场:

实时处理、车辆电磁干扰环境的可靠操作、成本效率和需要的带宽等。

本文档理论上采用CAN协议2.0版的一般应用知识。

更详细的参见CAN协议规范2.0版。

2.功能说明

•基于并包含所有现有的TouCAN模块功能。

•IP接口结构。

•完全实现CAN协议规范2.0

—标准数据和远程帧(直到109位长度)

—扩展数据和远程帧(直到127位长度)

—0—8字节数据长度。

—可编程位速率直到1Mbit/sec。

•多达16个0—8字节长度的弹性信息缓存器,各自可以配置为接收或传输,所有的都支持标准帧和扩展帧。

•允许单侦听模式。

•内容相关的寻址。

•无读/写信号。

•三个可编程过滤寄存器:

—全局过滤(用于MBs0-13)

—MB14专用

—MB15专用

•独立于传输介质(假设使用外部收发器)。

•开放的网络架构。

多主总线。

•高度抗电磁干扰。

•高优先级信息短延迟时间。

•低功耗睡眠模式,可编程

总线活动唤醒。

3.结构图

 

图1:

4.典型的CAN系统图

 

图2

每个CAN站点物理上通过一个收发器连接到CAN总线,收发器提供CAN总线上通讯所需的传输驱动、波形,以及接受/比较等功能,还提供保护以预防不良的总线或站点对FlexCAN模块造成损坏。

5.信息缓存

1

2

3

4

5

5.1信息缓存器结构。

图3说明扩展(29-bit)ID信息缓存器结构;图4说明标准(11-bit)ID信息缓存器结构。

 

图3

 

图4

5.2扩展和标准格式帧的公共字段。

如表1:

表1:

公共字段

字段

描述

TIME

STAMP

时间戳。

装载CAN总线上本帧ID开始时捕捉的自由运行定时器的高字节值的拷贝。

CODE

参见表2和表3

LENGTH

(接收时)

存储在缓存器地址偏移量$3到$6中的接收到的数据长度。

该字段由FlexCAN模块填写,拷贝自接收数据的DLC字段。

万一接收到的DLC字段的值超过8,则只有前8个接收到的数据字节被保存。

LENGTH

(发送时)

位于缓存器地址偏移量$3到$6中的待发送数据长度。

该字段由器件填写,用于作为DLC字段的值。

如果远程传送请求(RTR)=1,本帧作为远程帧,DATA字段不被传输,从而忽略LENGTH的值。

DATA

数据。

本字段存储帧数据直到8字节。

对于接收帧,这些数据作为从总线上收到的数据存储;对于发送帧,器件提供所需要发送的帧内数据。

Reserved

保留字。

该字的整个字段(16Bit)器件不能访问。

改字用于内部测试,不允许以任何方式访问。

表2:

接收缓存器编码

接收新帧前

描述

新帧收到后

注释

0000

NOTACTIVE:

信息缓存未激活

——

——

0100

EMPTY:

信息缓存有效且是空的

0010

——

0010

FULL:

信息缓存满

0110

如果器件读取发生在新帧到来之前,新接收码是:

0010

0110

OVERRUN:

在器件读取第一个信息之前,第二个信息写入填满的缓存。

0101*

BUSY:

信息缓冲正在被新接收的帧填写。

这种情形将在20周期内清除。

0010

填写了空缓存

0011*

0110

填写了满缓存

0111*

0110

填写了已经溢出的缓存

*对于发送信息缓存,读的时候应忽略BUSY位。

表3:

发送缓存器编码

RTR

初始值

描述

发送之后

X

1000

信息缓存器没有准备好发送

——

0

1100

数据帧无条件传送一次。

1000

1

1100

远程帧传送一次,并且信息缓冲器转换成数据帧的接收信息缓存。

0100

0

1010*

数据帧仅作为远程帧的响应传送。

1010

0

1110

数据帧无条件传送一次,然后仅作为远程帧的响应。

1010

*当检测到匹配的远程请求帧,这样的信息缓冲编码变为1110。

 

5.3仅用于扩展模式帧的字段。

表4:

扩展帧

字段

描述

ID[28:

18]/[17:

15]

包含14个扩展标识的最高位,位于信息缓冲区的IDHIGH字。

置换远程请求

(SRR)

包含一个确定的隐性位,仅用于扩展模式,对于发送缓冲,需将此位置1,对于接收帧将按在总线上收到的来保存,该位位于信息缓冲区(MB)的IDHIGH字。

如果FlexCAN模块发送了一个值,并收到了匹配的响应,预示着一个成功的位传送。

无论如何,如果FlexCAN模块以“1”来传送此位,但却收到它为“0”,预示着失去了仲裁;并且,如果FlexCAN模块以“0”来传送此位,但却收到它为“1”,意味着发生了1个位错误。

ID扩展

(IDE)

如果使用扩展帧,该字段必须设置为“1”,如为“0”,将使用标准帧。

该位位于信息缓冲区(MB)的IDHIGH字。

ID[14:

0]

扩展标识符ID的位[14:

0],位于信息缓冲区(MB)的IDLOW字。

远程发送请求(RTR)

该位是信息缓冲区(MB)的IDLOW字的最低位(LSB):

0:

数据帧;

1:

远程帧。

5.4仅用于标准模式帧的字段。

表5:

标准帧

字段

描述

ID[28:

18]

包含位[28:

18],位于信息缓冲区(MB)的IDHIGH字。

该寄存器的四个最低位(LSBs)(对应于扩展帧的IDE位和ID[17:

15]),必须全部写为逻辑0,以确保FlexCAN模块的正确操作,图示于第4节。

远程发送请求(RTR)

该位是信息缓冲区(MB)的IDLOW字的最低位:

0:

数据帧;

1:

远程帧。

如果FlexCAN模块发送了一个值,并收到了匹配的响应,预示着一个成功的位传送。

无论如何,如果FlexCAN模块以“1”来传送此位,但却收到它为“0”,预示着失去了仲裁;并且,如果FlexCAN模块以“0”来传送此位,但却收到它为“1”,意味着发生了1个位错误。

16-BitTimeStamp

16位时间戳,位于信息缓冲(MB)的IDLOW字,标准帧是不需要的。

在标准信息缓存中,它用于保存自由运行定时器的16位值,该定时器值是ID字段开始在CAN总线上传输时捕捉的。

6.功能概述

FlexCAN模块是弹性的,允许它的16个信息缓存(MBs)中的各个分配为传输缓冲或接收缓冲,各MB也可以分配中断标志位,指示传输或接收成功完成。

注:

对于所有的过程,准备MB的第一个动作应当是通过将它的CODE字段设为适当的值将其变成非活动状态。

这个要求是强制性的,以确保正确的操作。

6

6.1发送过程

器件通过执行以下的步骤准备或转换为发送MB:

•写控制/状态字(Control/Statusword)保持发送MB处于非活动状态(CODE=1000);

•写入ID_HIGH和ID_LOW字;

•写入数据字节;

•写控制/状态字(Control/Statusword)(激活码CODE,LENGTH)

注:

第一和最后一步是强制性的。

从最后一步开始,该MB将参加内部仲裁过程,该过程发生在每次接收,或帧间时隙,检测到CAN总线空闲以及至少一个MB准备发送。

内部仲裁旨在选择下一个发送的MB。

当该过程结束传输仲裁胜出的MB帧将传送至串行信息缓存(SMB,参见6.3.1节)以发送(传出)。

发送过程中,FlexCAN模块传输多达8字节的DATA字段,即使LENGTH字段得值更大。

(当LENGTH>8,传输的帧中DLC=8)

在成功传输结束后:

•自由运行定时器的值(ID字段开始在CAN总线上传输时捕捉的)写入MB的TIME_STAMP字段。

•MB控制/状态字(Control/Statusword)中的CODE字段更新。

•中断标志寄存器的某状态标志置位(FCIFLAG1,8.12节)。

6.1.1传输中断。

如果对应的FCIMASK1位置位,每个MB都可以成为中断源。

对于特定的MB,接收和发送中断并没有区别。

更多关于FCIMASK1和中断的信息参见第8.11、8.12和第9节。

6.1.2传输轮询。

如果使用软件轮询来发送,必须读FCIFLAG1寄存器来确定发送状态。

警告:

不要通过读MB的控制状态字来确定发送状态,因为这个程序将导致此MB锁定。

更多信息参见8.12节FCIFLAG1寄存器。

6.2接收过程。

器件通过执行以下的步骤准备或转换为接收MB:

•写MB的控制/状态字(Control/Statusword)保持接收寄存器为非活动状态(CODE=0000);

•写入ID_HIGH和ID_LOW字;

•写控制/状态字(Control/Statusword)指明该MB为活动的和空的(CODE=0100)。

注:

第一步和最后一步是强制性的。

从最后一步开始,该MB是一个活动的接收缓冲器,并参加内部的匹配过程,发生在每次收到无误的帧。

在此过程中,所有的活动的接收寄存器将自己的ID与更新的接收的ID相比较,如果发生了匹配事件,该帧将传送(移进)至第一个(最低入口)匹配的MB。

自由运行定时器的值(捕捉于IDENTIFIER字段开始在CAN总线上传输时的时刻),写入MB的TIME_STAMP字段。

ID字段、DATA字段(最多8字节)、以及LENGTH接着被存入,CODE字段被更新,以及,中断标志寄存器(FCIFLAG1)中的一个BUFnnI标志置位。

器件应当按照以下的方法从MB中读取接收的帧:

•控制/状态字(Control/Statusword)(必须的,激活本缓存的内部锁定);

•ID(可选——仅当使用屏蔽时才是必要地);

•DATA字段的字;

•自由运行定时器(释放内部锁定——可选)。

对于自由运行定时器的读取不是必须的,如果没有执行,该MB将保持锁定,除非器件开始了读取另一个MB的过程。

注:

在任何时刻仅有单个MB是锁定的。

唯一必须的器件操作是读控制/状态字(Control/Statusword),以确保数据的一致性。

如果BUSY位置位,器件需要推迟操作直到此位清零。

注:

接收到的IDENTIFIER字段总是存储在匹配的MB中,因此MB中ID字段的内容可能由MASK导致改变。

注:

如果数据字节数是奇数(如LENGTH字段指示),则最后一字节将被重复以填充16位的字。

接受的全部数据字段在移进时写入,故此如果接受的字节数少于8,未使用的字节不会保持它们以前的值。

6.2.1接收中断。

如果对应的FCIMASK1位置位,每个MB都可以成为中断源。

对于特定的MB,接收和发送中断并没有区别。

更多关于FCIMASK1和中断的信息参见第8.11、8.12和第9节。

6.2.2接收轮询。

如果使用软件来进行接收轮询,必须读FCIFLAG1寄存器来确定发送状态。

警告:

不要通过读MB的控制状态字来确定接收状态,因为这个过程将导致此MB锁定。

更多信息参见8.12节FCIFLAG1寄存器。

6.2.3自接收的帧。

如果匹配的接收MB存在,FlexCAN模块收到自己发送的帧。

6.3信息缓冲管理。

为维护数据的一致性和正确的FlexCAN操作,器件必须遵从6.1和3.2节所列的规则。

解除MB活动是一个核心动作,导致MB拒绝来自FlexCAN的发送和接收过程。

任何对MB结构的控制/状态字(Control/Statusword)的写访问会解除MB活动,该过程使其排斥收/发进程。

任何形式的FlexCAN模块内部的MB访问(不同于6.1和6.2节指明的)将导致FlexCAN模块不可预知的行为。

匹配/仲裁过程仅在一个周期期间由FlexCAN模块来完成。

一旦确定了胜出或匹配,就没有任何的重新评估动作,以保证接收帧不会丢失。

如果在FlexCAN扫描第二个之后解除了匹配的MB的活动,则两个或更多的接收MB对接收帧持有匹配的ID也不能确保接收。

假设MB0和MB1被设置为接收匹配同一个ID的帧,最低号数的MB(MB0)对接收信息具有优先权,如果收到了匹配的ID,将移入MB0。

但如果MB0被锁定,信息将逗留在串行信息缓冲区(SMB),如6.3.1节讨论的那样,如果MB0在第1次扫描MB1后被解除活动,则移动操作不能确保。

在扫描过程中,FlexCAN模块将读取每个MB的控制/状态字(Control/Statusword),并搜索活动接收码,如果ID_HIGH字显示该MB配置为接收扩展帧,FlexCAN模块将检查ID_LOW,否则它将访问下一个控制/状态字。

这次FlexCAN将在扫描MB0后找到一次匹配,但它并不就此退出扫描,因为MB0被锁定,它将去向MB1。

它也将发现MB1活动并且与ID匹配,但优先级较低,从而数据没有被存储。

因此如果在扫描MB1后故意解除MB0的活动,在扫描过程的最后,FlexCAN将找不到数据移入的有效MB。

6.3.1串行信息缓存(SMBs)

为了对信息进行双重缓冲,FlexCAN模块有两个影子缓存,称为串行信息缓存(SMBs)。

这两个缓存由FlexCAN模块用来保存接收和发送的两个信息。

在同一时刻,仅有一个SMB是活动的,其功能取决于FlexCAN模块在那一时刻的操作。

这两个缓冲的任何一个在任何时间都是不可访问的或不可见的。

6.3.2解除发送信息缓冲的活动。

当选择一个MB来发送时,对其控制/状态字(Control/Statusword)的任何写访问都将立即解除其活动,从而从发送进程中移除。

•如果一个信息开始从发送缓冲移入SMB时该MB被解除活动,本条信息将不会发送。

•如果一个信息从发送缓冲移入SMB之后该MB被解除活动,信息会被发送,但不会产生中断,TXCODE也不会更新。

•如果一条拥有最低优先级的信息正在内部接受发送仲裁,其MB被解除活动,则信息不被发出。

6.3.3解除接收信息缓冲的活动。

当选择一个MB来接收时,对其控制/状态字(Control/Statusword)的任何写访问都将立即解除其活动,从而从接收进程中移除。

•如果一个信息开始移入时该MB被解除活动,传输将被终止并且不会申告中断。

如果发生了这样的情况,接收MB中可能保存着两个不同帧的混合数据。

警告:

绝对不要把数据写入接收MB。

如果信息正从SMB传入时这样做,控制/状态字表现为填满(FULL)或溢出(OVERRUN)的情形,但不请求中断。

这个动作绝对禁止!

6.4锁定/释放/忙碌机构以及SMB的用法。

该机构的执行用于在接收和发送两个进程中确保数据的一致性。

该机构包含FlexCAN模块内部的一个MB和两个SMB的缓冲帧传输的锁定状态(LockStatus)。

•器件读取MB的控制/状态字(Control/Statusword)时触发该MB的锁定,也就是说一个新的与该MB匹配的接收帧不能写入该MB。

•为了释放一个锁定的MB,器件可以通过读取控制/状态字的方式锁定另一个MB,或者通过读取自由运行定时器全局释放所有的锁定MB。

•若一个MB被锁定时,收到了匹配的接收帧,则此帧不能存入该MB,保留在SMB中,这种情形没有指示。

•若一个MB被锁定时,收到了两个或更多的匹配接收帧,则最后收到的一个保留在SMB中,同时先期接收的丢失,这种情形没有指示。

•如果锁定的MB释放,SMB中又存在有匹配的帧,则该帧传送到匹配的MB。

•如果器件在SMB正在向接收MB传输时读取该MB,控制/状态字的BUSYCODE位置位,为保证数据的一致性,器件需要等到该位清零,这时该MB没有锁定,才能进一步读取。

•如果器件解除一个锁定MB的活动,其锁定状态清除,但没有数据传入该MB。

6.5远程帧。

远程帧是发送去请求数据帧的信息帧。

FlexCAN模块能够配置为自动发送数据帧来响应远程帧,或者发送远程帧然后等待接收应答的数据帧。

当发送一个远程帧:

•初始化一个MB作为发送MB,并将远程发送请求(RTR)位置1。

一旦此远程帧被成功发送,该发送MB自动成为带有同样ID的接收MB。

当FlexCAN模块接收到一个远程帧:

•远程帧ID与所有CODE字段编程为1010的发送MB的ID进行比较;

•如果有一个ID精确匹配的MB,其中的数据帧被发送;

•如果匹配的发送MB中的RTR位置位,FlexCAN模块传输一个远程帧作为响应。

接收的远程帧并不存放在接收MB中,它仅仅用于触发自动应答。

屏蔽寄存器不用于远程帧ID的匹配。

新来接收帧的所有ID位(除RTR)必须匹配远程帧,以触发应答发送。

在远程帧已收到并匹配发送MB的情况下,该MB立即进入内部仲裁进程,但仅仅作为一个没有高优先级的普通发送MB。

6.6过载帧。

除非CAN总线上检测到特定的条件,过载帧不由FlexCAN模块发起,这些条件包括:

•在间隔的第1或第2位检测到一个显性位;

•在接收帧的帧结束(EOF)字段的第7(最后)位检测到显性位。

•在错误帧或过载帧定界符的第8位(最后)检测到显性位。

6.7时间戳。

这个数值采样于ID字段开始在CAN总线上时的16位自由运行定时计数器。

•对于接收到的信息,时间戳在信息写入缓冲的时刻存储到接收MB的TIME_STAMP字段。

对于发送帧,一旦发送正确完成,TIME_STAMP字段会被写入发送MB。

自由运行定时器可以在一条信息接收进MB0时复位。

这项功能允许实现网络时间同步。

参见8.21节中FCCTL0寄存器的TSYNC位。

6.8单侦听模式。

单侦听模式下,FlexCAN模块能够接收另一个站点的接收信息应答。

无论何时模块进入该模式后,错误计数器冻结,FlexCAN模块在错误被动模式下运行。

错误和状态寄存器的故障限制位指示被动错误,而不考虑错误计数器的值。

因为该模式下,模块不影响CAN总线,器件能够履行监视器的功能,或者自动位速率测试。

不论如何,FlexCAN将仅仅监视有效的传输而不会导致错误。

这要求总线上的另一个CAN模块提供应答(ACK)位以完成传送。

一旦设定到这种模式,FlexCAN模块等待进入传输间隔、被动错误、总线关闭或空闲状态。

在等待周期内,FlexCAN模块等待进入此模式之前的所有内部活动的完成,不同于作为CAN总线接口的行为。

6.9位定时。

FlexCAN模块支持以多种方式设置CAN协议要求的位定时参数。

有两个16为寄存器(FCCTL0和FCCTL1)来确定位定时参数各个字段的值。

传播段(PROPSEG),1/2相位段(PSEG1andPSEG2),以及同步跳跃宽度(RJW)都通过FCCTL0和FCCTL1寄存器来编程,参见8.2和8.3节。

同样,FlexCAN维护一个预分频(PRES_DIV)值,以确定系统时钟和SCLOCK、当前时间元之间的比率。

表6:

SystemClock/CANBit-Rate/S-Clock举例

系统时钟频率(Mhz)

Can位速率

(Mhz)

允许的S-Clock频率

(Mhz)

允许的时间元/位数量

预分频器编程值+1

注释

60

1

20,15,12,10

20,15,12,10

3,4,5,6

最少8个、最多25个元时间

56

1

14,8

14,8

4,7

54

1

18,9

18,9

3,6

50

1

25,10

25,10

2,5

60

0.125

3,2.5,2,1.875,

1.5,1.25,1

24,20,16,15,12,

10,8

20,24,30,32

40,48,60

6.9.1配置FlexCAN模块位定时。

位定时的详细内容参考CAN通讯协议2.0规范。

编程位定时功能时必须注意以下的考虑:

•如果编程后的PRES_DIV值导致每时间元一个系统时钟,FCCTL1寄存器的PSEG2字段必须编程为0。

•如果编程后的PRES_DIV值导致每时间元一个系统时钟,信息处理时间(IPT)等于3个时间元,要不它等于两个时间元。

如果PSEG2=2,FlexCAN模块传输时相对于同步段推迟一个时间元。

•如果遇到下面两个条件,相对发送更早的帧起始SOF信号的节点,FlexCAN模块可能不能够及时准备一个MB来开始自身的发送与仲裁。

—当预分频器和位定时控制字段编程到某个值,导致一个CAN位时间小于十个系统时钟周期,并且,

—CAN总线负载率为100%,任何时候其它节点的帧起始(SOF)符号上升沿的发送发生在信息间隔的三位期间;

—FlexCAN模块位时间必须编程为大于或等于9个系统时钟,否则不能保证正确操作。

6.9.2FlexCAN初始化/复位顺序。

FlexCAN模块按两种方法复位:

a.使用系统复位线硬件复位

b.在FCMCR中声明SOFT_RST软复位

下面是复位的反面,FlexCAN模块不与CAN总线同步,FCMCR寄存器的HALT和FRZ1位置位。

其主要控制禁止,FCMCR的FREEZ_ACK和NOT_RDY位置位,FlexCAN模块的CANTX引脚处于隐性状态,不发起帧发送,也不从CAN总线上接收任何帧。

SOFT_RESET或硬件复位后,MB的内容不作改变。

通过FCMCR寄存器申告HALT位或复位改变或初始化FlexCAN模块,使之来冻结,需要进行所有的配置,参见7.1节。

以下是FlexCAN模块可用的一般初始化顺序。

•初始化所有操作模式:

—位定时参数:

PROPSEG,PSEG1,PSEG2,RJW(FCCTL0和FCCTL1寄存器);

—通过编程FCCTL1寄存器的PRES_DIV字段来确定位速率;

—确定内部仲裁模式(FCCTL0寄存器的LBUF位)。

•初始化信息缓存(MBs):

—所有的MB的控制/状态字必须作为活动或非活动写入;

—MB的其它项目必须按要求初始化。

•初始化必要的MASK寄存器以允许接收屏蔽:

—按要求设置FCIMASK1寄存器中的BUFnnI位(所有MB),FCCTL0中的Busoff和Error中断,FCMCR中的唤醒(Wake)中断。

•初始化FlexCAN的中断管理程序:

•清除FCMCR的HALT位:

—从这个事件开始,FlexCAN模块开始尝试与CAN总线同步。

7.特殊操作模式

7

7.1调试模式。

调试模式由FRZ1授权。

假设FRZ1=1,当HALT置位时进入调试模式。

一旦设置为这种模式,FlexCAN等待成为间断、被动错误、总线关闭或空闲状态。

当处于这些状态其中之一时,FlexCAN等待内部的这些动作完成,另外相对于从前CAN总线接口发生了以下事件:

•FlexCAN模块停止收/发信息帧;

•预分频器停止,导致所有相关行为停止;

•允许器件读出或写入错误计数寄存器;

•FlexCAN模块忽略其CAN_RX引脚的输入,驱动该引线为隐性;

•FlexCAN模块与总线失去同步,FCMCR的NOT_RDY和FREEZ_ACK位置位。

申告调试模式配置位后,执行下一步动作之前等待FCMCR中的FREEZ_ACK位被置位。

警告:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1