當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于FPGA的CAN總線控制器SJA1000軟核的設(shè)計(jì)

摘要:分析了CAN控制器SJA1000的特點(diǎn)及CAN協(xié)議通信格式。設(shè)計(jì)了控制器SJA1000的IP軟核,能為應(yīng)用提供一個(gè)性能優(yōu)良的、易于移植的控制器SJA1000,實(shí)現(xiàn)了對(duì)步進(jìn)電機(jī)的控制。
關(guān)鍵詞:FPGA;CAN控制器;SJA1000

    控制局域網(wǎng)(CAN)屬于現(xiàn)場(chǎng)總線的范疇,它是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò)。與一般的通信總線相比,CAN總線的數(shù)據(jù)通信可靠性、實(shí)時(shí)性和靈活性好,應(yīng)用領(lǐng)域非常廣泛,通常基于ARM或51單片機(jī),實(shí)現(xiàn)與CAN控制器的通信聯(lián)絡(luò)。FPGA/SOPC技術(shù)是實(shí)現(xiàn)嵌入式系統(tǒng)的最高形式,基于IP軟核的設(shè)計(jì)與應(yīng)用也必將成為替代硬核的一種發(fā)展趨勢(shì)。憑借QuartuslI和NiosII工具,基于FPGA的VHDL(或Verilog)語(yǔ)言設(shè)計(jì)的IP核能夠提供靈活性和性能更好的控制器。
    圖1為一個(gè)基于FPGA的控制器的CAN總線節(jié)點(diǎn)。其中PCA82C251是CAN總線接收器,SJA1000是CAN總線通信控制器,PMM8713是驅(qū)動(dòng)步進(jìn)電機(jī)的脈沖分配器,F(xiàn)PGA模塊在節(jié)點(diǎn)模型中對(duì)SJA1000進(jìn)行控制,并將接收到的幀信息進(jìn)行處理,發(fā)送給脈沖分配器,以驅(qū)動(dòng)步進(jìn)電機(jī)。


    在設(shè)計(jì)中采用自頂向下的設(shè)計(jì)方法。通過(guò)分析SJA1000常用的控制芯片51單片機(jī)的功能,將其分為主要的4個(gè)模塊:初始化模塊、位查詢模塊、數(shù)據(jù)處理模塊和緩沖區(qū)釋放模塊。
    對(duì)SJA1000完成控制功能的過(guò)程用狀態(tài)圖描述如圖2所示,這也是系統(tǒng)的主狀態(tài)機(jī)。4個(gè)狀態(tài)對(duì)應(yīng)上述的4個(gè)功能模塊,首先在initial_st-ate完成對(duì)sJA1000的初始化,在由init_end信號(hào)給出初始化完成標(biāo)志后,進(jìn)入查詢狀態(tài),即query_RBS狀態(tài),由位查詢模塊完成此時(shí)對(duì)SJA100 0的狀態(tài)查詢。如果查詢到SJA1000緩沖區(qū)有幀信息,將qRBS_end置“1”,進(jìn)入下一個(gè)狀態(tài)frame_cope,即幀處理狀態(tài),此時(shí)由數(shù)據(jù)處理模塊完成對(duì)緩沖區(qū)的數(shù)據(jù)讀取,并作處理。在讀取完一幀數(shù)據(jù)后,需要釋放緩沖區(qū),為下一幀信息的接收做準(zhǔn)備。此時(shí)狀態(tài)轉(zhuǎn)入了release_buff-er,對(duì)應(yīng)功能模塊中的緩沖區(qū)釋放模塊,此狀態(tài)結(jié)束后又轉(zhuǎn)入位查詢狀態(tài),為下一幀信息接收做準(zhǔn)備。


    初始化模塊主要在系統(tǒng)上電或重啟后,先對(duì)SJA1000進(jìn)行初始化;位查詢模塊是在初始化完成后,對(duì)SJA1000狀態(tài)寄存器的接收緩沖區(qū)標(biāo)志位不斷進(jìn)行查詢,如果在緩沖區(qū)收到一幀信息后,則轉(zhuǎn)入數(shù)據(jù)處理模塊,否則繼續(xù)進(jìn)行查詢;數(shù)據(jù)處理模塊則是在查詢到接收緩沖區(qū)有數(shù)據(jù)后,讀入幀數(shù)據(jù),并對(duì)幀數(shù)據(jù)進(jìn)行處理;緩沖區(qū)釋放模塊是在一幀信息處理完畢后,釋放緩沖區(qū)空間。
    除了上述4個(gè)功能模塊之外,還需要讀寫(xiě)模塊、雙端口模塊、模塊接口控制邏輯等。[!--empirenews.page--]

1 讀寫(xiě)模塊
    由SJA1000的數(shù)據(jù)手冊(cè)可知,SJA1000提供的微處理器接口信號(hào)有地址數(shù)據(jù)復(fù)用總線AD0~AD7、地址鎖存信號(hào)ALE、片選信號(hào)、讀寫(xiě)使能信號(hào)和、以及復(fù)位信號(hào)。
    SJA1000的數(shù)據(jù)信號(hào)和地址信號(hào)是時(shí)分復(fù)用的,而FPGA中不存在地址的概念,對(duì)于FPGA來(lái)說(shuō),輸出的只有數(shù)據(jù)。因此設(shè)計(jì)的關(guān)鍵就是把S-JA1000中的寄存器地址當(dāng)成數(shù)據(jù)寫(xiě)入到SJA1000中,配合地址鎖存信號(hào)ALE和寫(xiě)允許信號(hào)完成對(duì)SJA1000特定寄存器的命令字寫(xiě)入。讀寫(xiě)使能信號(hào)是、以及復(fù)位信號(hào)。設(shè)計(jì)的關(guān)鍵就是把SJA1000中的寄存器地址當(dāng)成數(shù)據(jù)寫(xiě)入到SJA1000中,配合地址鎖存信號(hào)ALE和寫(xiě)允許信號(hào)完成對(duì)SJA1000特定寄存器的命令字寫(xiě)入。與寫(xiě)操作相似,只需嚴(yán)格按照時(shí)序,將ALE、、、引腳的電平互相配合置高或置低,即可完成讀操作。讀寫(xiě)周期時(shí)序圖如圖3和圖4所示。


    設(shè)計(jì)時(shí)采用狀態(tài)機(jī)的形式,由讀寫(xiě)時(shí)序圖可以看到,與SJA1000讀寫(xiě)相關(guān)的控制信號(hào)有ALE、、、。無(wú)論讀寫(xiě),都必須先輸出地址,由接口控制邏輯模塊輸入地址。AD[7..0]是數(shù)據(jù)雙向流通的,由雙端口模塊組成,讀寫(xiě)模塊與之相接口,輸入、輸出設(shè)計(jì)分開(kāi)。讀寫(xiě)模塊在與接口控制邏輯接口模塊相連接時(shí),輸出的數(shù)據(jù)與輸入的數(shù)據(jù)也設(shè)計(jì)分開(kāi)。同樣讀寫(xiě)模塊的開(kāi)啟信號(hào)與讀/寫(xiě)選擇信號(hào)也由接口控制邏輯給出。由QuartuslI生成的讀寫(xiě)模塊如圖5所示。


    在IDLE狀態(tài)等待,當(dāng)4個(gè)功能模塊中需要使用讀寫(xiě)功能時(shí),由接口控制模塊控制使該功能模塊與讀寫(xiě)模塊連接,相應(yīng)的功能模塊輸出地址到讀寫(xiě)模塊,接口控制模塊配合給出讀寫(xiě)選擇信號(hào),然后進(jìn)入address狀態(tài),輸出地址到SJA1000,判斷讀寫(xiě)選擇信號(hào)后,進(jìn)入讀狀態(tài)或者寫(xiě)狀態(tài)。在讀寫(xiě)子狀態(tài)只需按照時(shí)序圖輸出ale、cs、wr、rd的值即可,標(biāo)志信號(hào)w_ok表示一次讀/寫(xiě)完成。
    在SJA1000的讀寫(xiě)過(guò)程中,對(duì)各個(gè)信號(hào)的持續(xù)時(shí)間有著嚴(yán)格的要求。以讀操作為例,信號(hào)的有效持續(xù)時(shí)間必須最大為50 ns,因此在設(shè)計(jì)中,信號(hào)保持低電平的時(shí)間可以比這個(gè)時(shí)間長(zhǎng)。
[!--empirenews.page--]
2 接口控制邏輯模塊
    接口控制邏輯是本系統(tǒng)的核心模塊,它與4個(gè)功能模塊、讀寫(xiě)模塊相連接,由一個(gè)狀態(tài)機(jī)組成,即系統(tǒng)的主狀態(tài)機(jī)。在狀態(tài)機(jī)的不同狀態(tài)中,控制讀寫(xiě)狀態(tài)機(jī)與對(duì)應(yīng)的功能模塊相連接,3個(gè)模塊互相配合完成一項(xiàng)功能。QuartuslI生成的模塊圖如6所示。


    每一個(gè)功能模塊都有對(duì)應(yīng)的接口信號(hào),而data_in_infer、addr_out_infer、data_in_infer、w_ok_in、r_ok_in是讀寫(xiě)模塊的信號(hào)接口。
    需要注意的是,本系統(tǒng)中使用了主從狀態(tài)機(jī),即狀態(tài)機(jī)的嵌套。在主狀態(tài)進(jìn)入初始化狀態(tài)機(jī)后,立即給出一個(gè)enable信號(hào),啟動(dòng)從狀態(tài)機(jī),并設(shè)置一個(gè)從狀態(tài)機(jī)的完成信號(hào)finish(高電平有效),且初始值為低,然后在主狀態(tài)機(jī)不停的檢測(cè)finish信號(hào),如果finish為高,則進(jìn)入下一個(gè)狀態(tài),查詢狀態(tài)。而在從狀態(tài)機(jī)中,則不停地檢測(cè)enable信號(hào),如果為高,則開(kāi)始工作,當(dāng)完成從狀態(tài)機(jī)后,將finish信號(hào)置高。如此就完成了主從狀態(tài)機(jī)的互動(dòng)。接口控制邏輯模塊中的start、end信號(hào)即為系統(tǒng)主從狀態(tài)機(jī)互動(dòng)信號(hào)。

3 初始化模塊
    初始化模塊的功能是完成SJA1000的初始化。CAN2.0B規(guī)范允許SJA1000工作在兩種模式,即BasicCAN模式和PeliCAN模式,上電默認(rèn)為BasicCAN模式。在兩種模式下都需要對(duì)SJA1000的模式寄存器CR、驗(yàn)收碼寄存器ACR、驗(yàn)收屏蔽寄存器AMR、總線定時(shí)寄存器BTR0、BTR1和輸出控制寄存器OCR寫(xiě)入控制命令。
    在本設(shè)計(jì)中,借用ROM的思想,將需要讀寫(xiě)的寄存器地址和數(shù)據(jù)統(tǒng)一編碼,固化存儲(chǔ)起來(lái),對(duì)SJA1000進(jìn)行讀寫(xiě)時(shí),只需要按照一定的順序讀出數(shù)據(jù)和地址,輸出到即可。

4 位查詢模塊
    位查詢模塊主要功能是在SJA1000轉(zhuǎn)入工作模式后能夠讀取存在接受緩沖區(qū)RXFIFO的幀信息,在本設(shè)計(jì)中讀取幀信息采用了查詢方式,即不停地查詢SJA1000狀態(tài)寄存器SR的RBS位,如果查詢到RBS位為“1”,即表明接收緩沖區(qū)滿,RXFIFO中有可用信息,此時(shí)將轉(zhuǎn)入數(shù)據(jù)處理模塊,由數(shù)據(jù)處理模塊進(jìn)行數(shù)據(jù)讀入,并進(jìn)行處理。在查詢過(guò)程中,對(duì)SJA1000的狀態(tài)寄存器進(jìn)行了讀操作。

5 數(shù)據(jù)處理模塊
    數(shù)據(jù)處理模塊功能是從SJA1000的緩沖區(qū)讀入數(shù)據(jù),并作處理。在讀入數(shù)據(jù)時(shí),只需將輸出的地址定位到SJA1000接收緩沖區(qū)的數(shù)據(jù)場(chǎng)依次將數(shù)據(jù)從緩沖區(qū)讀入即可。在CAN總線的通信中,發(fā)送的為幀信息,其數(shù)據(jù)幀結(jié)構(gòu)如圖7所示。


    在對(duì)數(shù)據(jù)進(jìn)行處理時(shí),前16位為ID,有用的數(shù)據(jù)是在幀中的數(shù)據(jù)場(chǎng)(Data Field)中,因此只需略過(guò)前16位,對(duì)后面最多8個(gè)字節(jié)的數(shù)據(jù)進(jìn)行處理,分配到步進(jìn)電機(jī)的引腳上即可。

6 緩沖區(qū)釋放模塊與雙端口模塊
    在緩沖區(qū)的數(shù)據(jù)被讀入后,需要對(duì)緩沖區(qū)的數(shù)據(jù)清零,為后續(xù)的數(shù)據(jù)讀入做準(zhǔn)備。本質(zhì)上仍是對(duì)SJA1000的命令寄存器(CMR)寫(xiě)操作。在狀態(tài)寄存器與接收緩沖區(qū)相關(guān)的位為RRB,置1即可釋放緩沖區(qū),這樣就會(huì)導(dǎo)致接收緩沖區(qū)內(nèi)的另一條信息立即有效,從而進(jìn)入下一幀數(shù)據(jù)的數(shù)據(jù)查詢、處理過(guò)程。
    在本設(shè)計(jì)中,輸出的數(shù)據(jù)引腳為雙向引腳,設(shè)計(jì)成三態(tài)輸出,這是因?yàn)殡p向端口在完成輸入功能時(shí),必須使端口處于高阻態(tài),否則外部數(shù)據(jù)不能正確讀入。
    其設(shè)計(jì)關(guān)鍵在于,實(shí)體部分必須對(duì)端口屬性進(jìn)行申明,端口屬性必須為inout類(lèi)型,在構(gòu)造體對(duì)輸出信號(hào)進(jìn)行有條件的高阻控制。

結(jié)語(yǔ)
    CAN總線接口控制器由VHDL語(yǔ)言描述,易于修改和移植,可以將幾個(gè)軟核集成到一個(gè)FPGA芯片上去,具有單片機(jī)所沒(méi)有的優(yōu)勢(shì),在汽車(chē)領(lǐng)域具有良好的應(yīng)用前景。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉