logo资料库

Freescale CAN模块用户手册.doc

第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
资料共25页,剩余部分请下载后查看
CAN 模块用户手册 1. 引言 FlexCAN (FC)模块实现控制器局域网络协议(CAN)通信。CAN 是一种用于汽车和工业控 制系统异步通讯协议,是高速(1Mbit/sec)、短时间间隔、基于优先级的协议,能够使用多 种通讯媒介(例如:光缆,非屏蔽线对等)。FlexCAN 模块同时支持 CAN 协议规范 2.0 版、B 部分所规定的标准帧和扩展帧。 CAN 协议主要——但不是仅仅地用于车辆串行总线,面对这样的特殊要求现场:实时处 理、车辆电磁干扰环境的可靠操作、成本效率和需要的带宽等。本文档理论上采用 CAN 协议 2.0 版的一般应用知识。更详细的参见 CAN 协议规范 2.0 版。 2. 功能说明 IP 接口结构。 • 基于并包含所有现有的 TouCAN 模块功能。 • • 完全实现 CAN 协议规范 2.0 — 标准数据和远程帧 (直到 109 位长度) — 扩展数据和远程帧 (直到 127 位长度) — 0—8 字节数据长度。 — 可编程位速率直到 1Mbit/sec。 • 多达 16 个 0—8 字节长度的弹性信息缓存器,各自可以配置为接收或传输,所有的都支 持标准帧和扩展帧。 • 允许单侦听模式。 • 内容相关的寻址。 • 无读/写信号。 • 三个可编程过滤寄存器: — 全局过滤 (用于 MBs 0-13) — MB14 专用 — MB15 专用 • 独立于传输介质(假设使用外部收发器)。 • 开放的网络架构。 • 多主总线。 • 高度抗电磁干扰。 • 高优先级信息短延迟时间。 • 低功耗睡眠模式,可编程 总线活动唤醒。 3. 结构图 图 1:
4. 典型的 CAN 系统图 每个 CAN 站点物理上通过一个收发器连接到 CAN 总线,收发器提供 CAN 总线上通讯所需 的传输驱动、波形,以及接受/比较等功能,还提供保护以预防不良的总线或站点对 FlexCAN 模块造成损坏。 图 2 5. 信息缓存 5.1 信息缓存器结构。 图 3 说明扩展(29-bit) ID 信息缓存器结构;图 4 说明标准(11-bit) ID 信息缓存器 结构。 图 3
5.2 扩展和标准格式帧的公共字段。如表 1: 图 4 表 1:公共字段 描述 字段 TIME STAMP CODE 参见表 2 和表 3 时间戳。装载 CAN 总线上本帧 ID 开始时捕捉的自由运行定时器的高字节值 的拷贝。 LENGTH (接收时) LENGTH (发送时) 存储在缓存器地址偏移量$3 到$6 中的接收到的数据长度。该字段由 FlexCAN 模块填写,拷贝自接收数据的 DLC 字段。万一接收到的 DLC 字段的值超过 8, 则只有前 8 个接收到的数据字节被保存。 位于缓存器地址偏移量$3 到$6 中的待发送数据长度。该字段由器件填写, 用于作为 DLC 字段的值。如果远程传送请求(RTR)=1,本帧作为远程帧,DATA 字段不被传输,从而忽略 LENGTH 的值。 DATA 数据。本字段存储帧数据直到 8 字节。对于接收帧,这些数据作为从总线 上收到的数据存储;对于发送帧,器件提供所需要发送的帧内数据。 Reserved 保留字。该字的整个字段(16Bit)器件不能访问。改字用于内部测试,不允 许以任何方式访问。 表 2:接收缓存器编码 接收新 帧前 0000 0100 0010 0110 0101* 0011* 0111* 描述 NOT ACTIVE:信息缓存未激活 EMPTY:信息缓存有效且是空的 FULL:信息缓存满 OVERRUN:在器件读取第一个信息之前, 第二个信息写入填满的缓存。 BUSY:信息缓冲正在被新接收的帧填写。 这种情形将在 20 周期内清除。 * 对于发送信息缓存,读的时候应忽略 BUSY 位。 新帧收 到后 —— 0010 0110 注释 —— —— 如果器件读取发生在新 帧到来之前,新接收码 是: 0010 0010 填写了空缓存 0110 填写了满缓存 0110 填写了已经溢出的缓存 RTR 初始值 表 3:发送缓存器编码 描述 X 0 1 0 0 1000 信息缓存器没有准备好发送 1100 数据帧无条件传送一次。 1100 远程帧传送一次,并且信息缓冲器转换成数据帧的接收信息缓 存。 1010* 数据帧仅作为远程帧的响应传送。 1110 数据帧无条件传送一次,然后仅作为远程帧的响应。 * 当检测到匹配的远程请求帧,这样的信息缓冲编码变为 1110。 发送 之后 —— 1000 0100 1010 1010
5.3 仅用于扩展模式帧的字段。 字段 表 4:扩展帧 描述 ID[28:18]/[17:15] 包含 14 个扩展标识的最高位,位于信息缓冲区的 ID HIGH 字。 包含一个确定的隐性位,仅用于扩展模式,对于发送缓冲,需将此位 置 1,对于接收帧将按在总线上收到的来保存,该位位于信息缓冲区 (MB)的 ID HIGH 字。如果 FlexCAN 模块发送了一个值,并收到了匹 配的响应,预示着一个成功的位传送。无论如何,如果 FlexCAN 模块 以“1”来传送此位,但却收到它为“0”,预示着失去了仲裁;并且, 如果 FlexCAN 模块以“0”来传送此位,但却收到它为“1”,意味着 发生了 1 个位错误。 如果使用扩展帧,该字段必须设置为“1”,如为“0”,将使用标准帧。 该位位于信息缓冲区(MB)的 ID HIGH 字。 扩展标识符 ID 的位[14:0],位于信息缓冲区(MB)的 ID LOW 字。 该位是信息缓冲区(MB)的 ID LOW 字的最低位(LSB): 0:数据帧; 1:远程帧。 置换远程请求 (SRR) ID 扩展 (IDE) ID[14:0] 远程发送请求 (RTR) 5.4 仅用于标准模式帧的字段。 表 5:标准帧 描述 包含位[28:18],位于信息缓冲区(MB)的 ID HIGH 字。该寄存器的四 个最低位(LSBs)(对应于扩展帧的 IDE 位和 ID[17:15]),必须全部写 为逻辑 0,以确保 FlexCAN 模块的正确操作,图示于第 4 节。 该位是信息缓冲区(MB)的 ID LOW 字的最低位: 0:数据帧; 1:远程帧。 如果 FlexCAN 模块发送了一个值,并收到了匹配的响应,预示着一个 成功的位传送。无论如何,如果 FlexCAN 模块以“1”来传送此位, 但却收到它为“0”,预示着失去了仲裁;并且,如果 FlexCAN 模块以 “0”来传送此位,但却收到它为“1”,意味着发生了 1 个位错误。 16 位时间戳,位于信息缓冲(MB)的 ID LOW 字, 标准帧是不需要的。 在标准信息缓存中,它用于保存自由运行定时器的 16 位值,该定时 器值是 ID 字段开始在 CAN 总线上传输时捕捉的。 字段 ID[28:18] 远程发送请求 (RTR) 16-Bit Time Stamp 6. 功能概述 FlexCAN 模块是弹性的,允许它的 16 个信息缓存(MBs)中的各个分配为传输缓冲或接收 缓冲,各 MB 也可以分配中断标志位,指示传输或接收成功完成。 注:对于所有的过程,准备 MB 的第一个动作应当是通过将它的 CODE 字段设为适当的值将其 变成非活动状态。这个要求是强制性的,以确保正确的操作。 6.1 发送过程 器件通过执行以下的步骤准备或转换为发送 MB: • 写控制/状态字(Control/Status word)保持发送 MB 处于非活动状态(CODE = 1000); • 写入 ID_HIGH 和 ID_LOW 字; • 写入数据字节;
• 写控制/状态字(Control/Status word) (激活码 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/Status word)中的 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/Status word)保持接收寄存器为非活动状态(CODE = 0000); • 写入 ID_HIGH 和 ID_LOW 字; • 写控制/状态字(Control/Status word)指明该 MB 为活动的和空的(CODE = 0100)。 注:第一步和最后一步是强制性的。 从最后一步开始,该 MB 是一个活动的接收缓冲器,并参加内部的匹配过程,发生在每 次收到无误的帧。在此过程中,所有的活动的接收寄存器将自己的 ID 与更新的接收的 ID 相比较,如果发生了匹配事件,该帧将传送(移进)至第一个(最低入口)匹配的 MB。自由运 行定时器的值(捕捉于 IDENTIFIER 字段开始在 CAN 总线上传输时的时刻),写入 MB 的 TIME_STAMP 字段。ID 字段、DATA 字段(最多 8 字节)、以及 LENGTH 接着被存入,CODE 字段 被更新,以及,中断标志寄存器(FCIFLAG1)中的一个 BUFnnI 标志置位。 器件应当按照以下的方法从 MB 中读取接收的帧: • 控制/状态字(Control/Status word) (必须的,激活本缓存的内部锁定); • • • 自由运行定时器(释放内部锁定——可选)。 ID(可选——仅当使用屏蔽时才是必要地); DATA 字段的字; 对于自由运行定时器的读取不是必须的,如果没有执行,该 MB 将保持锁定,除非器件 开始了读取另一个 MB 的过程。 注:在任何时刻仅有单个 MB 是锁定的。 唯一必须的器件操作是读控制/状态字(Control/Status word),以确保数据的一致性。 如果 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/Status word)的写访问会解除 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/Status word),并搜索活动接收码,如果 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/Status word)的任何写访问都将 立即解除其活动,从而从发送进程中移除。 • 如果一个信息开始从发送缓冲移入 SMB 时该 MB 被解除活动,本条信息将不会发送。 • 如果一个信息从发送缓冲移入 SMB 之后该 MB 被解除活动,信息会被发送,但不会产生 中断,TX CODE 也不会更新。 • 如果一条拥有最低优先级的信息正在内部接受发送仲裁,其 MB 被解除活动,则信息不
被发出。 6.3.3 解除接收信息缓冲的活动。 当选择一个 MB 来接收时,对其控制/状态字(Control/Status word)的任何写访问都将 立即解除其活动,从而从接收进程中移除。 • 如果一个信息开始移入时该 MB 被解除活动,传输将被终止并且不会申告中断。如果发 生了这样的情况,接收 MB 中可能保存着两个不同帧的混合数据。 警告:绝对不要把数据写入接收 MB。如果信息正从 SMB 传入时这样做,控制/状态字表 现为填满(FULL)或溢出(OVER RUN)的情形,但不请求中断。这个动作绝对禁止! 6.4 锁定/释放/忙碌机构以及 SMB 的用法。 该机构的执行用于在接收和发送两个进程中确保数据的一致性。该机构包含 FlexCAN 模块内部的一个 MB 和两个 SMB 的缓冲帧传输的锁定状态(Lock Status)。 • 器件读取 MB 的控制/状态字(Control/Status word)时触发该 MB 的锁定,也就是说一个 新的与该 MB 匹配的接收帧不能写入该 MB。 • 为了释放一个锁定的 MB,器件可以通过读取控制/状态字的方式锁定另一个 MB,或者通 过读取自由运行定时器全局释放所有的锁定 MB。 • 若一个 MB 被锁定时,收到了匹配的接收帧,则此帧不能存入该 MB,保留在 SMB 中,这 种情形没有指示。 • 若一个 MB 被锁定时,收到了两个或更多的匹配接收帧,则最后收到的一个保留在 SMB 中,同时先期接收的丢失,这种情形没有指示。 • 如果锁定的 MB 释放,SMB 中又存在有匹配的帧,则该帧传送到匹配的 MB。 • 如果器件在 SMB 正在向接收 MB 传输时读取该 MB,控制/状态字的 BUSY CODE 位置位,为 保证数据的一致性,器件需要等到该位清零,这时该 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 相位段(PSEG1 and PSEG2),以及同步跳跃宽度(RJW)都通过 FCCTL0 和 FCCTL1 寄存器来编程,参见 8.2 和 8.3 节。同样,FlexCAN 维护一个预分频(PRES_DIV)值,以确定系统时钟和 SCLOCK、当前时 间元之间的比率。 表 6: System Clock/CAN Bit-Rate/S-Clock 举例 系统时钟频 率 (Mhz) Can 位速率 (Mhz) 60 56 54 50 60 1 1 1 1 0.125 允许的 S-Clock 频率 (Mhz) 20, 15, 12, 10 14, 8 18, 9 25, 10 3, 2.5, 2, 1.875, 1.5, 1.25, 1 允许的时间 元/位数量 预分频器编 程值 + 1 注释 20, 15, 12, 10 14, 8 18, 9 25, 10 24, 20, 16, 15, 12, 10, 8 3, 4, 5, 6 4, 7 3, 6 2, 5 20, 24, 30, 32 40, 48, 60 最少 8 个、最 多 25 个元时 间 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 个系统时钟,否则不能保证正确操作。
分享到:
收藏