基于FPGA的CAN總線(xiàn)控制器SJA1000軟核的設計
摘要:分析了CAN控制器SJA1000的特點(diǎn)及CAN協(xié)議通信格式。設計了控制器SJA1000的IP軟核,能為應用提供一個(gè)性能優(yōu)良的、易于移植的控制器SJA1000,實(shí)現了對步進(jìn)電機的控制。
關(guān)鍵詞:FPGA;CAN控制器;SJA1000
控制局域網(wǎng)(CAN)屬于現場(chǎng)總線(xiàn)的范疇,它是一種有效支持分布式控制或實(shí)時(shí)控制的串行通信網(wǎng)絡(luò )。與一般的通信總線(xiàn)相比,CAN總線(xiàn)的數據通信可靠性、實(shí)時(shí)性和靈活性好,應用領(lǐng)域非常廣泛,通?;贏(yíng)RM或51單片機,實(shí)現與CAN控制器的通信聯(lián)絡(luò )。FPGA/SOPC技術(shù)是實(shí)現嵌入式系統的最高形式,基于IP軟核的設計與應用也必將成為替代硬核的一種發(fā)展趨勢。憑借QuartuslI和NiosII工具,基于FPGA的VHDL(或Verilog)語(yǔ)言設計的IP核能夠提供靈活性和性能更好的控制器。
圖1為一個(gè)基于FPGA的控制器的CAN總線(xiàn)節點(diǎn)。其中PCA82C251是CAN總線(xiàn)接收器,SJA1000是CAN總線(xiàn)通信控制器,PMM8713是驅動(dòng)步進(jìn)電機的脈沖分配器,FPGA模塊在節點(diǎn)模型中對SJA1000進(jìn)行控制,并將接收到的幀信息進(jìn)行處理,發(fā)送給脈沖分配器,以驅動(dòng)步進(jìn)電機。
在設計中采用自頂向下的設計方法。通過(guò)分析SJA1000常用的控制芯片51單片機的功能,將其分為主要的4個(gè)模塊:初始化模塊、位查詢(xún)模塊、數據處理模塊和緩沖區釋放模塊。
對SJA1000完成控制功能的過(guò)程用狀態(tài)圖描述如圖2所示,這也是系統的主狀態(tài)機。4個(gè)狀態(tài)對應上述的4個(gè)功能模塊,首先在initial_st-ate完成對sJA1000的初始化,在由init_end信號給出初始化完成標志后,進(jìn)入查詢(xún)狀態(tài),即query_RBS狀態(tài),由位查詢(xún)模塊完成此時(shí)對SJA100 0的狀態(tài)查詢(xún)。如果查詢(xún)到SJA1000緩沖區有幀信息,將qRBS_end置“1”,進(jìn)入下一個(gè)狀態(tài)frame_cope,即幀處理狀態(tài),此時(shí)由數據處理模塊完成對緩沖區的數據讀取,并作處理。在讀取完一幀數據后,需要釋放緩沖區,為下一幀信息的接收做準備。此時(shí)狀態(tài)轉入了release_buff-er,對應功能模塊中的緩沖區釋放模塊,此狀態(tài)結束后又轉入位查詢(xún)狀態(tài),為下一幀信息接收做準備。
初始化模塊主要在系統上電或重啟后,先對SJA1000進(jìn)行初始化;位查詢(xún)模塊是在初始化完成后,對SJA1000狀態(tài)寄存器的接收緩沖區標志位不斷進(jìn)行查詢(xún),如果在緩沖區收到一幀信息后,則轉入數據處理模塊,否則繼續進(jìn)行查詢(xún);數據處理模塊則是在查詢(xún)到接收緩沖區有數據后,讀入幀數據,并對幀數據進(jìn)行處理;緩沖區釋放模塊是在一幀信息處理完畢后,釋放緩沖區空間。
除了上述4個(gè)功能模塊之外,還需要讀寫(xiě)模塊、雙端口模塊、模塊接口控制邏輯等。
評論