【導讀】英飛凌的芯片在汽車電子里用得可謂是頗多,剛好小編也用過,最近剛好在摸TC3系列的CAN模塊,剛好簡單寫寫。
以TC387為例,共有3個MCMCAN模塊,分別為CAN0、CAN1、CAN2。下圖是三個CAN模塊的基本參數,其中CAN0的功能最全。
從圖中可以看出,每個CAN模塊有4個CAN Node,每個Node均采用Bosch的M_CAN方法來實現,支持CAN和CANFD,最高速率為5Mbps,每個 Node有最多64個Rx Buffer,支持最多2個Rx FIFO,另外每個Node有最多32個Tx Buffer,支持最多1個Tx FIFO/Tx Queue。
其與TC2XX相比,其區(qū)別在于由原來的Message Object換成了Message RAM,增加了Pretended Networking特性,以及新增Range Filter功能。
下面就來說說細節(jié)。
01. 時鐘
首先來看看時鐘,對于CAN模塊來說,主要有Fsyn和Fasyn,如下圖所示。Fsyn 為CAN相關寄存器及Message RAM的訪問提供時鐘,Fasyn為CAN/CAN FD波特率產生提供時鐘,其中為了MCMCAN有良好的性能,需要保證 Fsyn>=Fasyn 非常重要。
02. 數據發(fā)送接收管理
數據發(fā)送接收分為Dedicated Rx/Tx Buffer和RX FIFO,其中Dedicated Rx Buffer就是每個ID對應一個Buffer,也就是FULL CAN。所有的Dedicated Rx Buffer地址必須連續(xù),并且占用的Message RAM大小必須相同。
每個Dedicated Rx Buffer寫入數據后都會被鎖住,不會再從CAN Bus上寫入新數據,直到CPU訪問完Dedicated Rx Buffer后解鎖。
Rx Buffer其實就是多個Rx Buffer組成Rx FIFO進行管理,每個CAN Node最多可以設置2個Rx FIFO,分別為Rx FIFO 0,Rx FIFO 1。每個Rx FIFO最多可以包含64個Rx Buffer數據。
Dedicated Rx Buffer和Rx FIFO都可以設置Filtering,確定CAN Bus上哪些Message被接收。
報文發(fā)送也一樣分為Dedicated Tx Buffer和Tx FIFO,不過多了一個Tx Queue,前兩者的含義也和接收管理中提到的一樣。在Tx管理中有幾個注意點的是,Dedicated Tx Buffer與Tx FIFO 或者是Tx Queue可以同時存在,但最多只能32個Tx Buffer.
對于Dedicated Tx Buffer、Tx FIFO共存而言,必須順序排布。每次發(fā)送仲裁,將所有Dedicated Tx Buffer和最老的Tx FIFO Tx Buffer比較優(yōu)先級,Message ID最小的先發(fā)送。
對于Dedicated Tx Buffer、Tx Queue共存而言,也是按照Dedicated Tx Buffer、Tx Queue的順序排布,每次發(fā)送仲裁,將所有Dedicated Tx Buffer和Tx Queue中的Tx Buffer比較優(yōu)先級,Message ID最小的先發(fā)送,Message ID相同則Tx Buffer順序在前的先發(fā)送。
03. MCAL配置
涉及的到MCU和CAN模塊,首先是設置CAN模塊的時鐘頻率,如下圖所示。
下面就是Port模塊,按照硬件接口表進行配置,比如P20.8配置為輸出,如下圖所示。
下面就是CAN模塊的配置了,配置RXDB,以及發(fā)送和棘手以及wakeup的方式,如下配的是輪詢模式,在就是CAN時鐘源,以及相應的波特率。
下面就是波特率的設置了,以及為了采樣點配置在80%左右,需要配置各個段的時間參數,這個通常主機廠有要求,按照配就是了。
再接下來配置Hardware object,包括是幀類型,是FIFO還是其他類型,以及關聯的CAN模塊。
還可以配置過濾器,如下圖所示。
最后即使配置CAN模塊的主函數的運行周期了,如下圖所示。
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理。
推薦閱讀: