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