基于FPGA的CAN總線控制器設計
1.2 主要模塊介紹
1.2.1 寄存器組模塊
本模塊由位寬為8bit,深度為256的寄存器組實現其功能,其中已經使用的寄存器為23個,其余的供以后擴展。本設計采用將各個獨立的控制及狀態寄存器集成在一起的設計思想,任何對控制器的初始化以及數據的接收和發送都是從寫寄存器組開始的。
1.2.2 CRC校驗模塊
CRC(循環冗余校驗碼)是一種能力非常強的檢錯、糾錯碼,常用于串行傳送的輔助存儲器與主機的數據通信和計算機網絡中。它的基本原理是:在k位信息碼后再拼接r位的校驗碼,整個編碼長度為n位,因此,這種編碼又叫(n,k)碼。對于一個給定的(n,k)碼,可以證明存在一個最高次冪位n-k=r的多項式g(x),根據g(x)可以生成七位信息的校驗碼,而g(x)叫做這個CRC碼的生成多項式。
CAN總線協議就是采用的CRC校驗,并且是16位的C R C-1 6校驗碼, 生成多項式為,可轉換為二進制碼組1100010110011001。生成CRC碼的具體過程是:由幀起始、仲裁場、控制場、數據場(數據幀有數據場,遠程幀沒有數據場)組成的被除數右移15位后與生成多項式的二進制碼組進行模2除,生成的15位余數就是所需的CRC碼。
本模塊的主要作用有兩個:1)在控制器處于發送狀態時,計算出CRC碼,同時將幀起始、仲裁場、控制場、(數據場)、CRO場按幀格式的要求進行打包;2)在控制器處于接收狀態時,將接收到的由幀起始、仲裁場、控制場、(數據場)、CRC場組成的被除數與生成多項式的二進制碼組進行模2除,結果為0,則接受數據,不為0,則丟棄數據,并產生CRC校驗錯誤。
1.2.3 立填充模塊
在CAN總線協議中,當控制器處于發送或接收狀態時,若控制器檢測到總線上出現連續6個相同極性的電平時(幀結尾除外),控制器將會檢測到錯誤而停止發送或接收數據,此時控制器將會由發送或接收狀態轉換為錯誤狀態。
本模塊的主要作用是:在發送狀態時,連續發送5個相同極性的位時,若第5位與將要發送的第6位極性不同時,在第5位和第6位之間插入1個極性與第6位相同的位,若第5位與將要發送的第6位極性相同,在第5位和第6位之間插入1個極性與第6位相反的位;在接收狀態時,連續接收5個相同極性的位時,若第6位與之前5位的極性不同,則舍棄第6位,若第6位與之前5位的極性相同,則產生位填充錯誤,控制器將停止接收數據,此時控制器也將由接收狀態轉換為錯誤狀態。同時,本模塊也具有檢測位錯誤,位填充錯誤,形式錯誤及應答錯誤的功能。另外,模塊還具有生成錯誤幀、過載幀、間歇幀的功能。
1.2.4 狀態機模塊
狀態機模塊在整個控制器中扮演著“大腦”的作用,它控制著其它模塊的操作。相比于文獻中未采用狀態機的設計,采用狀態機會使得各個模塊的功能作用更為明確,系統結構更為清晰合理,同時也更便于各個模塊之間的協調控制。本狀態機模塊的設計采用和文獻中相同的設計,將控制器分為了10種模式:總線脫離、總線啟動、總線空閑、模式選擇、發送模式、接收模式、錯誤模式、間歇模式、超載模式及掛起模式。CAN狀態機狀態轉移圖如圖2所示。本文引用地址:http://www.104case.com/article/191153.htm
評論