NXP LPC54018的CAN-FD

日期 : 2019-07-20
標籤 :
WPI世平NXP恩智浦LPC54018CAN-FD

新聞內容

小編今天給大家介紹LPC54018晶片的CAN-FD。LPC54018的CAN控制器支持經典CAN和CAN-FD功能。這裡說的經典CAN是指CAN協議2.0版本part A、B,CAN-FD是指國際標準ISO 11898-1:2015。然而,小編並不打算在這裡給大家介紹這些協議和標準,小編只是簡單介紹CAN和CAN-FD的差異以及在LPC54018上使用CAN-FD的幾個關鍵問題。


CAN和CAN-FD

一個典型的CAN總線、CAN收發器和CAN控制器的連接圖,如下圖所示。


  圖一  


RT是終端匹配電阻,用來提高CAN總線的抗干擾能力。TJA1059是NXP一款CAN總線收發器晶片,用來把數字信號轉換為CAN總線的差分信號,或者把接收的差分信號轉換成數字信號。CAN控制器和CAN收發器之間傳輸的幀都是數字信號。而CAN協議規定,CAN通信通過數據幀、遙控幀、錯誤幀、過載幀和幀間隔這5種幀類型來進行。小編在這裡主要通過數據幀來介紹經典CAN和CAN-FD的差異。

CAN-FD與經典CAN相比,主要有兩點不同。一是增加了每個數據幀的負載數據。經典CAN數據幀的最大負載數據是8個字節,而CAN-FD最大負載數據是經典CAN的8倍,達到了64個字節。二是擁有更高的位速率。經典CAN的最高位速率被限定在1Mbps,而CAN-FD則沒有此限制。在實踐中,CAN-FD位速率主要被CAN收發器所限制,目前CAN收發器的位速率達到了5Mbps甚至更高。經典CAN數據幀、無位速率轉換CAN-FD數據幀和2倍位速率轉換CAN-FD數據幀,它們的幀結構示意圖如圖二所示,這些都是標準的格式。通過這個圖,大家可以直觀地了解CAN-FD與經典CAN的不同。

 

圖二 

幀結構的區分
我們知道,一個經典CAN數據幀由7個段構成。它們分別是幀起始(SOF)、仲裁段(CANID/RTR)、控制段(IDE/FDF/DLC)、數據段(DATA BYTE)、CRC段(CRC15/CRCD)、ACK段(ACK/ACKD)和幀結束(EOF),如圖二第一個數據幀結構所示。CAN-FD數據幀同樣由7個段構成,除了幀起始、仲裁段、ACK段和幀結束這4個段保持與經典CAN相同外,其餘3個段與經典CAN有所不同。CAN-FD數據幀的控制段由IDE / FDF / res / BRS / ESI / DLC等控制位構成,其中FDF控制位表示該數據幀是否為CAN-FD數據幀,BRS控制位表示該數據幀是否為位速率轉換數據幀,長為4 bit的DLC控制位表示該數據幀的數據段長度。

幀長度的區分

前面提到了CAN-FD與經典CAN不同點之一是數據幀最大負載數據不同。數據長度碼DLC的位寬為4,它具體表示為:當DLC的數值為0-8時,CAN和CAN-FD數據幀有0-8個字節的數據;當DLC的數值為9-15時,CAN數據幀都是8個字節的數據,CAN-FD數據幀則有12 / 16 / 20 / 24 / 32 / 48 / 64個字節的數據。

• 位速率的區分

CAN-FD與經典CAN另一不同點是CAN-FD數據幀有更高的位速率,這一點體現在圖二的第二和第三個數據幀結構圖上,第三個數據幀的位速率是第二個數據幀的2倍。在控制段的BRS控制位和它之前的所有位,以及ACK段的ACK位和它之後的所有位,它們的最高位速率為1Mbps。如果BRS控制位為1,表示該數據幀從ESI位開始到ACKD位結束,它們轉換為更高的位速率。如果BRS控制位為0,則表示整個數據幀都以相同位速率傳輸。

• CRC校驗的區分

此外,CAN-FD與經典CAN在CRC段的不同,主要體現在經典CAN數據幀的數據循環冗餘校驗都是用CRC-15。而CAN-FD數據幀,當數據小於等於16個字節時,使用CRC-17;當數據大於16個字節時,則使用更長的CRC-21。這樣,CAN-FD數據幀的數據具有更高的安全性。

在LPC54018上使用CAN-FD

在LPC54018上使用CAN-FD來傳輸數據,它主要分這幾個步驟:設置CAN功能模塊的時鐘,初始化CAN控制器,設置接收FIFO或發送Buffer,設置CAN控制器工作模式,最後收或發CAN-FD數據。小編在本文里主要介紹初始化CAN控制器的CAN-FD位速率設置和CAN收發器延遲補償機制。

CAN-FD位速率設置

根據CAN規範的定義,由發送單元在非同步的情況下,發送的每秒鐘的位數稱為位速率。1個位可分為4段。這些段分別為:

- 同步段(SYNC_SEG)

- 傳播時間段(PROP_SEG)

- 相位緩衝段1(PHASE_SEG1)

- 相位緩衝段2(PHASE_SEG2)

一個位的構成如圖三所示。

 

圖三  

這些段又由稱為時間量子Tq(Time Quanta)的最小時間單位構成。1個位分為4個段,每個段又由若干個Tq 構成,這就稱為位時序。假如1個位時序中,同步段為1個Tq,傳播時間段為1個Tq,相位緩衝段1為4個Tq,相位緩衝段2為4個Tq,那這個位的位時序構成如圖四所示。

 

圖四  


假如CAN模塊的時鐘為60MHz,那如何設置仲裁段的位速率為1Mbps和數據段的位速率為5Mbps呢?仲裁段的位速率設置跟CAN模塊的NBTP(Nominal bit timing and prescaler)寄存器相關,而數據段的位速率設置則跟DBTP(Data bit timing and prescaler)寄存器相關。

NBTP寄存器主要有NBRP(Nominal bit rate prescaler)、NTSEG1(Norminal time segment before sample point)和NTSEG2(Norminal time segment after sample point)這些位域。NBRP是分頻係數,用它對CAN時鐘分頻後得到位時序的Tq,Tq=(NBRP + 1)/CAN時鐘。NTSEG1對應位時序的傳播時間段和相位緩衝段1,有(NTSEG1 + 1)=(傳播時間段 + 相位緩衝段1)。而NTSEG2對應位時序的相位緩衝段2,則有(NTSEG2 + 1)= 相位緩衝段2。

要設置仲裁段的位速率為1Mbps,則可以設置NBRP為2,NTSEG1為13,NTSEG2為4。那Tq=(2+1)/(60Mhz)=1/20us,1個比特位的時間=[1 + (NTSEG1 + 1) + (NTSEG2 + 1)] * Tq=[1 + (13 + 1) + (4 + 1)] * 1/20us=1us。它的位速率為1/(1us)=1Mbps。當然,其它的NBRP、NTSEG1和NTSEG2組合也可以設置1Mbps的位速率。同樣的,DBTP寄存器主要有DBRP、DTSEG1和DTSEG2位域。要設置5Mbps的位速率,則可以設置DBRP為0,DTSEG1為7,DTSEG2為2。那Tq=(0 + 1)/(60Mhz)=1/60us,1個比特位的時間=[1 + (DTSEG1 + 1) + (DTSEG2 + 1)] * Tq=[1 + (7 + 1) + (2 + 1)] * 1/60us=1/5us。它的位速率為1/(1/5us)=5Mbps。

到這裡,小編就原理性地介紹完了CAN-FD仲裁段和數據段位速率的設置。

CAN收發器延遲補償機制

要在LPC54018上使用CAN-FD功能,我們還需要避免數據段的位錯誤問題。CAN規範中對位錯誤的定義為:CAN控制器比較輸出電平和總線電平,當兩電平不一樣時所檢測到的錯誤。

整個位錯誤檢測的信號迴路是這樣:

  • 首先信號從CAN控制器的Tx發出

  • 然後經過CAN收發器轉換為差分信號送到總線上

  • 而該CAN收發器實時地接收總線的差分信號,並把它轉換回數字信號再送到CAN控制器的Rx。


這個信號迴路的時間就是CAN收發器的延遲時間,它的多少主要取決於每個CAN收發器本身的一些特性。以NXP的TJA1059晶片為例,如圖五所示,大概得到隱性電平的延遲時間=td(TXD - busdom) + td(busdom - RXD)=65ns + 60ns=125ns,顯性電平的延遲時間= td(TXD - busrec) + td(busrec - RXD)=90ns + 65ns=155ns,取的是典型值。

 

圖五  


通常情況下,CAN控制器在每1位數據的相位緩衝段1結束時採樣Rx電平,如圖六和圖七所示。我們接下來看看CAN收發器傳輸延遲是如何產生位錯誤的。

 

圖六  

 

圖七  


如果Transmitter Delay Time < (Sync-Seg + Prop-Seg + Phase Buffer Seg.1),則不會因為傳輸延遲而產生位錯誤。

例如設置DBRP=0,DTSEG1=9,DTSEG2=3,得到數據段位速率為4Mbps,Tq=1/60us,並且每1位數據的採樣點時間為[1 + (DTSEG1 + 1)] * Tq=11*Tq=183ns,而TJA1059的典型延遲時間155ns(取顯性電平)比採樣點時間小,不會導致位錯誤產生。如果Transmitter Delay Time > (Sync-Seg + Prop-Seg + Phase Buffer Seg.1),則傳輸延遲會導致位錯誤產生。

例如設置DBRP=0,DTSEG1=7,DTSEG2=2,得到數據段位速率為5Mbps,Tq=1/60us,並且每1位數據的採樣點時間為[1 + (DTSEG1 + 1)] * Tq=9*Tq=150ns,而TJA1059的典型延遲時間155ns(取顯性電平)比採用點時間大,會導致位錯誤產生。


針對上述位錯誤問題,LPC54018的CAN控制器使用延遲補償機制來解決。如圖七所示,在數據段里,CAN控制器通過一定的方法檢測到延遲時間(Transmitter Delay Time),然後再經過延遲補償偏置(Transmitter Delay Compensation Offset),得到Second Sample Point,並在該採樣點對Rx電平採樣並與該位的Tx電平比較。而採樣點就在Rx的(Sync-Seg + Prog-Seg + Phase Buffer Seg.1 + Phase Buffer Seg.2) / 2時間點上。這樣,Rx採樣到的電平就與該位Tx的電平一致。用戶可以在設置數據段位速率時,使能延遲補償機制並配置延遲補償偏置。LPC54018使能CAN延遲補償機制功能需要設置DBTP寄存器的TDC位為1,而延遲補償偏置則需要設置TDCR寄存器的TDCO位。通常設置TDCO=[1 + (DTSEG1 + 1) + (DTSEG2 + 1)]/2。

 

到這裡,小編就介紹完了LPC54018 CAN-FD幾個關鍵點,希望這會對用戶理解和使用CAN-FD有些幫助。

 


更多恩智浦AI-IoT市場和產品信息,邀您同時關注“NXP客棧”微信公眾號

 

我要聯絡