历史上的今天
返回首页

历史上的今天

今天是:2024年09月02日(星期一)

正在发生

2018年09月02日 | STM32之CAN---TTCAN模式浅析

2018-09-02 来源:eefocus

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。
位15RESET: bxCAN 软件复位
0: 本外设正常工作;
1: 对bxCAN进行强行复位,复位后bxCAN进入睡眠模式(FMP位和CAN_MCR寄存器被初始化为其复位值)。此后硬件自动对该位清0。
位14:8保留,硬件强制为0。
位7TTCM: 时间触发通信模式
0: 禁止时间触发通信模式;
1: 允许时间触发通信模式。
位6ABOM: 自动离线(Bus-Off)管理
该位决定CAN硬件在什么条件下可以退出离线状态。
0: 离线状态的退出是在,软件对CAN_MCR寄存器的INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,就退出离线状态;
1: 一旦硬件检测到128次11位连续的隐性位,自动退出离线状态。
位5AWUM: 自动唤醒模式
该位决定CAN处在睡眠模式时由硬件还是软件唤醒
0: 睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒;
1: 睡眠模式通过检测CAN报文,由硬件自动唤醒。唤醒的同时,硬件自动对CAN_MSR寄存器的SLEEP和SLAK位清0 。
位4NART: 禁止报文自动重传
0: 按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功;
1: CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)。
位3RFLM: 接收FIFO锁定模式
0: 在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有的报文;
1: 在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃。
位2TXFP: 发送FIFO优先级
当有多个报文同时在等待发送时,该位决定这些报文的发送顺序
0: 优先级由报文的标识符来决定;
1: 优先级由发送请求的顺序来决定。
位1SLEEP: 睡眠模式请求
软件对该位置1可以请求CAN进入睡眠模式,一旦当前的CAN活动(发送或接收报文)结束,CAN就进入睡眠。
软件对该位清0使CAN退出睡眠模式。
当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清0。
在复位后该位被置1-CAN在复位后处于睡眠模式。
位0INRQ: 初始化请求
软件对该位清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时间戳。

参考文章:http://blog.csdn.net/flydream0/article/details/8167118


推荐阅读

史海拾趣

ARCOTRONICS公司的发展小趣事

在电子行业的早期,ARCOTRONICS公司凭借其卓越的研发团队,成功开发出一种新型的高效能电子元件。这一技术突破不仅大幅提升了电子设备的性能,还降低了生产成本,使公司在市场上迅速获得了竞争优势。这一技术突破为ARCOTRONICS公司奠定了坚实的基石,为其后续发展打下了坚实的基础。

启英泰伦(Chiplntelli)公司的发展小趣事

近期,启英泰伦完成了数千万元的B++轮融资,由水木春锦资本、盛裕资本和自觉资本共同投资。这笔资金将主要用于产品的大规模量产和新产品的研发,以进一步加速启英泰伦在智能语音芯片市场的布局。资本的注入不仅为公司的发展提供了强有力的支持,也反映了市场对启英泰伦技术和市场前景的认可。

CDE [ CORNELL DUBILIER ELECTRONICS ]公司的发展小趣事

随着电子行业的快速发展,客户对电容器的需求日益多样化。CDE公司积极应对市场变化,致力于定制化电容器的研发与应用。公司利用数学建模和定制化的仿真App对电容器的设计进行微调,以满足不同客户的特定需求。这一举措不仅提升了CDE的市场竞争力,也为公司在定制化电容器领域树立了领先地位。

Festo公司的发展小趣事

近年来,Festo在中国的发展步伐进一步加快。2021年4月,Festo济南全球生产中心正式全面投入运营。这个生产中心整合了本地的生产、研发、销售、物流等全价值链,形成了“研产销一体化”的格局。通过引进先进的生产设备和工艺,以及优化生产流程和管理体系,Festo济南全球生产中心在保障产品质量的同时,也大大提高了生产效率和响应速度。这一生产中心的建立不仅为Festo在中国市场的进一步发展提供了强有力的支持,也进一步巩固了Festo在全球气动自动化领域的领导地位。

以上五个故事从不同角度展示了Festo公司在电子行业中的发展历程和成就。作为一家以创新为驱动、以可持续发展为目标的公司,Festo将继续引领电子行业的发展方向,为全球客户提供更加优质的产品和服务。

Advanced Ceramic X Corporation公司的发展小趣事

Festo公司成立于1925年,由Albert Fezer和Gottlieb Stoll两位创始人共同创立。最初,公司专注于木工机械和木工工具的生产,其品牌Festool在行业内享有盛誉。凭借对工艺的精湛掌握和对品质的严格把控,Festo迅速在木工机械领域崭露头角,为公司的后续发展奠定了坚实的基础。

Corporation Soneet公司的发展小趣事

在市场推广的过程中,Soneet注重品牌形象的建立。公司积极参加各类行业展会和技术交流会议,展示其最新技术和产品。同时,Soneet还通过媒体宣传、社交媒体营销等方式,提高品牌知名度和美誉度。这些努力使得Soneet在消费者心中树立了良好的品牌形象。

问答坊 | AI 解惑

PIC16C712功能、特点、应用领域

PIC16C712功能、特点、应用领域    1. 功能、特点:    PIC16C712为Microchip公司推出的基于711芯片功能基础上的增强型产品,它与16C711是Pin对Pin兼容。其功能与价格均优于16C711。下表为16C712与16C711的功能对照 ...…

查看全部问答>

xilinx嵌入式FPGA学习历程+资料

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 作为电子科大uestcer,很多学员的教研室现在都转向了嵌入式的FPGA方向,但是清水河的网络太P了,而且没有人知道很没有方向感,初步的想法是提供一些资料给论坛,帮助更多的uestcers有一个比较平直的路 ...…

查看全部问答>

手在其中起到的作用?

一根视频线中间断了,两边都漏了一点线头,用一只手的拇指和食指捏住两边的线头(线头在被捏着的地方不接触),信号恢复。请问这时手在电路中起到了哪些元件的作用?…

查看全部问答>

无线“物联网” 应用?

手机发送短信,GSM模块接收短信,给单片机,单片机处理接收到的信息,然后做输出控制(其它器件) 我想知道这属于哪方面的应用? 算不算是“物联网”的应用之一呢 因为开题报告写“应用前景”方面的,查了“物联网”的概念,还是不确定 请懂这 ...…

查看全部问答>

项目外包:E1转IP、IP转E1设备

    项目需求:做一个E1转IP,IP转E1的设备适配器。 E1的30时隙语音数据转换成一路IP数据发送, 对端收到后需要将IP语音数据转换成E1数据。其中要求IP语音包压缩格式要小,大概一个时隙的语言数据压缩后8K左右。项目开发时间要求一个月, ...…

查看全部问答>

项目如何改进?

我是应届毕业生,刚进公司不到一个月!公司给我发了AVR megal16一个程序,要我在现有的基础上改进,顿时不知从何下手!没有程序流程图,只是口述了要改进的地方!    改的仔细想一下感觉很简单,可一下手又不知从那里做起!    改进的 ...…

查看全部问答>

关于STM32TIM的ETR

请问STM32 TIM的ETR是否像手册上描述的先预分频然后进行数字滤波?…

查看全部问答>

ARM Architecture 0004

B/BL:B{L}{} 程序跳转指令。 L指示是否将跳转返回地址存入R14_,如果省略则表示不存放跳转返回地址存入R14_。表示程序执行条件,如果省略则表示必然执行。表示跳转目的地址,通常由代码编写人员给定Label,由编译器自动产生。 CPU对应的动作: ...…

查看全部问答>

收到了意外的礼物!

今早突然收到个快递!很不错哦!MSP430G2553    MSP430G2453…

查看全部问答>

易电源之个人理解。。。

以前设计电源都觉得是很麻烦的一件事情,这主要是由于电源的指标非常多,而且个人觉得纯模拟的东西实在搞不懂。。。呵呵。。。 后来有了电源模块,发现这还是个好东西,不过这些电源模块的体积挺大,造成电路板体积庞大。TI的易电源体较小,提供 ...…

查看全部问答>