Freescale CAN模块用户手册Word文档下载推荐.docx
《Freescale CAN模块用户手册Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Freescale CAN模块用户手册Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。
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个接收到的数据字节被保存。
(发送时)
位于缓存器地址偏移量$3到$6中的待发送数据长度。
该字段由器件填写,用于作为DLC字段的值。
如果远程传送请求(RTR)=1,本帧作为远程帧,DATA字段不被传输,从而忽略LENGTH的值。
DATA
数据。
本字段存储帧数据直到8字节。
对于接收帧,这些数据作为从总线上收到的数据存储;
对于发送帧,器件提供所需要发送的帧内数据。
Reserved
保留字。
该字的整个字段(16Bit)器件不能访问。
改字用于内部测试,不允许以任何方式访问。
表2:
接收缓存器编码
接收新帧前
新帧收到后
注释
0000
NOTACTIVE:
信息缓存未激活
——
0100
EMPTY:
信息缓存有效且是空的
0010
FULL:
信息缓存满
0110
如果器件读取发生在新帧到来之前,新接收码是:
0010
OVERRUN:
在器件读取第一个信息之前,第二个信息写入填满的缓存。
0101*
BUSY:
信息缓冲正在被新接收的帧填写。
这种情形将在20周期内清除。
填写了空缓存
0011*
填写了满缓存
0111*
填写了已经溢出的缓存
*对于发送信息缓存,读的时候应忽略BUSY位。
表3:
发送缓存器编码
RTR
初始值
发送之后
X
1000
信息缓存器没有准备好发送
1100
数据帧无条件传送一次。
远程帧传送一次,并且信息缓冲器转换成数据帧的接收信息缓存。
1010*
数据帧仅作为远程帧的响应传送。
1010
1110
数据帧无条件传送一次,然后仅作为远程帧的响应。
*当检测到匹配的远程请求帧,这样的信息缓冲编码变为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:
标准帧
18]
包含位[28:
18],位于信息缓冲区(MB)的IDHIGH字。
该寄存器的四个最低位(LSBs)(对应于扩展帧的IDE位和ID[17:
15]),必须全部写为逻辑0,以确保FlexCAN模块的正确操作,图示于第4节。
该位是信息缓冲区(MB)的IDLOW字的最低位:
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);
•写控制/状态字(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接收中断。
6.2.2接收轮询。
如果使用软件来进行接收轮询,必须读FCIFLAG1寄存器来确定发送状态。
不要通过读MB的控制状态字来确定接收状态,因为这个过程将导致此MB锁定。
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频率
允许的时间元/位数量
预分频器编程值+1
60
20,15,12,10
3,4,5,6
最少8个、最多25个元时间
56
14,8
4,7
54
18,9
3,6
50
25,10
2,5
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位被置位。
疏