国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

車用CAN總線控制器的研究與設(shè)計*

2020-08-11 00:47焦繼業(yè)牛雨萌
計算機(jī)與數(shù)字工程 2020年6期
關(guān)鍵詞:緩沖器總線濾波

李 晨 焦繼業(yè) 牛雨萌

(1.西安郵電大學(xué)計算機(jī)學(xué)院 西安 710121)(2.西安郵電大學(xué)電子工程學(xué)院 西安 710121)

1 引言

CAN(Controller Area Network)即控制器局域網(wǎng)絡(luò),是由德國Bosch公司開發(fā)的一種能有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),其憑借可靠性、實(shí)時性和性價比高等突出特點(diǎn)已經(jīng)成為現(xiàn)代汽車的標(biāo)準(zhǔn)協(xié)議[1]。世界上一些著名的汽車制造廠商,如奔馳、寶馬、保時捷和勞斯萊斯等都采用了CAN總線來實(shí)現(xiàn)汽車內(nèi)部控制系統(tǒng)與各檢測和執(zhí)行機(jī)構(gòu)間的數(shù)據(jù)通信。國內(nèi)使用CAN總線技術(shù)的有奇瑞、大眾等部分汽車[2]。隨著CAN總線在汽車通信系統(tǒng)中的廣泛應(yīng)用,以SoC設(shè)計的嵌入式應(yīng)用中需要集成CAN總線控制器的要求也越來越高,雖然已有20多家公司開發(fā)了超過110多種價格便宜的CAN總線控制器芯片,但是國外CAN總線控制器的IP價格很貴[3];國內(nèi)CAN總線的IP相對較少,可移植性也不是很好[4]。針對該問題設(shè)計了一種支持CAN2.0協(xié)議的可移植性較好的車用CAN總線控制器IP核。

2 CAN總線

2.1 CAN總線特點(diǎn)

CAN總線以多主機(jī)的串行通信方式代替?zhèn)鹘y(tǒng)的點(diǎn)對點(diǎn)通信方式,減少了線束數(shù)量,降低了設(shè)備能耗,縮短了控制系統(tǒng)的控制信號以及傳感器采集的信息交換延時,提高了信息傳輸?shù)膶?shí)時性;其通信介質(zhì)選擇靈活,可以是光纖、雙絞線或電纜,通信速率可達(dá)1Mbps/40m,通信距離可達(dá)10km/40Kbps;其采用短幀結(jié)構(gòu),每個幀信息都有CRC(Cyclic Redundancy Check)校驗和其他糾錯機(jī)制,以及其總線仲裁技術(shù)[5],并且所有仲裁都不會破壞優(yōu)先級高的報文,也不會對發(fā)送產(chǎn)生任何時延[6],使得CAN總線具有強(qiáng)大的監(jiān)視與控制能力、高可靠性與故障容限。

2.2 CAN協(xié)議分層結(jié)構(gòu)

CAN協(xié)議分層結(jié)構(gòu)如圖1所示[7],物理層定義實(shí)際信號的傳輸方法,協(xié)議規(guī)范中沒有定義物理層,以便允許根據(jù)實(shí)際應(yīng)用,對發(fā)送媒體和信號電平進(jìn)行優(yōu)化。傳輸層是CAN協(xié)議的核心。它把接收到的報文提供給對象層,以及接收來自對象層的報文。傳輸層負(fù)責(zé)位定時及同步、報文分幀、仲裁、應(yīng)答、錯誤檢測和標(biāo)定、故障界定。對象層的功能是報文濾波以及狀態(tài)和報文的處理[8]。

圖1 CAN協(xié)議分層結(jié)構(gòu)

2.3 幀格式

CAN總線的數(shù)據(jù)幀的11位標(biāo)識符的標(biāo)準(zhǔn)幀格式和29位標(biāo)識符的擴(kuò)展幀格式[9],如圖2所示。

圖2 標(biāo)準(zhǔn)幀和擴(kuò)展幀幀格式

3 CAN總線控制器的設(shè)計

3.1 CAN總線控制器整體設(shè)計框圖

本文設(shè)計的CAN控制器的整體設(shè)計框圖[10],如圖3所示。CPU通過地址,輸入數(shù)據(jù)和輸出數(shù)據(jù)總線訪問CAN控制器。要傳輸?shù)南⒎湃氚l(fā)送緩沖器,由位流處理器發(fā)出。從總線上接收的消息經(jīng)過接收濾波器過濾后,放入接收FIFO。位定時邏輯模塊可產(chǎn)生的波特率范圍為125Kbaud-1Mbaud。CAN總線的接口由發(fā)送信號TX和接收信號RX提供。下面,對各模塊做具體介紹。

圖3 CAN控制器整體設(shè)計框圖

3.1.1 寄存器控制模塊

寄存器控制模塊中,本文設(shè)計了25個寄存器,用于存放CAN控制器的工作狀態(tài)、命令、中斷、要發(fā)送和接收到的的幀信息等。微控制器通過地址總線ADDRESS和數(shù)據(jù)總線WDATA、RDATA對這些寄存器的進(jìn)行讀/寫操作[11],控制CAN控制器實(shí)現(xiàn)數(shù)據(jù)的收發(fā)。

接收機(jī)模塊主要完成以下功能:按照協(xié)議中的格式,接收CAN總線上發(fā)來的消息;在接收幀起始段到數(shù)據(jù)段結(jié)束部分的過程中,用于發(fā)送方相同的生成多項式計算并更新CRC校驗值,并且在ACK(Acknowledgement)槽之前與接收到的CRC值做比較,若相同,則在ACK槽發(fā)出確認(rèn)信號;檢測接收消息中的位錯誤、位填充錯誤、CRC錯誤和格式錯誤。

如圖4是無錯情況下的接收狀態(tài)轉(zhuǎn)移圖,接收狀態(tài)機(jī)的各個狀態(tài)與協(xié)議中規(guī)定的每一段相對應(yīng),idle表示總線空閑,狀態(tài)的轉(zhuǎn)移由get_sampled、receive_finished、stuff_detected三個信號控制,get_sampled接收消息的采樣信號[12]??偩€空閑時,當(dāng)此信號有1變?yōu)?時,表示接收到了幀開始字段,接著開始接收ID(Identifier)標(biāo)識符的高11位標(biāo)識符,切換到下一個狀態(tài)的條件是receive_finished&!stuff_detected。receive_finished信號表示接收到的位數(shù)與協(xié)議對應(yīng)的應(yīng)該接收到的位數(shù)相同,即該字段接收完成。stuff_detected信號表示檢測到六個連續(xù)的相同值的位,即發(fā)生了位填充錯誤。所以,切換條件就是接收的位數(shù)夠,并且沒有發(fā)生位填充錯誤。圖中未標(biāo)出的切換條件都是(receive_finished&!stuff_detected)。當(dāng)從 rec_ide向下一個狀態(tài)切換時,若get_sampled=1,則表示接收到的是擴(kuò)展幀,下一個狀態(tài)應(yīng)該接收低18位ID標(biāo)識符,若get_sampled=0,則表示接收到的是標(biāo)準(zhǔn)幀,下一個狀態(tài)為接收填充位。當(dāng)接收完數(shù)據(jù)長度段rec_dlc時,下一狀態(tài)由rtr位決定,當(dāng)rtr=1,表示接收的是遠(yuǎn)程幀,沒有數(shù)據(jù)段,下一狀態(tài)開始接收crc段,當(dāng)rtr=0,表示是數(shù)據(jù)幀,下一狀態(tài)應(yīng)該接收數(shù)據(jù)段。

圖4 無錯情況下的接收狀態(tài)轉(zhuǎn)移圖

3.1.3 發(fā)送機(jī)模塊

發(fā)送機(jī)模塊主要完成以下功能:按照協(xié)議中的格式,檢測總線空閑時向CAN總線上發(fā)送消息;在發(fā)送幀起始段到數(shù)據(jù)段結(jié)束部分的過程中,用與接收方相同的生成多項式計算并更新CRC校驗值;檢測發(fā)送消息中的ACK錯誤、位填充錯誤和位錯誤。

如圖5所示,是沒有過載、錯誤情況下的發(fā)送狀態(tài)轉(zhuǎn)移圖[13]。!tr&!srr_transmit為真時,表示消息傳輸中止,回到idle狀態(tài)。sent_bits_ok表示對應(yīng)的比特位已經(jīng)正常發(fā)送,它為真時,則跳變到下一狀態(tài)。CAN總線中的各節(jié)點(diǎn)在向總線發(fā)送電平的同時,也會讀取總線上的電平,從仲裁段的第一位開始進(jìn)行仲裁,當(dāng)該節(jié)點(diǎn)失去仲裁時,則退出發(fā)送狀態(tài),變?yōu)榻邮諣顟B(tài),直到下一次總線空閑的時再參與總線的仲裁競爭。總線上其余的節(jié)點(diǎn)繼續(xù)上述過程,直到總線上只剩下1個節(jié)點(diǎn)在發(fā)送的電平。圖中所有的由sent狀態(tài)變?yōu)閞ec狀態(tài)都是因為失去仲裁。例如,由sent_std_id到rec_std_id和rec_srr狀態(tài)的轉(zhuǎn)變就是因為該節(jié)點(diǎn)在仲裁競爭中失利變?yōu)榻邮諣顟B(tài)。不同的是在失去仲裁時,std_id是否發(fā)送完,完成則進(jìn)入到rec_srr,否則進(jìn)到rec_std_id。圖中由sent_ide向下一狀態(tài)轉(zhuǎn)變時,分為兩路,當(dāng)滿足條件ide段發(fā)送完成后,若檢測eff位,為真時,即sent_bits_ok&eff,表示正在發(fā)送擴(kuò)展幀,下一發(fā)送狀態(tài)應(yīng)該為發(fā)送擴(kuò)展id部分,否則,即sent_bits_ok&!eff,表示正在發(fā)送標(biāo)準(zhǔn)幀,下一發(fā)送狀態(tài)應(yīng)該為發(fā)送填充位r0。同理,由sent_dlc向下一狀態(tài)轉(zhuǎn)變時,分為兩路,一路是發(fā)送遠(yuǎn)程幀,沒有數(shù)據(jù)段,即sent_bits_ok&remote,下一狀態(tài)為發(fā)送crc段,另一路是數(shù)據(jù)幀,即sent_bits_ok&!remote,下一狀態(tài)為發(fā)送數(shù)據(jù)段。

圖5 沒有過載、錯誤情況下的發(fā)送狀態(tài)轉(zhuǎn)移圖

3.1.4 接收濾波模塊

在CAN網(wǎng)絡(luò)中,所有節(jié)點(diǎn)都接收在總線上傳輸?shù)南?,接收濾波模塊的功能就是實(shí)現(xiàn)節(jié)點(diǎn)忽略與其無關(guān)的消息。每條消息仲裁場中的ID標(biāo)識符與節(jié)點(diǎn)的標(biāo)識符進(jìn)行匹配,決定是否接收這條消息。

本文設(shè)計中的接收濾波器由四個八位的接收碼寄存器ACR0、ACR1、ACR2、ACR3和四個八位接收屏蔽寄存器 AMR0、AMR1、AMR2、AMR3來定義[14]。ACR寄存器是預(yù)設(shè)的接收碼值,AMR寄存器是選擇ACR對應(yīng)位是否對接收濾波有效。濾波器既可以作為單個4字節(jié)濾波器應(yīng)用,也可以作為兩個較短濾波器應(yīng)用。通過模式寄存器MOD的AFM位進(jìn)行選擇。若使用兩個濾波器,標(biāo)識符與任一濾波器匹配,則接收該消息。

總體來說美國倦怠科室穩(wěn)中有變,重癥醫(yī)學(xué)和急診醫(yī)學(xué)倦怠高發(fā),家庭醫(yī)學(xué)最近兩年都有上榜。重癥醫(yī)學(xué)和急診醫(yī)學(xué)的倦怠發(fā)生比率一直都很高,這似乎不意外,但是家庭醫(yī)學(xué)醫(yī)生在近三年都表現(xiàn)了比較高的倦怠(2016年排名第4,2017年排名第3,2018年排名第3)。我國為了解決基本醫(yī)療資源不足的問題,從2011年起開始在全國推行家庭醫(yī)生制度,家庭醫(yī)生群體會逐漸擴(kuò)大,一般認(rèn)為家庭醫(yī)生服務(wù)較基礎(chǔ),患者需求較簡單,但從美國經(jīng)驗看,仍然需要關(guān)注這個群體的任務(wù)量,預(yù)防可能的職業(yè)倦怠。

對于標(biāo)準(zhǔn)幀,11位標(biāo)識符、RTR位、數(shù)據(jù)場前兩個字節(jié)參與濾波;對于擴(kuò)展幀,29位標(biāo)識符和RTR位參與濾波。幀的濾波預(yù)設(shè)值和屏蔽碼與接收緩沖器中的ID和數(shù)據(jù)段的對應(yīng)關(guān)系如圖6所示,復(fù)位模式下對ACR和AMR的值進(jìn)行設(shè)置。

圖6 幀的濾波預(yù)設(shè)值和屏蔽碼與接收緩沖器中的ID和數(shù)據(jù)段的對應(yīng)關(guān)系

3.1.5 位時序邏輯模塊

位時序邏輯模塊主要完成產(chǎn)生波特率;總線同步;確定采樣、發(fā)送點(diǎn)的位置三個功能。

本文設(shè)計中,先由由振蕩器周期Tclk分頻得出系統(tǒng)時鐘周期Tclockout,即單位時間。CAN總線協(xié)議規(guī)定的一個位的傳輸時間如圖7所示,四個時間段都是個單位時間的整數(shù)倍,而倍數(shù)由總線時序寄存器BTR1的設(shè)置計算出各位定時段的長度。每一位的傳輸時間為Tbit=Tss+Tpts+Tpbs1+Tpbs2,則總線波特率為1/Tbit。

本文設(shè)計中采樣點(diǎn)在如圖7中采樣點(diǎn)1的位置上,也可通過將BTR1中的SAM位置位進(jìn)行多次采樣求平均值,其他兩個采樣點(diǎn)之間分別間隔一個單位時間;發(fā)送點(diǎn)如圖7中所示,在與SS同步的位置上。

圖7 位時間圖

CAN總線協(xié)議使用同步機(jī)制解決節(jié)點(diǎn)工作頻率上的細(xì)微導(dǎo)致的采樣點(diǎn)偏離,甚至產(chǎn)生接收錯誤的問題[15]。在每一幀數(shù)據(jù)傳輸?shù)拈_始,通過一個下降沿(幀起始)來完成,此時不管有沒有相位誤差,所有節(jié)點(diǎn)的位時間重新開始(硬同步)。在每一幀數(shù)據(jù)的傳輸過程中,若節(jié)點(diǎn)發(fā)現(xiàn)自己和總線上的時鐘不同步時,通過比較edge_time_quanta和nominal_sample_time_quanta的大小確定沿變化發(fā)生在PBS1還是PBS2段中,若在PBS1段中則表示是沿晚到了edge_time_quanta個單位時間,則在PBS1段加上晚到的時間長度以重新同步;若在PBS2段中則表示是沿提前了edge_time_quanta-nominal_bit_time_quanta個單位時間,則在PBS2段減去提前的時間長度以重新同步。其中edge_time_quanta表示從每一位開始到沿變化的單位時間數(shù);nominal_sample_time_quanta表示從每一位開始到未同步前的采樣點(diǎn)的單位時間數(shù);nominal_bit_time_quanta表示定義的一個位的單位時間數(shù)。

3.1.6 接收FIFO模塊和發(fā)送緩沖器模塊

若接收到的消息沒錯誤,且經(jīng)過了驗收濾波,CAN控制器會將接收到的報文存儲到接收FIFO中。本文設(shè)計的接收FIFO是同步FIFO,深度為64字節(jié),以循環(huán)方式使用,一次最多可容納五個擴(kuò)展幀格式消息。CPU通過作為接收緩沖器的13字節(jié)窗口訪問接收FIFO,接收FIFO和接收緩沖器的配合,使得CPU可以在處理一條消息的同時接收另一條消息。

本文設(shè)計使用兩個指針read_ptr,write_ptr來指示數(shù)據(jù)可以被讀/寫的位置,即讀/寫地址。對于讀指針read_ptr,每讀完一幀,指針值就要加上讀出的幀長度,也就是釋放的消息長度released_message_length;對于寫指針write_ptr,每寫完一幀,其值加上存儲幀的長度,也就是根據(jù)接收消息中的仲裁和控制段計算出的需要的存儲空間的長度req_storage_space。若寫fifo操作,并且fifo中剩余的存儲空間小于需要的存儲空間,即(write_strobe&free_byte<req_storage_space),就 會產(chǎn)生數(shù)據(jù)溢出,并發(fā)出溢出信號dos_int,通知CPU來處理。其中,write_strobe表示寫操作信號,free_byte表示FIFO剩余空間。

與接收緩沖器的類似,本文設(shè)計的發(fā)送緩沖器也是13字節(jié),可以一次存儲一條完整的消息。消息由CPU寫入發(fā)送緩沖器,由位流處理器中的發(fā)送機(jī)發(fā)送出去。

4 FPGA驗證

CAN控制器掛接在SoC系統(tǒng)中,采用Xilinx Vivado工具綜合出門級網(wǎng)表電路,下載到Xilinx XC7K410T FPGA開發(fā)板,作為CAN節(jié)點(diǎn),另一個CAN節(jié)點(diǎn)由CANmini分析儀來充當(dāng)。[4]使用Keil軟件配置相關(guān)寄存器,編寫測試程序,下載到開發(fā)板中。測試程序以標(biāo)準(zhǔn)幀格式消息的發(fā)送和接收做驗證。驗證環(huán)境如圖8所示。

圖8 驗證環(huán)境

消息的發(fā)送:上電后,開發(fā)板會發(fā)出一幀標(biāo)準(zhǔn)數(shù)據(jù)幀,CAN分析儀這邊使能接收,因為CAN分析儀的濾波功能不需要測試,所以這里不設(shè)置濾波預(yù)設(shè)值,接收到的數(shù)據(jù)在CAN分析儀調(diào)試軟件ECANTools下方的收發(fā)列表中顯示,如圖10中第一行所示。測試程序中發(fā)送的消息是0×05,0×00,0×20,0×01,0×02,圖9為標(biāo)準(zhǔn)幀在緩沖器中存儲格式,按照上述格式解析,收到的ID號應(yīng)該為0×001(ECANTools中不管是標(biāo)準(zhǔn)幀還是擴(kuò)展幀都統(tǒng)一按32位顯示,所以中ID會顯示為0×0001,下述接收到的0×003也是相同原因),數(shù)據(jù)長度應(yīng)該為0×05,數(shù)據(jù)部分應(yīng)該為0×01,0×02,0×00,0x00,0×00(未寫數(shù)據(jù)部分自動填充為0)。圖10中數(shù)據(jù)表明CAN控制器發(fā)送正常。

圖9 標(biāo)準(zhǔn)幀在緩沖器中存儲格式

圖10 CAN分析儀接收和發(fā)出數(shù)據(jù)

消息的接收:CAN分析儀發(fā)出一幀數(shù)據(jù)幀,如下圖10中收發(fā)列表中第二行所示,ID是0×0003,長度是0×08,數(shù)據(jù)部分為0×07,0×08,0×00,0×00,0×00,0×00,0×00,0×00。CAN控制器接收到這幀數(shù)據(jù)后,開始匹配濾波器中的ID標(biāo)識符,確定是接收這條消息還是丟棄這條消息。此時,CAN控制器設(shè)置為濾波預(yù)設(shè)值為0×00,0×60,0×00,0×00,屏蔽碼為0×00,0×00,0×FF,0×FF,為單濾波模式。如圖11所示,是接收到的消息按字節(jié)顯示的結(jié)果,顯然是通過了濾波,按照圖9的格式解析,0×08表示收到的長度為8個字節(jié);0×00,0×60部分是ID標(biāo)識符,0×60對應(yīng)的二進(jìn)制數(shù)為0110 0000,所以接收的數(shù)據(jù)幀的ID為0000 0000 011,即為0×003,數(shù)據(jù)部分為0×07,0×08,0×00,0×00,0×00,0×00,0×00,0×00。圖11中結(jié)果表明CAN控制器接收正常。

圖11 keil中觀察到的CAN控制器接收到的數(shù)據(jù)

5 結(jié)語

本文設(shè)計的基于CAN2.0協(xié)議的車用CAN控制器集成在Cortex-M0 SoC處理器內(nèi),通過軟件驅(qū)動實(shí)現(xiàn)通信。實(shí)驗表明,該控制器可以實(shí)現(xiàn)符合協(xié)議的數(shù)據(jù)傳輸。同時該控制器的可移植性使其可以復(fù)用于SoC設(shè)計中,具有良好的應(yīng)用前景。但現(xiàn)代汽車中信息種類多而復(fù)雜,本文的濾波方案只能滿足一些規(guī)律性較高的或個數(shù)較少的標(biāo)識符的過濾,為了增加標(biāo)識符的任意性,今后將會對濾波方案做進(jìn)一步的優(yōu)化。

猜你喜歡
緩沖器總線濾波
動車組車鉤緩沖裝置橡膠緩沖器失效機(jī)理分析及優(yōu)化*
更正
關(guān)于CAN總線的地鐵屏蔽門控制思路論述
8編組A型車緩沖器選型對比分析
一種考慮GPS信號中斷的導(dǎo)航濾波算法
機(jī)車用MT-3型緩沖器壓裝方式改進(jìn)
高效LCL濾波電路的分析與設(shè)計
基于多窗口中值濾波和迭代高斯濾波的去除圖像椒鹽噪聲的方法
Q&A熱線
PCI9030及其PCI總線接口電路設(shè)計