2019年12月30日 星期一

DSP TI TMS320F283xx eCAN module control 與 Bit-Timing設定



在設定TI DSP的eCAN module,最先要了解的是主控暫存器與Bit-Timing設定,
這篇會寫到暫存器內,有那些位元,要如何設置。另外CAN Bit-Timing的設定
會影響到與其他CAN裝置的通訊,需要仔細調試。

CAN Master control register(主控暫存器)











CANMC.SUSP:在Suspend,設為"1"為Free,持續CAN通信。設為"0"為Soft,
                             當前訊息發完就關閉。
CANMC.MBCC:設定在SCC模式下,受EALLOW保護。設為"1", 在成功收發
                             Mail16,便清除mail conunter。
CANMC.TCC:設"1"去清除Mail counter的MSB BIT,TCC Bit會在一個時鐘
                           周期後,自動清除為"0"。
CANMC.SCB:設"1"為選擇eCAN模式,設"0"為選擇SCC模式。
CANMC.CCR:改變配置請求位元,在SCC模式下,要對CANBTC、                
                           CANGAM、LAM0、LAM3寫入設定,需要先將CCR bit設為"1", 
                           並等到CANES的CCE顯示為"1"(表示同意後),才能去修改這些
                           暫存器的設定。
CAMMC.PDR:本地斷電請求,設PDR位元"1" ,請求將eCAN模組進斷電模
                            式,也包括將eCAN模組Clock關閉。
CAMMC.DBO:傳送/接收資料位元組順序,設DBO為"1",從最低位元組先傳
                             收。設為"0",則從最高位先組傳收。
CAMMC.WUBA:喚醒Bus線方式,設為"1",當Bus線上有活動,就將eCAN模
                                組從斷電模式中喚醒。設為"0",只能寫入PDR bit來喚醒。
CAMMC.CDR:改變數據區域請求,在更改CAMMC.MBNR 4:0的區塊資料之
                             前,需要先將CDR bit設為"1",在更改完後,要將CDR bit設
                             為"0"。在CDR bit為"1"時,eCAN模組不會傳送那個Mailbox的
                             內容。
CAMMC.ABO:自動Bus開啟位元,ABO設為"1"時,在Bus off狀態,在偵測到
                             第128*11個隱性位元後,自動回到Bus on狀態。ABO設
                             為"0"時,在Bus off時,要檢測到連續128*11隱性位元並且CCR
                             位元已經被清除,才會回到Bus on狀態。
CAMMC.STM:自我測試模式,在設為"1"後,進入自我測試模式,eCAN模組
                             能自已產生Ack回應,不需要在Bus上連接其他的模組,發出去
                            的資料會存在合適的mailbox,能被讀取。
CAMMC.SRES:軟體重置位元,寫入"1",就能對模組進行軟體重置,所有的
                              暫存器參數,除了被保護的,都會被重置回初始設定。
CAMMC.MBNR:有MBNR[4:0]共5個bit,MBNR[4]只有用在eCAN,在SCC無
                                效。設定Mailbox編號,CPU請求是對應的Mailbox要被用來寫
                               入料。與CDR搭配使用。


CAN傳輸速率配置


















CAN規範裡,將一個Bit Timing分成四個時間區段,裡面的單位為TQ(Time
 Quantum)圖中的TSEG1,TSEG2、SYNCSEG、SJW都是以TQ為單位。
1.SYNC_SEQ:同步節點,長度為1個TQ。
2.PROG_SEQ:用來補CAN網路裡的物理延遲時間(兩倍於Bus線上的信號傳播
                            延遲,這個延遲包括了輸入比較延遲與輸出驅動延遲),可以設
                            為1~8個TC。
3.Phase_SEG1:上升邊緣相位補償
4.Phase_SEG2:下降邊緣相位補償
5.SJW:同步跳轉寬度,用來增大或減小CAN Baudrate的容許偏差量。
5.Sample point:在每個BIT裡TSEG1與TSEG2之間,採樣點的位置,可以透過調
                              整TSEG1與TSEG2各自的長度,來調整。取樣位置不能太前也
                              不能太後面,不然可能會取到上升沿或下降沿。一般取樣位置
                               設定在50%之後,等待信號穩定再取樣,建議在75%~85%之
                               間。

CAN Bit-Timing Configuration register(位元時序設置暫存器)







CANBTC.BRPBRP為Baud rate分頻器設定,TQ=(BRP+1)/BaseCLK。
                            在283xx, 2803x的BaseCLK=SYSCLKOUT/2。
                            在281x, 280x與2801x的BaseCLK=SYSCLKOUT。
                             SYSCLKOUT是CAN module的系統時鐘。
CANBTC.TSEG1:為PROG_SEQ+Phase_SEG1
CANBTC.TSEG2:為Phase_SEQ2。
CANBTC.SJW:SJW可設定1~4個TQ,SJW的值直接影响到重同步時相位緩沖 
                             段的可調節範圍。選擇3、4可以使BUS線上獲得到更大的
                             Baudrate容許偏差量,一般的要求是3%以上。容許的偏差量太
                             低,通訊失敗的機率就會增加。
CANBTC.SAM:數據樣次數設置,"0"表示每個樣點只採1次,"1"在BRP>4
                              時每個採樣點採3次(多數決)。三次採樣是為了過濾掉Bus線上
                              的毛剌,但採用三次採樣可能會影響到SJW跳轉,所以一般
                              選用單次採樣。

Bit timing設置
當BRP設為49,BaseCLKK為SYSCLKOUT/2=75MHz,
TQ=50/75MHZ=0.667us。假設TSEG1=11個TQ,TSEG2=3個TQ
就可以得到tCAN=SYNCSEG+TSEG1+TSEG2=15個TQ=10us。
在這個範例可以設定CAN的Bit time為10us,速度為100kbit/s。



Reference
1.TMS320x2833x, 2823x DSP Enhanced Controller Area Network (eCAN) User's Guide
2.https://zhuanlan.zhihu.com/p/38299092