新聞中心

STM32之CANTTCAN模式淺析

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏

1 前言

傳統(tǒng)CAN 采用事件觸發(fā)消息傳輸機(jī)制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 載波偵聽(tīng)、多路訪問(wèn)、沖突檢測(cè)、優(yōu)先級(jí)仲裁) 介質(zhì)訪問(wèn)控制機(jī)制, 即多個(gè)消息同時(shí)發(fā)送時(shí), 按照消息標(biāo)識(shí)符的優(yōu)先級(jí)順序, 低優(yōu)先級(jí)消息自動(dòng)退出, 高優(yōu)先級(jí)消息繼續(xù)發(fā)送。這種介質(zhì)訪問(wèn)方式提高了網(wǎng)絡(luò)的利用率和高優(yōu)先級(jí)消息的實(shí)時(shí)性, 但在重負(fù)載CAN 中, 低優(yōu)先級(jí)消息經(jīng)常由于總線沖突而被迫退出發(fā)送, 導(dǎo)致低優(yōu)先級(jí)消息傳輸時(shí)延長(zhǎng), 且傳輸時(shí)延不可預(yù)測(cè), 因此, CAN 不適合實(shí)時(shí)性和可靠性要求特別高或有安全性要求的場(chǎng)合, 如汽車電子鐘的X-by-w ir e( 線控技術(shù)) 。為此國(guó)外有專家自2000 年起研究時(shí)間觸發(fā)機(jī)制的CAN --TT CAN。2004 年國(guó)際標(biāo)準(zhǔn)化組織將TT CAN 制定為ISO 11898-4國(guó)際標(biāo)準(zhǔn)。

本文引用地址:http://m.butianyuan.cn/article/201611/318484.htm

2 什么是TTCAN?

TT CA N 是CAN 的高層協(xié)議, 其數(shù)據(jù)鏈路層需要幀起始時(shí)刻信息。T TCAN 在CAN 的物理層和數(shù)據(jù)鏈路層基礎(chǔ)上, 通過(guò)調(diào)度表實(shí)現(xiàn)網(wǎng)路上節(jié)點(diǎn)的分時(shí)同步通信。網(wǎng)路上各節(jié)點(diǎn)取得同步后, 消息只能根據(jù)調(diào)度表在規(guī)定的時(shí)間隙傳輸, 避免了消息傳輸?shù)臎_突、仲裁,消息傳輸時(shí)延短, 且可預(yù)知。具體介紹請(qǐng)參考ISO11898-4。

3 STM32中的TTCAN實(shí)現(xiàn)

3.1 開(kāi)啟TTCAN模式

STM32是通過(guò)主控制寄存器(CAN_MCR)的TTCM位來(lái)控制TTCAN模式的使能開(kāi)關(guān)的。CAN_MCR寄存器如下所示:

地址偏移量: 0x00
復(fù)位值: 0x0001 0002

圖1

位31:16保留,硬件強(qiáng)制為0。
位15RESET: bxCAN 軟件復(fù)位
0: 本外設(shè)正常工作;
1: 對(duì)bxCAN進(jìn)行強(qiáng)行復(fù)位,復(fù)位后bxCAN進(jìn)入睡眠模式(FMP位和CAN_MCR寄存器被初始化為其復(fù)位值)。此后硬件自動(dòng)對(duì)該位清0。
位14:8保留,硬件強(qiáng)制為0。
位7TTCM: 時(shí)間觸發(fā)通信模式
0: 禁止時(shí)間觸發(fā)通信模式;
1: 允許時(shí)間觸發(fā)通信模式。
位6ABOM: 自動(dòng)離線(Bus-Off)管理
該位決定CAN硬件在什么條件下可以退出離線狀態(tài)。
0: 離線狀態(tài)的退出是在,軟件對(duì)CAN_MCR寄存器的INRQ位進(jìn)行置1隨后清0后,一旦硬件檢測(cè)到128次11位連續(xù)的隱性位,就退出離線狀態(tài);
1: 一旦硬件檢測(cè)到128次11位連續(xù)的隱性位,自動(dòng)退出離線狀態(tài)。
位5AWUM: 自動(dòng)喚醒模式
該位決定CAN處在睡眠模式時(shí)由硬件還是軟件喚醒
0: 睡眠模式通過(guò)清除CAN_MCR寄存器的SLEEP位,由軟件喚醒;
1: 睡眠模式通過(guò)檢測(cè)CAN報(bào)文,由硬件自動(dòng)喚醒。喚醒的同時(shí),硬件自動(dòng)對(duì)CAN_MSR寄存器的SLEEP和SLAK位清0 。
位4NART: 禁止報(bào)文自動(dòng)重傳
0: 按照CAN標(biāo)準(zhǔn),CAN硬件在發(fā)送報(bào)文失敗時(shí)會(huì)一直自動(dòng)重傳直到發(fā)送成功;
1: CAN報(bào)文只被發(fā)送1次,不管發(fā)送的結(jié)果如何(成功、出錯(cuò)或仲裁丟失)。
位3RFLM: 接收FIFO鎖定模式
0: 在接收溢出時(shí)FIFO未被鎖定,當(dāng)接收FIFO的報(bào)文未被讀出,下一個(gè)收到的報(bào)文會(huì)覆蓋原有的報(bào)文;
1: 在接收溢出時(shí)FIFO被鎖定,當(dāng)接收FIFO的報(bào)文未被讀出,下一個(gè)收到的報(bào)文會(huì)被丟棄。
位2TXFP: 發(fā)送FIFO優(yōu)先級(jí)
當(dāng)有多個(gè)報(bào)文同時(shí)在等待發(fā)送時(shí),該位決定這些報(bào)文的發(fā)送順序
0: 優(yōu)先級(jí)由報(bào)文的標(biāo)識(shí)符來(lái)決定;
1: 優(yōu)先級(jí)由發(fā)送請(qǐng)求的順序來(lái)決定。
位1SLEEP: 睡眠模式請(qǐng)求
軟件對(duì)該位置1可以請(qǐng)求CAN進(jìn)入睡眠模式,一旦當(dāng)前的CAN活動(dòng)(發(fā)送或接收?qǐng)?bào)文)結(jié)束,CAN就進(jìn)入睡眠。
軟件對(duì)該位清0使CAN退出睡眠模式。
當(dāng)設(shè)置了AWUM位且在CAN Rx信號(hào)中檢測(cè)出SOF位時(shí),硬件對(duì)該位清0。
在復(fù)位后該位被置1-CAN在復(fù)位后處于睡眠模式。
位0INRQ: 初始化請(qǐng)求
軟件對(duì)該位清0可使CAN從初始化模式進(jìn)入正常工作模式:當(dāng)CAN在接收引腳檢測(cè)到連續(xù)的11個(gè)隱性位后,CAN就達(dá)到同步,并為接收和發(fā)送數(shù)據(jù)作好準(zhǔn)備了。為此,硬件相應(yīng)地對(duì)CAN_MSR寄存器的INAK位清0。
軟件對(duì)該位置1可使CAN從正常工作模式進(jìn)入初始化模式:一旦當(dāng)前的CAN活動(dòng)(發(fā)送或接收)結(jié)束,CAN就進(jìn)入初始化模式。相應(yīng)地,硬件對(duì)CAN_MSR寄存器的INAK位置1。

如上,只需要將CAN_MCR寄存器的TTCM位置1則開(kāi)啟了TTCAN模式。此時(shí)STM32的CAN模式以TTCAN模式進(jìn)行通信。

STM32F20x的固件庫(kù)對(duì)應(yīng)開(kāi)啟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時(shí),將CAN_InitTypeDef的成員CAN_TTCM使能。

3.2 開(kāi)啟時(shí)間戳

在TTCAN模式下,CAN硬件的內(nèi)部定時(shí)器被激活,并且被用于產(chǎn)生發(fā)送與接收郵箱的)時(shí)間戳,分別存儲(chǔ)在CAN_RDTxR/CAN_TDTxR寄存器中。內(nèi)部定時(shí)器在每個(gè)CAN位時(shí)間累加。內(nèi)部定時(shí)器在接收和發(fā)送的幀起始位的采樣點(diǎn)位置被采樣,并生成時(shí)間戳。如下:

發(fā)送郵箱時(shí)間戳:

圖2

如上圖:在TTCAN模式下,TIME[15:0]將保留SOF的時(shí)間戳。

若通過(guò)將TGT位置1則開(kāi)啟了時(shí)間戳,此時(shí)TIME[15:0]將保存了在發(fā)送該報(bào)文SOF的時(shí)刻,16位定時(shí)器的值。同時(shí),在發(fā)送長(zhǎng)度為8的報(bào)文中,時(shí)間戳TIME[15:0]是最后2個(gè)發(fā)送的字節(jié):TIME[7:0]作為第7個(gè)字節(jié),TIME[15:8]為第8個(gè)字節(jié),它們替換了寫入CAN_TDHxR[31:16]的數(shù)據(jù)(DATA6[7:0]和DATA7[7:0])。為了把時(shí)間戳的2個(gè)字節(jié)發(fā)送出去,DLC必須編程為8。

在源碼中開(kāi)啟此功能,修改CAN_TypeDef的sTxMailBox[3]的RDTR寄存器。

接收郵箱時(shí)間戳:

圖3

在TTCAN模式下,接收郵箱數(shù)據(jù)長(zhǎng)度和時(shí)間戳寄存器的TIME[15:0]記錄接收到的報(bào)文的SOF時(shí)間戳。



關(guān)鍵詞: STM32CANTTCAN模

評(píng)論


技術(shù)專區(qū)

關(guān)閉