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