C_CAN用户手册V1.22000-6-611.关于本文1.1变化1.1.1目前状态1.2版1.1.2历史1.2约定本手册使用下列约定粗体位和信号的名称斜体位和信号的状态1.3范围本文从应用编程者的角度描述C_CAN模块。1.4术语和缩写项目意义CAN现场控制总线BSP位流处理器BTL位定时逻辑CRC循环冗余校验DLC数据长度编码EML错误管理逻辑FSM有限状态机TTCAN时间触发的CAN22.功能描述2.1功能概述C_CAN是可以作为一个单独器件或集成ASIC一部分的CAN模块。它可以被描述为一个可以综合的RTL级的VHDL。其部件包括(见图1)CAN内核、报文RAM、报文处理器、控制寄存器和模块接口。CAN内核符合CAN2.0A和CAN2.0B协议规范。在使用中,位速率可以被编程达到1Mbit/S。物理层的连接需要另外的硬件发送器。在一个CAN网络的通讯中,要配置每个报文对象。接收的报文对象的标识符屏蔽存储于报文RAM中。所有关于处理报文的功能在报文处理器中使用。这些功能为:报文过滤、报文在CAN内核和报文RAM之间的传递、处理发送请求以及产生的模块中断。C_CAN的寄存器组可以通过模块接口由外部CPU直接访问。这些寄存器是用于控制/配置CAN内核和报文处理器,并访问报文RAM。C_CAN模块接口可以容易地定制,与用户接口替换。C_CAN实现如下特性:·支持CAN2.0A和CAN2.0B·波特率达到1Mbit/s·32个报文对象·每个报文对象具有自己的标识符屏蔽·可编程的FIFO模式(报文串联)·可屏蔽中断·时间触发的CAN应用禁用自动重传模式·自测试模式下的可编程的环路返回功能·8位非复用的MotorolaHC08兼容接口·对ARM,有两个16位的AMBAAPB总线接口32.2框图本设计包括下列功能块(见图1):CAN内核CAN协议控制器和用于报文串并转换的Rx/Tx移位寄存器报文RAM存储报文对象和标识符屏蔽寄存器用于控制和配置C_CAN模块的寄存器报文处理器作为一个状态机,用于控制CAN内核中的Tx/Rx移位寄存器与报文RAM之间的数据传递。还用于产生由控制与配置寄存器编程的中断。模块接口到目前为止,C_CAN提供3种接口。一个8位MotorolaHC08控制器和两个ARMAMBAAPB接口。它们可以很容易地为用户定义的接口替代。42.3工作模式2.3.1软件初始化启动软件初始化可以通过置位CAN控制寄存器中的Init位,也可以用软件或硬件复位,或者进入总线关闭(Bus_Off)。当Init置位时,所有往来于CAN总线上的报文将停止,CAN总线的CAN_TX的状态为隐性(高)。EML的计数器不变。置位Init不改变任何配置寄存器。初始化CAN控制器,必须设置位定时寄存器和每一个报文对象。如果不需要报文对象,只要将其MsgVal设为无效即可。否则就应该对完整的报文对象进行初始化。当CAN控制寄存器的Init和CCE均被置位时,才可以配置位定时寄存器和BRP扩展寄存器。再次复位Init位(仅由CPU)将结束软件初始化。在得到总线控制权以及发送报文之前,位流处理器BSP(见4.10节)将等待11个连续的隐性位(=总线空闲),以便与CAN总线的发送器同步。对报文对象的初始化并不依赖Init位可以自由进行。但是,在位流处理器(BSP)启动报文发送器之前应该对报文对象的每个特定的标识符作出配置或设为无效。如果在正常操作下改变报文对象的配置,CPU必须设置MsgVal位为无效。配置完成后,要将MsgVal设为有效。2.3.2CAN报文发送一旦C_CAN初始化完成,Init被设置为0,C_CAN的CAN内核将自身与CAN总线同步,并启动报文发送。如果通过了报文处理器的验收滤波器,接收到的报文被储存到对应的报文对象中。全部的报文,包括所有的仲裁位、DLC和8个数据字节被存入报文对象。如果使用了标识符屏蔽,被标明“无关”(don’tcare)的仲裁位将被报文对象覆盖。CPU通过IFx接口寄存器读写每个报文。在并发操作中,报文处理器保证了数据的完成性。报文的传输通过CPU控制。如果报文中存在永久报文(在配置时设定了仲裁位和控制位),只要数据字节被更新然后将TxRqst/NewDat位置位就可以启动传输。如果几条报文分配给了相同的报文对象(当报文对象不充足时),整个报文对象必须在该报文的发送请求发出前重新配置。任意数量的报文对象可以在同一时间发送请求,然后按照他们内部的优先级传输。可以在任意时间更新报文或将报文设成无效,即使它们的请求还在挂起。在挂起的传输请求开始前,更新报文,那么旧的数据将被丢弃。按照对报文对象的配置,报文对象接收到一个匹配标识符的远程帧,可以自动请求发送。52.3.3禁止自动再传输按照CAN规范(见ISO11898,6.3.3),对于失去了仲裁或被传输错误干扰的帧,C_CAN提供了自动再次传输的机制。在传输成功结束之前,用户并不能确定帧传输的情况。缺省情况下,自动重新发送是使能的。当C_CAN工作在时间触发的CAN环境(TTCAN,见ISO11898-1)时,也可以取消自动重传机制。将CAN控制寄存器的DAR位置为1,就可以禁止的自动重新发送模式。在这种操作模式下,编程者必须考虑控制寄存器中TxRqst和NewDat位的不同行为:·当一次传输开始时,各自的报文缓冲器的TxRqst位被复位,而NewDat位则仍然置位。·当传输成功结束后,NewDat复位。当一个传输失败(失去仲裁或错误),NewDat位仍然置位。为了再次开始传输,CPU必须将TxRqst置1。2.3.4测试模式将CAN控制寄存器的Test位置位将进入测试模式。在测试模式下,测试寄存器的Tx1,Tx0,Lback,Silent和Basic位可写。Rx位监视CAN_RX引脚的状态因而是唯一可读的。当Test位被复位时,所有的测试寄存器的功能均被禁止。2.3.5静音模式通过设置测试寄存器的Silent位为1,可以使CAN内核进入静音模式。在静音模式下,C_CAN可以接收有效的数据帧和有效的远程帧,但是它只能在CAN总线上发送隐性位且不能启动传输。如果CAN内核需要发送一个显性位(ACK位,过载标志,激活的错误标志),该位将在内部重新绕行,以便CAN内核可以监视该显性位,即使CAN总线上仍然是隐性状态。静音模式通过发送显性位(认可位,错误帧)来分析CAN总线的交通状况而不影响它。图2显示在静音模式中CAN_Tx和CAN_Rx是如何连接到CAN内核上的。在ISO11898-1中,静音模式被称作总线监视模式。62.3.6环路返回模式CAN内核通过将测试寄存器的Lback位置1进入环路返回模式。在环路返回模式下,CAN内核将自己发送的报文作为接收到的报文并将他们存入接收缓冲器中(如果可以通过验收滤波器的话)。图3显示在环路返回模式中CAN_Tx和CAN_Rx是如何连接到CAN内核上的。该模式提供了自检功能。与外部激励无关,在环路返回模式中,CAN内核不理会应答错误(数据帧/远程帧中应答槽中采集到的隐性位)。CAN_Tx引脚的实际值被CAN内核丢弃。传输的报文可以在CAN_Tx引脚被监视。2.3.7环路返回与静音结合模式同时将Lback位和Silent位置1可以进入环路返回和静音的结合模式。该模式可以用于“热自检”,就是可以对C_CAN进行测试而不影响连接于CAN_TX和CAN_RX上的CAN系统。在该模式下,CAN_RX不与CAN内核连接而CAN_TX.则接在隐性上。图4显示在环路返回与静音结合模式中CAN_Tx和CAN_Rx是如何连接到CAN内核上的。72.3.8基本模式通过编程测试寄存器的Basic位为1,可以使CAN内核进入基本模式。在此模式下,C_CAN模块在没有报文RAM的状态下运行。IF1寄存器用做发送缓冲器。将IF1命令请求寄存器的Busy位置1,将对IF1寄存器的内容作出发送请求。Busy置位时锁定IF1寄存器。Busy位指示发送状态正被挂起。一旦CAN总线空闲,IF1寄存器就被加载CAN内核的移位寄存器,传输开始。当传输结束后,Busy位复位,IF1寄存器被释放。当IF1寄存器被锁定时,任何时候复位IF1命令寄存器中Busy位,一个挂起的传输被中止。如果CPU复位Busy位,则由于失去仲裁或出错,一个可能的重新发送将被禁止。IF2寄存器用作接收缓冲器。接收一个报文后,移位寄存器的内容将不做任何接滤波地加载到IF2中。此外,在报文传送期间,移位寄存器的内容可以被监视。向IF2命令请求寄存器的Busy位写1,每次都会初始化一次读报文对象,移位寄存器的内容存入IF2寄存器中。在Basic模式下,所有与报文对象相关的控制位和状态位,还有IFx命令屏蔽寄存器控制位的赋值都关闭。命令请求寄存器的报文号是无效的。IF2报文控制寄存器的NewDat和MsgLst位保留其功能,DCL3-0显示接收到的DLC,其它的控制位都被读为0。在Basic模式下CAN_WAIT_B准备输出被禁止(总是为‘1’)。2.3.9软件控制CAN_Tx引脚CAN发送引脚CAN_Tx可以有4种输出功能。除了其默认的功能—串行数据输出—以外,它还可以驱动CAN采样点信号监视CAN内核的位定时,以及它可以驱动连续的隐性或显性值。后面两个功能,结合可读的CAN接收引脚CAN_Rx,可以用于检查CAN总线的物理层。通过编程测试寄存器的Tx1和Tx0位,可以选择CAN_Tx引脚的输出模式,见3.2.5节。CAN_Tx引脚的3个测试功能将影响CAN协议功能。当CAN发送器处于环路返回、静音或基本等测试模式时,CAN_Tx必须处于默认功能。83.编程者模块C_CAN模块定位于一个256字节的地址空间中。寄存器被组织为16位寄存器,高字节为奇数地址低字节为偶数地址。两个接口寄存器(IF1和IF2)控制CPU对报文RAM的访问。它们将缓冲发送的或者接收RAM的数据,避免了CPU的访问报文RAM和报文的发送接收发送的冲突。93.1硬件复位描述硬件复位后,C_CAN的寄存器保持图5所示的值不变。除总线关闭(busoff)状态进入复位以外,CAN_Tx也被置为隐性(高)。CAN控制寄存器的值0x0001(Init=1)使能软件初始化。在CPU将Init复位为0之前,C_CAN不影响CAN总线。存储于报文RAM中的数据不受硬件复位的影响。上电后,报文RAM的内容不确定。3.2与CAN协议相关的寄存器在CAN内核中,这些寄存器与CAN协议控制器有关。他们控制操作模式、配置位时间和提供状态信息。3.2.1控制寄存器(位址0x01和0x00)Test测试模式允许位1:测试模式0:普通模式CCE配置变化允许位1:CPU写访问了位定时寄存器(Init=1)0:CPU未写访问位定时寄存器DAR禁止自动再发送1:自动再发送禁止0:允许被干扰的报文自动再发送EIE错误中断允许1:允许-状态寄存器中的Boff位或Ewarn位的变化将产生一个中断0:禁止-不产生错误状态中断SIE状态变化中断允许1:允许-当报文发送成功完成或检测到CAN总线上的错误产生一个中断0:禁止-不产生状态变化中断IE模块中断允许1:允许-中断将使IRQ_B为低。在所有挂起的中断被处理完之前,IRQ_B一直处于低。0:禁止-模块中断IRQ_B一直为高10Init初始化1:初始化开始0:普通操作注:总线关闭恢复序列(见CAN规范2.0)不能被置位或复位Init位而缩短。如果器件进入总线关闭,控制器会自动将Init置1,以便停止总线的活动。当Init被CPU清除以后,器件将等待129个总线空闲事件(129x11个连续的隐性位),然后恢复为正常操作。在总线关闭恢复序列结束后,错误管理计数器将复位。在复位了Init位后的等待期间,每次11位的隐性位被监视,一个Bit0Error码被写入状态寄存器,以便CPU准备好检查CAN总线是否有显性位还是有连续的干扰,并监视后面的总线恢复序列。3.2.2状态寄存器(地址0x03和0x02)Boff总线关闭状态1:CAN