摘要
本篇筆記主要記錄MPC5744p的CAN通信波特率計算,以及需要注意的問題
CAN 位時間
記得最早是在2015年就給大家推送過關于CAN通信波特率的設置,當時是以NXP的kinetis系列之KV46為例子來給大家介紹的,最近推送了幾篇有關CAN通信的文章,后臺又有人問起這個問題,今天我們就來在給大家詳細普及下,今天以NXP的汽車級芯片MPC5744p的flexCAN為例,MPC系列是基于PowerPC架構的,和ARM架構的芯片時由區別的,但NXP家的PPC架構和ARM架構如果都是flexCAN的IP,那么驅動基本上可以通用,之前的文章也可供參考。
今天我們來一步步看如何在flexcan上配置can的比特率,首先要搞明白CAN標準對位時間的定義,CAN通信波特率的計算是一個難點,要正確計算設置CAN波特率。CAN2.0協議中定義標稱位速率為一理想的發送器在沒有重新同步的情況下,每秒發送的位數量,也就是我們說的波特率。位時間由若干個時間單元(Tq)或者稱為時間份額組成。每一位的組成如下圖所示:
CAN2.0協議中規定要求每一位可以劃分為幾個不重疊時間片段,分別是:
同步段(Synchronization segment)
傳播段(Propagation segment)
相位緩沖段1(Phase segment 1)
相位緩沖段2(Phase segment 2)
同步段:
位時間的同步段用于同步總線上不同的節點。這一段內要有一個跳變沿。
傳播段:
傳播段用于補償網絡內的物理延時時間。它是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。
相位緩沖段1、相位緩沖段2(PHASESEG1、PHASE SEG2):
相位緩沖段用于補償邊沿階段的誤差。這兩個段可以通過重新同步加長或縮短。
采樣點:
采樣點是讀總線電平并解釋各位的值的一個時間點。采樣點位于相位緩沖段1(PHASE_SEG1)之后。
除過同步段是一個時間份額外,其他幾個域都在寄存器的不同位設置,需要特別注意的一點是在mscan中將傳播段和相位緩沖段放在一個寄存器中設置
更波特率配置相關的寄存器,MSCAN總線定時器0和MSCAN總線定時器1,首先來看總線定時器0
CAN波特率
對于MPC57xx系列,主要時配置寄存器CAN_CTRL1
其中PRESDIV位域就是用來設置波特率預分頻器的,也就是設置時間量子的時鐘。
首先CAN控制器的時鐘由兩個入口
CAN總線控制寄存器1主要就是來設置位時間的幾個域,TSEG1段用于設置傳播段和相位緩沖段1,TSEG2用于設置相位緩沖段2,搞清楚這幾個域的配置后,我們就可以來動手配置了,例如要求配置波特率位500k,使用總線時鐘160MHz 4分頻為CAN模塊時鐘(CAN模塊時鐘也可以配置為外部晶振,推薦正式項目,配置為外部晶振,當然如果你的板子有晶振的話),則我們可以配置如下:
預分頻配置為4,
傳輸段配置為7,則為8個時間量子
PSEG1 配置為7,則根據數據手冊描述,相位緩沖段1為8個時間量子 PSEG2配置為 2, 則根據數據手冊描述,相位緩沖段2為3個時間量子
根據CAN標準,同步段一般為一個時間量子,
則波特率計算如下
波特率 = 1/(8 + 8 + 3 + 1) * 40000000/4 = 500kbps, 同理可配置其他波特率,當然同一種波特率,這幾個域可以配為不同的值。也可以參考以下推送,里面有詳細的推導過程。
如果時采用SDK 配置, 那么SDK只需要填入波特率,便會主動分配每個段的值,但是我們還是要知道和搞清楚會自己配置。
-
CAN
+關注
關注
57文章
2744瀏覽量
463621 -
波特率
+關注
關注
2文章
307瀏覽量
34115 -
MPC5744P
+關注
關注
1文章
9瀏覽量
8159
發布評論請先 登錄
相關推薦
評論