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