<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 簡(jiǎn)化CAN和LIN車(chē)載網(wǎng)絡(luò)測(cè)試

          簡(jiǎn)化CAN和LIN車(chē)載網(wǎng)絡(luò)測(cè)試

          作者: 時(shí)間:2016-12-14 來(lái)源:網(wǎng)絡(luò) 收藏
          CAN是一種連接多個(gè)控制模塊使用的串行異步多主站通信協(xié)議。其中,小于125 Kbps的數(shù)據(jù)速率通常稱(chēng)為低速CAN。125 Kbps~1 Mbps的數(shù)據(jù)速率稱(chēng)為高速CAN。CAN在信令處理中使用單線、雙線或容錯(cuò)技術(shù)。在單線CAN中,數(shù)據(jù)速率是33.3 Kbps和83.33Kbps,信令采用單端信令。雙線CAN數(shù)據(jù)速率是高速CAN,信令采用差分信令。容錯(cuò)CAN用于低速CAN數(shù)據(jù)速率。


          網(wǎng)絡(luò)中的每個(gè)CAN節(jié)點(diǎn)通過(guò)發(fā)送包形式的信息進(jìn)行通信。每個(gè)包將包含開(kāi)銷(xiāo)和凈荷。根據(jù)通信類(lèi)型,包稱(chēng)為數(shù)據(jù)幀、遠(yuǎn)程幀、過(guò)載幀或錯(cuò)幀。對(duì)車(chē)載網(wǎng)絡(luò),CAN節(jié)點(diǎn)請(qǐng)求數(shù)據(jù),然后發(fā)送一個(gè)遠(yuǎn)程幀。如果節(jié)點(diǎn)忙著處理數(shù)據(jù)、執(zhí)行優(yōu)先工作,那么節(jié)點(diǎn)將把過(guò)載幀放在總線上,表明它目前正忙。如果CAN節(jié)點(diǎn)發(fā)現(xiàn)有校驗(yàn)和錯(cuò)誤或數(shù)據(jù)毀壞,它將發(fā)送一個(gè)錯(cuò)幀。CAN有兩種協(xié)議格式:CAN2.OA和CAN2.OB。這兩種版本之間的差別是地址中使用的位數(shù)不同。CAN2.OA支持11位地址,可以兼容CAN2.OB。CAN2.OB支持29位地址,也稱(chēng)為擴(kuò)展地址。

          CAN2.OB的典型數(shù)據(jù)幀內(nèi)容如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/201612/329677.htm

          LIN基礎(chǔ)知識(shí)

          LIN是一種基于公共UART接口的單線串行通信協(xié)議。LIN采用單主站多從站組網(wǎng)結(jié)構(gòu)。它是為汽車(chē)傳感器和驅(qū)動(dòng)器組網(wǎng)應(yīng)用開(kāi)發(fā)的,用于車(chē)門(mén)控制、車(chē)燈和車(chē)窗操作。LIN主節(jié)點(diǎn)將LIN網(wǎng)絡(luò)與高級(jí)網(wǎng)絡(luò)相連,如使用控制器區(qū)域網(wǎng)(CAN)。由于電磁干擾和時(shí)鐘同步要求,LIN支持最大20Kbps的數(shù)據(jù)速率。在收到和過(guò)濾標(biāo)識(shí)符時(shí),從站任務(wù)激活,開(kāi)始傳輸消息響應(yīng)。響應(yīng)由2個(gè)、4個(gè)或8個(gè)數(shù)據(jù)字節(jié)和1個(gè)校驗(yàn)和字節(jié)組成。包頭和響應(yīng)部分構(gòu)成了一個(gè)消息格式。LIN消息格式如圖2所示。


          測(cè)量頻率振蕩器容限和傳輸延遲,幫助解決位定時(shí)問(wèn)題

          CAN協(xié)議的功能、位速率、位采樣點(diǎn)和一個(gè)位周期中的樣點(diǎn)數(shù)量都可以由用戶編程。在這一過(guò)程中,用戶必須知道位定時(shí)參數(shù)、參考頻率振蕩器容限和系統(tǒng)中各種信號(hào)傳輸延遲。根據(jù)CAN規(guī)范,位時(shí)間分成四段,即同步段、傳播時(shí)間段、相位緩沖段1和相位緩沖段2。每個(gè)段由可以編程的特定數(shù)量的時(shí)間單位組成。時(shí)間單位(tq)是位時(shí)間的基本時(shí)間單位,其長(zhǎng)度由編程人員使用位速率預(yù)標(biāo)量定義。圖3說(shuō)明了怎樣才能選擇位時(shí)間中的時(shí)間單位,然后為4個(gè)段分配時(shí)間單位。同步段(sync_seg)是預(yù)計(jì)發(fā)生CAN總線電平邊沿的位時(shí)間部分。在sync_seg外面發(fā)生的邊沿與相位段邊沿間的距離稱(chēng)為該邊沿的相位誤差。傳輸時(shí)間段(prop_seg)主要用來(lái)補(bǔ)償CAN網(wǎng)絡(luò)內(nèi)部的物理延時(shí)。相位緩沖段(phasesegl和phase_seg2)包圍在樣點(diǎn)周?chē)?。再一同步跳轉(zhuǎn)寬度(SJW)規(guī)定了再同步可以在相位緩沖段規(guī)定的范圍內(nèi)把樣點(diǎn)移動(dòng)多遠(yuǎn)的距離,以補(bǔ)償沿到沿誤差。


          為使CAN網(wǎng)絡(luò)正常運(yùn)行,必須考慮物理延時(shí)和頻率振蕩器的容限范圍,CAN網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)從自己的頻率振蕩器中得到位定時(shí),這個(gè)位時(shí)間會(huì)隨著頻率振蕩器的容限而變化。在實(shí)際系統(tǒng)中,由于初始容限偏置和老化及周?chē)鷾囟茸兓?,頻率振蕩器參考頻率fclk會(huì)偏離額定值。這些偏離之和得到總的頻率振蕩器容限。在對(duì)定時(shí)寄存器編程時(shí),編程人員必須考慮這一變化。

          在DP07000系列上運(yùn)行的CAN和LIN定時(shí)和協(xié)議解碼軟件(稱(chēng)為下DSVNM)自動(dòng)測(cè)量頻率振蕩器容限。用戶可以指定CAN節(jié)點(diǎn)的號(hào)碼。下DSVNM中的結(jié)果將包括有ACK位及沒(méi)有ACK位的整體頻率振蕩器容限。TDSVNM還將提供沒(méi)有ACK位的數(shù)據(jù),表明接收CAN節(jié)點(diǎn)對(duì)傳輸節(jié)點(diǎn)的影響。通過(guò)結(jié)合使用頻率振蕩器的發(fā)送節(jié)點(diǎn)和接收節(jié)點(diǎn)容限,可以對(duì)CAN控制器定時(shí)寄存器編程,實(shí)現(xiàn)無(wú)差錯(cuò)的網(wǎng)絡(luò)性能。

          除頻率振蕩器容限信息外,為精確地設(shè)置樣點(diǎn),還要求傳輸延時(shí)信息。傳輸延遲在CAN系統(tǒng)中具有重要意義,這是因?yàn)镃AN支持在競(jìng)爭(zhēng)訪問(wèn)網(wǎng)絡(luò)的節(jié)點(diǎn)之間進(jìn)行非破壞性判優(yōu)及同幀確認(rèn)。

          假設(shè)有兩個(gè)CAN節(jié)點(diǎn)A和B。兩個(gè)節(jié)點(diǎn)A和B之間的單向傳播延遲規(guī)定為tprop (A, B)。由于兩個(gè)節(jié)點(diǎn)之間的信號(hào)傳播時(shí)間,同步到CAN總線上碼流的任何CAN節(jié)點(diǎn)將與發(fā)射機(jī)碼流不同相。

          在圖4中的實(shí)例中,兩個(gè)節(jié)點(diǎn)A和B都是對(duì)CAN總線執(zhí)行判優(yōu)的發(fā)射機(jī)。節(jié)點(diǎn)A發(fā)送幀開(kāi)始位的時(shí)間比節(jié)點(diǎn)B早不到一個(gè)位時(shí)間,因此節(jié)點(diǎn)B把自己同步到收到的從隱性到顯性的邊沿。由于節(jié)點(diǎn)B是在發(fā)送后同步的這一邊沿延遲(A_to_B),因此B的位定時(shí)段相對(duì)于A發(fā)生位移。節(jié)點(diǎn)B發(fā)送優(yōu)先權(quán)更高的標(biāo)識(shí)符,因此在發(fā)送顯性位時(shí),在特定標(biāo)識(shí)符上它會(huì)贏得判優(yōu),而節(jié)點(diǎn)A則傳輸隱性位。節(jié)點(diǎn)B發(fā)送的顯性位將在延遲(B_to_A)后到達(dá)節(jié)點(diǎn)A。


          由于頻率振蕩器容限,節(jié)點(diǎn)A的樣點(diǎn)的實(shí)際位置可能會(huì)位于節(jié)點(diǎn)A同相的段額定范圍內(nèi)的任何地方,因此節(jié)點(diǎn)B傳輸?shù)奈槐仨氃趐hase_segl開(kāi)始前到達(dá)節(jié)點(diǎn)A。這一條件定義了prop_seg的長(zhǎng)度。

          如果節(jié)點(diǎn)B傳輸?shù)膹碾[性到顯性的邊沿在phase_seg2開(kāi)始后到達(dá)節(jié)點(diǎn)A,那么可能會(huì)發(fā)生節(jié)點(diǎn)A對(duì)隱性位、而不是顯性位取樣的情況。這會(huì)導(dǎo)致誤碼,并使用錯(cuò)誤標(biāo)記破壞當(dāng)前幀。
          這個(gè)問(wèn)題要求工程師在對(duì)CAN控制器的定時(shí)寄存器編程時(shí)考慮精確的數(shù)據(jù)。現(xiàn)在TDSVNM軟件提供了自動(dòng)測(cè)量傳輸延遲的功能。TDSVNM可以自動(dòng)測(cè)量頻率振蕩器容限和傳輸延遲,用戶可以使用來(lái)自車(chē)載網(wǎng)絡(luò)的實(shí)際環(huán)境數(shù)據(jù)對(duì)寄存器編程。

          CAN和LIN消息的協(xié)議解碼

          一旦物理層在車(chē)載網(wǎng)絡(luò)中全面運(yùn)行,固化軟件將與ECU(發(fā)動(dòng)機(jī)控制單元)集成在一起。在這一活動(dòng)過(guò)程中,用戶可以以數(shù)據(jù)鏈路層格式查看OSI的物理層活動(dòng)。圖5是典型的車(chē)載網(wǎng)絡(luò)。


          在圖5中,多條總線使用網(wǎng)關(guān)互連起來(lái)。舒適總線和資訊娛樂(lè)總線通常以低于125 Kbps的速率運(yùn)行,傳動(dòng)鏈總線和安全總線以500 Kbps~1 Mbps的數(shù)據(jù)速率運(yùn)行。LIN總線接入到舒適總線上。在不同總線之間使用網(wǎng)關(guān)交換數(shù)據(jù)。在這個(gè)異構(gòu)網(wǎng)絡(luò)中,需要進(jìn)行的分析如下:

          · 觸發(fā)特定GAN幀內(nèi)容,捕獲總線業(yè)務(wù),以數(shù)據(jù)鏈路層格式查看信息

          · CAN消息之間的時(shí)戳

          · 檢定不同網(wǎng)段之間的通信

          · 能夠同時(shí)查看兩個(gè)網(wǎng)段中的協(xié)議活動(dòng)。兩個(gè)網(wǎng)段可以是CAN-CAN或CAN-LIN

          · 檢定網(wǎng)關(guān)的性能,確定網(wǎng)段之間信息交換的時(shí)延及信息交換的準(zhǔn)確性

          通過(guò)使用與DP07000系列集成式CAN觸發(fā)功能接口的TDSVNM軟件,用戶可以捕獲特定CAN幀內(nèi)容上的CAN業(yè)務(wù)。TDSVNM解決方案可以監(jiān)測(cè)CAN2.OA或CAN2.0B幀。用戶可以靈活地選擇幀類(lèi)型,如數(shù)據(jù)幀、過(guò)載幀、遠(yuǎn)程幀或錯(cuò)幀。根據(jù)幀中的內(nèi)容,用戶可以指明要監(jiān)測(cè)的內(nèi)容,并發(fā)起捕獲。

          但是,采用YT格式捕獲的數(shù)據(jù)很難解釋NRZ數(shù)據(jù),很難知道CAN消息中的內(nèi)容。TDSVNM解碼YT波形,以十六進(jìn)制或二進(jìn)制格式顯示數(shù)據(jù),節(jié)約了時(shí)間,不會(huì)產(chǎn)生人為錯(cuò)誤。


          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();