1 前语
传统CAN 选用事情触发音讯传输机制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路拜访、抵触检测、优先级裁定) 介质拜访操控机制, 即多个音讯一起发送时, 依照音讯标识符的优先级次序, 低优先级音讯主动退出, 高优先级音讯持续发送。这种介质拜访方法提高了网络的利用率和高优先级音讯的实时性, 但在重负载CAN 中, 低优先级音讯常常我们总线抵触而被逼退出发送, 导致低优先级音讯传输时延伸, 且传输时延不行猜测, 因而, CAN 不适合实时性和牢靠性要求特别高或有安全性要求的场合, 如轿车电子钟的X-by-w ir e( 线控技能) 。为此国外有专家自2000 年起研讨时刻触发机制的CAN –TT CAN。2004 年严苛规范化安排将TT CAN 制定为ISO 11898-4严苛规范。
2 什么是TTCAN?
TT CA N 是CAN 的高层协议, 其数据链路层需求帧开始时刻信息。T TCAN 在CAN 的物理层和数据链路层基础上, 经过调度表完成网路上节点的分时同步通讯。网路上各节点获得同步后, 音讯只能依据调度表在规则的时极大传输, 避免了音讯传输的抵触、裁定,音讯传输时延短, 且可预知。详细介绍请参阅ISO11898-4。
3 STM32中的TTCAN完成
3.1 舱位TTCAN形式
STM32是经过主操控寄存器(CAN_MCR)的TTCM位来操控TTCAN形式的使能开关的。CAN_MCR寄存器如下所示:
地址偏移量: 0x00
复位值: 0x0001 0002
图1
位31:16 | 保存,硬件强制为0。 |
位15 | RESET: bxCAN 软件复位 0: 本外设正常作业; 1: 对bxCAN进行强行复位,复位后bxCAN进入睡觉形式(FMP位和CAN_MCR寄存器被初始化为其复位值)。尔后硬件主动对该位清0。 |
位14:8 | 保存,硬件强制为0。 |
位7 | TTCM: 时刻触发通讯形式 0: 制止时刻触发通讯形式; 1: 答应时刻触发通讯形式。 |
位6 | ABOM: 主动离线(Bus-Off)办理 该位决议CAN硬件在什么条件下能够退出离线状况。 0: 离线状况的退出是在,软件对CAN_MCR寄存器的INRQ位进行置1随后清0后,一旦硬件检测到128次11位接连的隐性位,就退出离线状况; 1: 一旦硬件检测到128次11位接连的隐性位,主动退出离线状况。 |
位5 | AWUM: 主动唤醒形式 该位决议CAN处在睡觉形式时由硬件仍是软件唤醒 0: 睡觉形式经过铲除CAN_MCR寄存器的SLEEP位,由软件唤醒; 1: 睡觉形式经过检测CAN报文,由硬件主动唤醒。唤醒的一起,硬件主动对CAN_MSR寄存器的SLEEP和SLAK位清0 。 |
位4 | NART: 制止报文主动重传 0: 依照CAN规范,CAN硬件在发送报文失利时会一向主动重传直到发送成功; 1: CAN报文只被发送1次,不论发送的成果怎么(成功、犯错或裁定丢掉)。 |
位3 | RFLM: 接纳FIFO确定形式 0: 在接纳溢出时FIFO未被确定,当接纳FIFO的报文未被读出,下一个收到的报文会掩盖原有的报文; 1: 在接纳溢出时FIFO被确定,当接纳FIFO的报文未被读出,下一个收到的报文会被丢掉。 |
位2 | TXFP: 发送FIFO优先级 当有多个报文一起在等候发送时,该位决议这些报文的发送次序 0: 优先级由报文的标识符来决议; 1: 优先级由发送恳求的次序来决议。 |
位1 | SLEEP: 睡觉形式恳求 软件对该方位1能够恳求CAN进入睡觉形式,一旦当时的CAN活动(发送或接纳报文)完毕,CAN就进入睡觉。 软件对该位清0使CAN退出睡觉形式。 当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清0。 在复位后该位被置1-CAN在复位后处于睡觉形式。 |
位0 | INRQ: 初始化恳求 软件对该位清0可使CAN从初始化形式进入正常作业形式:当CAN在接纳引脚检测到接连的11个隐性位后,CAN就到达同步,并为接纳和发送数据作好预备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清0。 软件对该方位1可使CAN从正常作业形式进入初始化形式:一旦当时的CAN活动(发送或接纳)完毕,CAN就进入初始化形式。相应地,硬件对CAN_MSR寄存器的INAK方位1。 |
如上,只需求将CAN_MCR寄存器的TTCM方位1则舱位了TTCAN形式。此刻STM32的CAN形式以TTCAN形式进行通讯。
STM32F20x的固件库对应舱位TTCAN形式的接口为:
/* @brief Enables or disables the CAN Time TriggerOperation communication mode.* @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be * sent over the CAN bus. * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.* @param NewState: Mode new state. This parameter can be: ENABLE or DISABLE.* When enabled, Time stamp (TIME[15:0]) value is sent in the last two* data bytes of the 8-byte message: TIME[7:0] in data byte 6 and TIME[15:8] * in data byte 7. * @retval None*/void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);
或许在初始化CAN_Init时,将CAN_InitTypeDef的成员CAN_TTCM使能。
3.2 舱位时刻戳
在TTCAN形式下,CAN硬件的内部定时器被激活,而且被用于发生发送与接纳邮箱的)时刻戳,别离存储在CAN_RDTxR/CAN_TDTxR寄存器中。内部定时器在每个CAN位时刻累加。内部定时器在接纳和发送的帧开始位的采样点方位被采样,并生成时刻戳。如下:
发送邮箱时刻戳:
图2
如上图:在TTCAN形式下,TIME[15:0]将保存SOF的时刻戳。
若经过将TGT方位1则舱位了时刻戳,此刻TIME[15:0]将保存了在发送该报文SOF的时刻,16位定时器的值。一起,在发送长度为8的报文中,时刻戳TIME[15:0]是最终2个发送的字节:TIME[7:0]作为第7个字节,TIME[15:8]为第8个字节,它们替换了写入CAN_TDHxR[31:16]的数据(DATA6[7:0]和DATA7[7:0])。为了把时刻戳的2个字节发送出去,DLC有必要编程为8。
在源码中舱位此功用,修正CAN_TypeDef的sTxMailBox[3]的RDTR寄存器。
接纳邮箱时刻戳:
图3
在TTCAN形式下,接纳邮箱数据长度和时刻戳寄存器的TIME[15:0]记载接纳到的报文的SOF时刻戳。