一種新型can fd控制器的制造方法
【專利摘要】本發(fā)明公開了一種新型CAN FD控制器,CAN FD總狀態(tài)機(jī)調(diào)控CAN FD控制器整體功能及工作狀態(tài),發(fā)送管理器發(fā)送所有類型的幀及ACK信號,接收管理器監(jiān)視總線,分析總線接收的數(shù)據(jù),時鐘同步器根據(jù)用戶設(shè)定及總線信號,控制位時鐘周期,提供總線值采樣點(diǎn)及采樣值,錯誤管理模塊對節(jié)點(diǎn)錯誤進(jìn)行統(tǒng)計(jì)計(jì)數(shù),將計(jì)數(shù)值反應(yīng)為節(jié)點(diǎn)錯誤狀態(tài)ES和總線狀態(tài)BS信息,寄存器組集中管理寄存器,接口管理器解析來自微控制器的指令,將地址信息譯碼為對應(yīng)寄存器的選通信號;該新型CAN FD控制器基于CAN FD總線通信協(xié)議規(guī)范與微波功率分布式控制系統(tǒng)的實(shí)際需求,性能優(yōu)越,具有重要的實(shí)際工程意義。
【專利說明】
一種新型CAN FD控制器
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于CAN控制器技術(shù)領(lǐng)域,尤其涉及一種新型CAN ro控制器。
【背景技術(shù)】
[0002] 微波作為一種具有獨(dú)特作用機(jī)理的新型熱源,在物料烘干、高溫?zé)Y(jié)、冶煉萃取等 方面具有天然優(yōu)勢,在食品、農(nóng)業(yè)、輕工、化學(xué)等領(lǐng)域得到廣泛應(yīng)用。
[0003] 以微波作為熱源的褐煤干燥生產(chǎn)線相較于傳統(tǒng)的對流干燥,具有安全高效節(jié)能環(huán) 保等顯著優(yōu)勢。根據(jù)南京三樂公司微波褐煤干燥生產(chǎn)線的實(shí)際需求,設(shè)計(jì)了目前的微波功 率分布式控制系統(tǒng)。該分布式控制系統(tǒng)通過CAN總線連接上位機(jī)與各分布于生產(chǎn)線上的嵌 入式控制器節(jié)點(diǎn)從而實(shí)現(xiàn)數(shù)據(jù)交換,作為業(yè)界公認(rèn)的最有前途的現(xiàn)場總線,CAN總線能有效 支持這種分布式、實(shí)時控制系統(tǒng),更重要的是,CAN總線協(xié)議特有的非破壞性仲裁技術(shù)、高效 的錯誤檢測能力以及可靠的編碼機(jī)制。在微波干燥生產(chǎn)線的高實(shí)時性要求和強(qiáng)電磁場環(huán)境 下能夠有效地保證數(shù)據(jù)傳輸質(zhì)量。
[0004] 隨著研究的不斷進(jìn)展,控制系統(tǒng)對總線傳輸性能的要求不斷提高。首先將CAN總線 傳輸介質(zhì)由雙絞線替換為光纖,有效地提高信號傳輸過程中抗強(qiáng)電磁場干擾能力,但由此 增加的光電轉(zhuǎn)換模塊將在信號回路中增加約300ns的總延時,此時要達(dá)到1Mbps的CAN 2.0 協(xié)議極限傳輸速度,CAN網(wǎng)絡(luò)的尺寸必須限制在直徑10米以內(nèi),而生產(chǎn)線長度遠(yuǎn)超過10米。 因此CAN總線傳輸速度將比原來降低。
[0005] 另一方面,上位機(jī)及各嵌入式控制器增加了新的功率智能協(xié)調(diào)控制算法,需要接 收更精確、更豐富、更及時的生產(chǎn)線上數(shù)據(jù)并及時發(fā)布功率控制命令;與此對應(yīng)的,生產(chǎn)線 沿線上需加裝更多高精度傳感器,回傳更加密集的數(shù)據(jù);節(jié)點(diǎn)之間為實(shí)現(xiàn)協(xié)調(diào)配合也會進(jìn) 一步增加傳輸數(shù)據(jù)量。
[0006] 以上兩點(diǎn)都要求現(xiàn)場總線能提供更高效、準(zhǔn)確的數(shù)據(jù)傳輸服務(wù),而一個標(biāo)準(zhǔn)的CAN 2.0數(shù)據(jù)幀中最多能攜帶8字節(jié)數(shù)據(jù),其冗余信息約占幀長的46%,且實(shí)際應(yīng)用速度遠(yuǎn)低于 設(shè)計(jì)最高速度的IMbps,相較之下,BOSCH公司發(fā)布的CAN 2.0協(xié)議的升級協(xié)議:CAN-FD (CAN with Flexible Data rate)協(xié)議,其傳輸速率能夠輕易超過1Mbps,且冗余信息可縮小至僅 占幀長的11 %,CAN FD改進(jìn)后的編碼方式錯誤漏檢率在CAN 2.0的基礎(chǔ)上又下降了5個數(shù)量 級,能夠滿足當(dāng)下及未來的升級需求。
[0007] 因此,依據(jù)該分布式控制系統(tǒng)的實(shí)際需求而設(shè)計(jì)可集成于項(xiàng)目嵌入式控制板卡的 基于FPGA的CAN FD控制器,具有實(shí)際的工程意義。
[0008] 2012年5月,博世和Vector首次演示了使用遵循ISO 11898-2規(guī)范的收發(fā)器芯片, 速率達(dá)15Mbps的CAN-Π )網(wǎng)絡(luò)模型。除了能夠增加傳輸速度外,該協(xié)議還能夠支持更高的負(fù) 載。在單個數(shù)據(jù)框架內(nèi)傳送率可達(dá)64字節(jié),避免了經(jīng)常發(fā)生的數(shù)據(jù)分裂狀況,解決了數(shù)據(jù)一 致性的問題。
[0009] 2014年6月,力科發(fā)布業(yè)界首個CAN ro觸發(fā)和解碼解決方案。
[0010] 2014年7月,嵌入式廠商Spansion公司宣布開始供應(yīng)Spansion Traveo汽車微控制 器S6J3100系列的樣品。該系列主要特點(diǎn)就是使用CAN FD接口來增強(qiáng)車載網(wǎng)絡(luò)。
[0011] 2014年12月,羅德與施瓦茨公司的發(fā)布RTE和RT0示波器新選件,它們是世界上首 款支持CAN-FD接口協(xié)議測試分析解決方案的設(shè)備。
[0012] 2016年嵌入式電子與工業(yè)電腦應(yīng)用展覽會上,意法半導(dǎo)體發(fā)布汽車嵌入式解決方 案,包括首個集成ISO CAN FD(靈活數(shù)據(jù)速率)技術(shù)的Power Architecture微控制器。
[0013] 2011年M.Barranco使用隨機(jī)行為網(wǎng)絡(luò)搭建模型對總線型及星形拓?fù)浣Y(jié)構(gòu)的CAN網(wǎng) 絡(luò)可靠性進(jìn)行了定量研究,著重比較了他們在永久性硬件故障情況下的可靠性和容錯性, 最終結(jié)果表明星形拓?fù)浣Y(jié)構(gòu)的CAN網(wǎng)絡(luò)具有更高的可靠性和容錯性。
[0014] 2011年萊斯特大學(xué)Imran Sheikh以改善CAN通信系統(tǒng)性能為目標(biāo),提出了一個對 CAN底層協(xié)議進(jìn)行升級的整體框架,主要包括三個方面的目標(biāo),一是將數(shù)據(jù)傳輸速率從 1Mbps提高到10Mbps,二是將單幀攜帶數(shù)據(jù)量從8字節(jié)提高到16字節(jié);三是減少位填充編碼 帶來的不必要的傳輸抖動。Imran Sheikh以此為基礎(chǔ),提出了多種方案進(jìn)行實(shí)驗(yàn)分析,并總 結(jié)了各自的優(yōu)劣。
[0015] 2011年S. Mube en通過擴(kuò)展現(xiàn)有的分析方案,提出能夠支持分析混合消息的響應(yīng)時 間的算法,該算法能夠適用于任何基于CAN協(xié)議的高層協(xié)議,并且對周期性的、偶發(fā)性的和 混合性的消息的傳輸都有較好的效果。
[0016] 2011年約克大學(xué)實(shí)時系統(tǒng)研究組R.I.Davis指出,現(xiàn)在對于CAN的分析都是基于這 樣一個假設(shè):網(wǎng)絡(luò)中每個節(jié)點(diǎn)準(zhǔn)備發(fā)送的最高優(yōu)先級的信息將會獲得總線仲裁,但實(shí)際上, 一些CAN驅(qū)動設(shè)備使用先進(jìn)先出隊(duì)列而不是基于優(yōu)先級的隊(duì)列使這一假設(shè)失效了,因此 R. I.Davis對CAN幀在既有使用FIFO的節(jié)點(diǎn)又有使用優(yōu)先隊(duì)列的節(jié)點(diǎn)的網(wǎng)絡(luò)中傳播時的響 應(yīng)時間進(jìn)行了分析,并提出了最優(yōu)分配策略,通過案例和實(shí)驗(yàn)評估,結(jié)果表明FIFO隊(duì)列對于 CAN的實(shí)時性能有不利影響。
[0017] 2011年H. Huangshui等人通過搭建CAN故障模型,研究CAN通信故障機(jī)制,設(shè)計(jì)了一 個用于CAN節(jié)點(diǎn)的監(jiān)視模塊,該監(jiān)視模塊可以通過變換自身為被動或主動狀態(tài)來診斷通信 鏈路的故障,有效地增強(qiáng)CAN通訊的可靠性及自愈性。
[0018] 2011年Atiya Azmi等人以CAN總線通信系統(tǒng)為基礎(chǔ),提出了一種采集患者生命體 征并傳送至遠(yuǎn)端監(jiān)測站的解決方案,提出了數(shù)據(jù)聚合方法及幾個有關(guān)CAN協(xié)議的改良方案, 以便更好的利用可用帶寬,實(shí)驗(yàn)表明,該解決方案能夠容納足夠多的監(jiān)測點(diǎn),并提供更高的 數(shù)據(jù)傳輸速度。
[0019] 2012年,合肥工業(yè)大學(xué)張建軍結(jié)合現(xiàn)有的時鐘同步算法在各節(jié)點(diǎn)建立并更新同步 主節(jié)點(diǎn)優(yōu)先表,提出基于〃時鐘漂移率〃的同步算法。有效地解決了傳統(tǒng)同步算法在主節(jié)點(diǎn) 失效時占用過多網(wǎng)絡(luò)資源的問題;同時能自適應(yīng)地根據(jù)CAN網(wǎng)絡(luò)當(dāng)前狀態(tài)修改權(quán)重因子,保 證時鐘同步精度在l〇us以內(nèi)。
[0020] 2012年橫濱國立大學(xué)1\]\&^8111]1〇1:〇等人提出了一套能夠檢測及預(yù)防未授權(quán)數(shù)據(jù)在 CAN總線上傳輸?shù)男路椒?。該方法只需在?dāng)前控制器單元上做簡單的調(diào)整就能被有效執(zhí)行。 并且能夠在多總線通過網(wǎng)關(guān)互連的情況下工作。
[0021] 2012年,解放軍68036部隊(duì)鄒靜提出了一種基于CAN通信網(wǎng)絡(luò)的應(yīng)用層組播方案, 在只增加了極小開銷的情況下擴(kuò)展了 CAN的基礎(chǔ)架構(gòu),從而能容納大規(guī)模的組用戶,實(shí)驗(yàn)表 明,這種基于完全分布式CAN通信網(wǎng)絡(luò)的應(yīng)用層組播部署方案簡單可行、具有明顯的優(yōu)勢。
[0022] 2012年,約克大學(xué)實(shí)時系統(tǒng)研究組Robert I .Davis針對CAN消息在總線間經(jīng)過網(wǎng) 關(guān)傳輸時產(chǎn)生延時抖動并逐級積累的情況,提出了一種位流調(diào)整的方法,該方法能夠顯著 增強(qiáng)CAN總線網(wǎng)絡(luò)的實(shí)時性能,消除抖動的積累。這種方法不需要獲得全局時鐘或精確的時 間標(biāo)記,通過擴(kuò)展還可用于解決網(wǎng)絡(luò)之間的時間漂移問題。
[0023] 2012年美國加州大學(xué)伯克利分校C.W.Lin提出了一個安全機(jī)制,通過改良CAN協(xié) 議,能夠有效地阻止針對基于CAN通信網(wǎng)絡(luò)架構(gòu)的網(wǎng)絡(luò)的攻擊,并且成功的在保持高安全水 平的同時,將總線通信效率(如總線負(fù)載和消息等待時間等)維持在合理的水平。2013年, B.Groza完整設(shè)計(jì)了一種利用鑰匙串和時間同步的廣播認(rèn)證協(xié)議,能有效地提高CAN通信網(wǎng) 絡(luò)的安全性。通過在飛思卡爾S12X和英飛凌的TriCore上進(jìn)行硬件測試,證明該協(xié)議在有限 的計(jì)算資源下能夠正常運(yùn)行。
[0024] 2013年,重慶郵電大學(xué)張居林等人為確保車載CAN網(wǎng)絡(luò)及其ECU節(jié)點(diǎn)在復(fù)雜工況下 的系統(tǒng)行為能夠滿足高容錯性的要求,提出了一種基于FPGA的CAN網(wǎng)絡(luò)鏈路層位級干擾測 試方法,實(shí)現(xiàn)干擾嵌入的寄存器級描述并能夠監(jiān)測總線位流,硬件測試表明,該設(shè)計(jì)能夠靈 活地向CAN通信總線嵌入干擾,能夠有效地檢測CAN通信網(wǎng)絡(luò)的可靠性及容錯性。
[0025] 2013年意大利的比薩圣安娜高等學(xué)校M.Di Natale.等人對幾種非常規(guī)消息隊(duì)列 最壞響應(yīng)時間分析理論進(jìn)行了實(shí)測評估,同時也對廣泛存在于實(shí)際系統(tǒng)應(yīng)用中且偏離理想 狀況的情況進(jìn)行了理論和實(shí)證研究,并得出了基于論詢設(shè)計(jì)的CAN FD控制器的最壞情況下 響應(yīng)時間的上限值。
[0026] 2013年,浙江大學(xué)趙九洲在提出廣義零膨脹泊松模型基礎(chǔ)上,對CAN通信網(wǎng)絡(luò)中錯 誤幀事件進(jìn)行離散化建模。通過分析參數(shù)并對優(yōu)化控制圖進(jìn)行比對,實(shí)現(xiàn)了 CAN通信網(wǎng)絡(luò)通 信質(zhì)量的實(shí)時在線監(jiān)測及早期預(yù)警功能,并結(jié)合故障原理和期望分布方法對節(jié)點(diǎn)脫離總線 時間進(jìn)行了預(yù)測。
[0027] 2013年G.Cena等人提出了一種新的CAN總線編碼方案替代原有的位填充編碼,測 試評估表明該編碼方案簡單高效適合在嵌入式架構(gòu)中實(shí)現(xiàn)。
[0028] 2013年,吉林大學(xué)郝勃等人分析了 CAN通信協(xié)議和0SEK/VDX規(guī)范,針對具有較多節(jié) 點(diǎn)數(shù)量及功能類型的CAN通信網(wǎng)絡(luò),提出并實(shí)現(xiàn)了一種CAN節(jié)點(diǎn)的分組和合并的網(wǎng)絡(luò)管理策 略。實(shí)驗(yàn)結(jié)果表明,該管理策略能夠快速構(gòu)建CAN通信節(jié)點(diǎn)的邏輯結(jié)構(gòu),提高CAN通信網(wǎng)絡(luò)的 管理效率。
[0029] 2014年K.W. Schmidt提出了一種計(jì)算優(yōu)先順序的算法,解決了現(xiàn)有隊(duì)列中新加入 消息需要重新計(jì)算優(yōu)先級的問題。測試表明該算法簡潔有效,能夠?qū)ο⑦M(jìn)行高效調(diào)度。
[0030] 2014年P(guān).S.Murvay指出當(dāng)前的CAN安全性研究大多集偏向于對協(xié)議層加密,而這 種方式增加了通信和計(jì)算的開銷,也不利于系統(tǒng)兼容。因此P.S.Murvay及其團(tuán)隊(duì)提出了一 種通過采集幀的獨(dú)特的物理特性的方法來認(rèn)證幀的合法性,主要是通過電壓采集、信號濾 波、均方差及卷積檢測對每一個潛在的發(fā)送節(jié)點(diǎn)進(jìn)行識別,實(shí)驗(yàn)表明,該方法對于某些節(jié)點(diǎn) 的識別是非常成功的,配合CAN收發(fā)器及CAN幀中的ID,能夠正確地找到發(fā)送節(jié)點(diǎn)。
[0031] 2014年康明斯女子工程學(xué)院S.Kelkar.等人針對CAN通信網(wǎng)絡(luò)數(shù)據(jù)傳輸量越來越 大的情況,提出了一種Boundary of Fifteen數(shù)據(jù)壓縮算法,該算法比Quotient Remainder Compression算法及Enhanced Data Reduction算法具有更高的壓縮比,和更少的計(jì)算量。 [0032] 2014年,合肥工業(yè)大學(xué)楊錦針對分布式車載網(wǎng)絡(luò)的同步機(jī)制,引入四種特殊的報(bào) 文幀,定量研究了同步幀傳輸網(wǎng)絡(luò)延時,引入最小"相對即時偏差和"的主時鐘協(xié)商選擇方 法,提出了基于主時鐘選擇的精確時鐘同步機(jī)制。通過搭建半實(shí)物半仿真平臺對基于CANoe 的車載CAN通信系統(tǒng)驗(yàn)證該同步機(jī)制,實(shí)驗(yàn)結(jié)果表明,該同步機(jī)制具有較高的可靠性和同步 精度,能夠有效降低網(wǎng)絡(luò)同步開銷。
[0033] 2014年合肥工業(yè)大學(xué)胡京津基于最早截止時間優(yōu)先的CAN網(wǎng)絡(luò)動態(tài)調(diào)度機(jī)制。提 出了基于冪函數(shù)分區(qū)的"混合優(yōu)先級"標(biāo)識符動態(tài)段編碼方案,充分論證了 CAN網(wǎng)絡(luò)消息集 調(diào)度優(yōu)先級判定條件,并對量化誤差進(jìn)行了分析;最終在FPGA上設(shè)計(jì)實(shí)現(xiàn),驗(yàn)證了方案的可 行性。
[0034] 2015年Yu-jing Wu等人提出了一種CAN幀壓縮算法,能夠?qū)AN幀壓縮到原長度的 81.06%,并實(shí)際測試了在64-位EMS上壓縮算法的速度為一個幀0.16ms。
[0035] 2015年,遼寧工程技術(shù)大學(xué)張國勝等人通過分析車載CAN網(wǎng)絡(luò)數(shù)據(jù)變化特點(diǎn),引入 數(shù)據(jù)壓縮技術(shù),在此基礎(chǔ)上提出變化優(yōu)先(CF)調(diào)度算法,將CF算法應(yīng)用于車載CAN網(wǎng)絡(luò)通信 系統(tǒng)設(shè)計(jì)進(jìn)行實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,使用該算法后車身CAN總線負(fù)載顯著降低,網(wǎng)絡(luò)傳 輸實(shí)時性明顯提尚。
[0036] 2015年,湖南大學(xué)趙軍巖等人通過分析現(xiàn)有的簡化搜索及窮盡搜索算法,指出二 者在分析網(wǎng)關(guān)消息的非周期性干擾時沒有考慮部分高優(yōu)先級消息的影響,并證明網(wǎng)關(guān)消息 同時發(fā)送時產(chǎn)生的非周期性干擾最大,由此提出一種改進(jìn)的基于網(wǎng)關(guān)互連的CAN網(wǎng)絡(luò)最壞 響應(yīng)時間分析方法。Mat lab仿真結(jié)果表明,改進(jìn)后的算法擁有可以接收的時間復(fù)雜度,并能 夠降低結(jié)果的悲觀性。
【發(fā)明內(nèi)容】
[0037] 本發(fā)明的目的在于提供一種基于CAN ro總線通信協(xié)議規(guī)范與微波功率分布式控 制系統(tǒng)的實(shí)際需求的新型CAN FD控制器。
[0038] 本發(fā)明是這樣實(shí)現(xiàn)的,一種新型CAN ro控制器,該新型CAN ro控制器包括:
[0039] CAN ro總狀態(tài)機(jī),用于調(diào)控新型CAN ro控制器整體功能及工作狀態(tài);
[0040] 發(fā)送管理器,與所述CAN FD總狀態(tài)機(jī)相連接,用于所有類型的幀及ACK信號的發(fā) 送;
[0041] 接收管理器,與所述CAN FD總狀態(tài)機(jī)相連接,用于監(jiān)視總線,并分析總線上接收到 的數(shù)據(jù);
[0042] 時鐘同步器,與所述CAN ro總狀態(tài)機(jī)及接收管理器相連接,用于根據(jù)用戶設(shè)定及 總線信號,控制位時鐘周期,并提供總線值采樣點(diǎn)及采樣值;
[0043] 錯誤管理模塊,與所述CAN ro總狀態(tài)機(jī)及接收管理器相連接,用于對節(jié)點(diǎn)錯誤進(jìn) 行統(tǒng)計(jì)計(jì)數(shù),將計(jì)數(shù)值反應(yīng)為節(jié)點(diǎn)錯誤狀態(tài)ES和總線狀態(tài)BS信息,并匯報(bào)給CAN狀態(tài)機(jī)及狀 態(tài)寄存器;
[0044] 寄存器組,與所述CAN ro總狀態(tài)機(jī)、發(fā)送管理器及接收管理器相連接,用于對控制 寄存器、狀態(tài)寄存器、中斷寄存器及命令寄存器進(jìn)行集中管理;
[0045] 接口管理器,與所述寄存器組、發(fā)送管理器及接收管理器相連接,用于外部微控制 器與CAN ro控制器交換信息的接口,解析來自微控制器的指令,將收到的地址信息譯碼為 對應(yīng)寄存器的選通信號,同時向微控制器反饋中斷信息及CAN FD控制器工作狀態(tài)。
[0046]進(jìn)一步,所述發(fā)送管理器中嵌入發(fā)送緩沖器,所述發(fā)送緩沖器用于存儲待發(fā)數(shù)據(jù), 并為所述寄存器組中的狀態(tài)寄存器模塊提供發(fā)送緩沖器狀態(tài);
[0047]所述發(fā)送管理器負(fù)責(zé)具體執(zhí)行任何與發(fā)送有關(guān)的命令,并在所述CAN FD總狀態(tài)機(jī) 的統(tǒng)一協(xié)調(diào)下發(fā)送數(shù)據(jù),能從所述發(fā)送緩沖器中讀取仲裁場、控制場和數(shù)據(jù)場的內(nèi)容,然后 將組裝成CAN FD幀,并向總線發(fā)送CAN Π )幀;在收到錯誤或是總線超載信號時,向總線發(fā)送 錯誤幀或超載幀;還用于向狀態(tài)寄存器提供發(fā)送完成狀態(tài)的信息;
[0048]所述接收管理器將依照CAN ro協(xié)議,執(zhí)行總線仲裁格式和各項(xiàng)檢測功能如填充錯 誤檢測、CRC檢測、錯誤幀檢測和過載幀檢測、濾波檢測,所述接收管理器中嵌入接收緩沖 器,所述接收緩沖器用于存儲接收數(shù)據(jù),并為所述寄存器組中的狀態(tài)寄存器反饋接收緩沖 器狀態(tài)及數(shù)據(jù)溢出狀態(tài),向所述寄存器組中的中斷寄存器提供接收中斷及數(shù)據(jù)溢出中斷; [00 49] 所述時鐘同步器用于CAN FD通信協(xié)議所約定的重同步、硬同步及Flexible Data 功能的具體實(shí)現(xiàn),所述時鐘同步器內(nèi)含三個總線定時寄存器^1?0、8了1?1、8了1^),用于存儲用 戶設(shè)定的位時間控制參數(shù),從而產(chǎn)生相應(yīng)的位時鐘周期;
[0050] 所述寄存器組中的控制寄存器存儲來自外部CPU的控制命令;命令寄存器用于外 部CPU給CAN FD控制器下達(dá)用戶可干預(yù)的操作命令;狀態(tài)寄存器用于實(shí)時展現(xiàn)控制器內(nèi)部 狀態(tài);中斷寄存器用于展現(xiàn)各種中斷狀態(tài),方便用戶隨時提??;
[0051] 所述接口管理器作為外部微控制器與CAN FD控制器交換信息的接口,解析來自微 控制器的指令,將收到的地址信息譯碼為對應(yīng)寄存器的選通信號,也向微控制器反饋中斷 信息及CAN FD控制器工作狀態(tài)。
[0052] 進(jìn)一步,依據(jù)CAN FD控制器在不同狀態(tài)下的功能職責(zé),該新型CAN Π )控制器包括 10個狀態(tài),分別為:
[0053] Bus_〇ff:總線脫離狀態(tài),考慮到CAN FD控制器在某些情況下應(yīng)拒絕響應(yīng)總線上的 任何信號,將這些情況都?xì)w總為Bus_〇fT狀態(tài);
[0054] Star_up:待復(fù)位狀態(tài),由于CAN FD協(xié)議要求節(jié)點(diǎn)從脫離總線恢復(fù)必須接收啟動信 號,故設(shè)置此狀態(tài),CAN FD控制器此時只能等待總線上的啟動信號;
[0055] Busjdle:總線空閑狀態(tài),考慮到CAN FD控制器開始工作后,如果總線上沒有信 號,CAN FD控制器將會等待發(fā)送或接收一個幀,Bus_idle用于歸總這種情況;
[0056] Arbitjnode:仲裁狀態(tài),考慮到非破壞性仲裁時,CAN Π )控制器將同時進(jìn)行發(fā)送與 接收,且仲裁的不同結(jié)果將導(dǎo)向CAN FD控制器的不同功能,因此單獨(dú)設(shè)為一個狀態(tài);
[0057] Trans_mode:發(fā)送狀態(tài),由于數(shù)據(jù)幀的發(fā)送將是CAN FD控制器的主要職能,也需要 其他模塊相應(yīng)功能的配合,因此單獨(dú)設(shè)為一個狀態(tài);
[0058] Rec_mode:接收狀態(tài),同樣數(shù)據(jù)幀的接收也是CAN FD控制器的主要職能,也需要其 他模塊相應(yīng)功能的配合,因此單獨(dú)設(shè)為一個狀態(tài);
[0059] err_mode :錯誤狀態(tài),考慮到CAN總線的較為復(fù)雜錯誤規(guī)則,為方便發(fā)送錯誤幀時 各模塊的相互配合而設(shè)置此狀態(tài);
[0060] over loadjnode:超載模式,為方便發(fā)送超載幀時各模塊的相互配合而設(shè)置;
[0061 ] Interjnode:間隙狀態(tài),由于CAN 1?協(xié)議中規(guī)定了間隙場的存在及其職能,且間隙 場中不同的顯性位出現(xiàn)時間將導(dǎo)向CAN FD控制器的不同功能,因此單獨(dú)設(shè)為一個狀態(tài); [0062] Suspend_mode:掛起狀態(tài),考慮到CAN FD協(xié)議中對節(jié)點(diǎn)掛起有詳細(xì)的規(guī)定,且該情 況下CAN FD控制器的行為較為特殊,因此單獨(dú)設(shè)為一個狀態(tài)。
[0063]進(jìn)一步,所述接收管理器進(jìn)一步包括:
[0064]接收狀態(tài)機(jī)模塊,由CAN FD總狀態(tài)機(jī)單方面決定其狀態(tài),狀態(tài)與整個CAN Π )控制 器狀態(tài) 對應(yīng);
[0065]過載幀檢測模塊,用于對過載幀進(jìn)行檢錯;
[0066]錯誤幀檢測模塊,當(dāng)所述接收管理器進(jìn)入err_rec狀態(tài)時,錯誤幀檢測模塊片選 cs_ef_check被置高,開始檢測錯誤狀態(tài)下的錯誤;
[0067]格式檢測模塊,當(dāng)所述接收管理器進(jìn)入arbit_rec狀態(tài)時,cs_fs_check即被置高, 直到Rec_rec狀態(tài)結(jié)束,從仲裁位的第一位起開始格式檢查和填充位檢查;
[0068] 濾波檢測模塊,用于進(jìn)行簡單的報(bào)文濾波,篩選出需要進(jìn)行接收的幀進(jìn)行接收和 存儲;
[0069] CRC檢測模塊,用于CRC檢驗(yàn)及填充位過濾;
[0070] 接收緩沖器,用于存儲接收管理器收到的有效數(shù)據(jù)。
[0071] 進(jìn)一步,所述發(fā)送管理器包括:
[0072] 發(fā)送狀態(tài)機(jī);
[0073] 發(fā)送緩沖器,用于存儲即將發(fā)送到總線上的待發(fā)送數(shù)據(jù)。
[0074] 進(jìn)一步,所述時鐘同步器通過讀取時鐘寄存器的內(nèi)容,調(diào)控系統(tǒng)位時鐘周期,并通 過接收信號配合兩種同步功能,向其他模塊發(fā)布總線采樣值。
[0075] 進(jìn)一步,所述錯誤管理模塊用于錯誤計(jì)數(shù),不關(guān)心錯誤細(xì)節(jié),監(jiān)測error_add[l: 0]、send_ack、TCS_reg_status三個信號,并采集其值做相應(yīng)處理。
[0076] 進(jìn)一步,所述控制寄存器用于為外部微處理器提供控制位,以此調(diào)控CAN FD控制 器的功能,控制寄存器地址分配及各位功能表所示,各位均為置1有效;
[0077] 所述狀態(tài)寄存器是展示CAN ro控制器工作狀態(tài)的主要窗口,狀態(tài)寄存器為只讀寄 存器,只能由內(nèi)部相關(guān)模塊提供狀態(tài)信息;
[0078] 所述中斷寄存器為只讀寄存器,各中斷信息來自CAN ro控制器內(nèi)部其他模塊,外 部微控制器可以通過控制中斷寄存器決定各中斷位的使能,可隨時依需要讀取中斷位,中 斷寄存器一旦已被讀取就會自動復(fù)位,當(dāng)任一使能中斷位被置高時會產(chǎn)生中斷檢測信號, 提醒微控制器讀取中斷信號;
[0079] 外部微控制器通過所述命令寄存器向CAN ro控制器下達(dá)命令,置1表示有效命令。
[0080] 進(jìn)一步,所述接口管理器用于解析來自微控制器的指令,將收到的地址信息譯碼 為對應(yīng)寄存器的選通信號,在相應(yīng)信號置低(Wr_l 〇W、rd_l〇W)時,與外部微控制器交換信 息。
[0081 ]本發(fā)明提供的新型CAN ro控制器,由CAN ro總狀態(tài)機(jī)、發(fā)送管理器、接收管理器、 時鐘同步器、錯誤管理模塊、寄存器組、接口管理器構(gòu)成,CAN ro總狀態(tài)機(jī)調(diào)控CAN ro控制 器整體功能及工作狀態(tài),發(fā)送管理器用于所有類型的幀及ACK信號的發(fā)送,接收管理器用于 監(jiān)視總線,并分析總線上接收到的數(shù)據(jù),時鐘同步器根據(jù)用戶設(shè)定及總線信號,控制位時鐘 周期,并提供總線值采樣點(diǎn)及采樣值,錯誤管理模塊對節(jié)點(diǎn)錯誤進(jìn)行統(tǒng)計(jì)計(jì)數(shù),將計(jì)數(shù)值反 應(yīng)為節(jié)點(diǎn)錯誤狀態(tài)ES和總線狀態(tài)BS信息,并匯報(bào)給CAN狀態(tài)機(jī)及狀態(tài)寄存器,寄存器組對控 制寄存器、狀態(tài)寄存器、中斷寄存器及命令寄存器進(jìn)行集中管理,接口管理器用于外部微控 制器與CAN ro控制器交換信息的接口,解析來自微控制器的指令,將收到的地址信息譯碼 為對應(yīng)寄存器的選通信號,同時向微控制器反饋中斷信息及CAN ro控制器工作狀態(tài);該新 型CAN ro控制器基于CAN ro總線通信協(xié)議規(guī)范與微波功率分布式控制系統(tǒng)的實(shí)際需求,性 能優(yōu)越,具有重要的實(shí)際工程意義。
【附圖說明】
[0082] 圖1是本發(fā)明實(shí)施例提供的CAN ro控制器的信號流向圖。
[0083] 圖中:11、CAN ro總狀態(tài)機(jī);12、發(fā)送管理器;13、接收管理器;14、時鐘同步器;15、 錯誤管理模塊;16、寄存器組;17、接口管理器。
【具體實(shí)施方式】
[0084] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對本發(fā)明 進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于 限定本發(fā)明。
[0085] 下面結(jié)合附圖及具體實(shí)施例對本發(fā)明的應(yīng)用原理作進(jìn)一步描述。
[0086] CAN FD控制器的整體設(shè)計(jì):CAN Π )控制器的設(shè)計(jì)思路,分析設(shè)計(jì)目標(biāo),并完成CAN FD控制器的模塊劃分及頂層引腳設(shè)置。
[0087] CAN FD控制器整體設(shè)計(jì)思路:CAN Π )控制器設(shè)計(jì)工作量較大,主要包括方案設(shè)計(jì) 及功能實(shí)現(xiàn)兩個部分。
[0088] -是方案設(shè)計(jì):從制定設(shè)計(jì)目標(biāo)開始,到模塊劃分,到制定狀態(tài),再一直細(xì)化到控 制器內(nèi)部每一個信號的每個動作。由于模塊與模塊之間,信號與信號之間涉及到諸多聯(lián)動, 牽一發(fā)而動全身,因此設(shè)計(jì)流程是一個自頂向下逐步細(xì)化,并伴隨著不斷迭代和排錯的過 程,從而使最終設(shè)計(jì)方案要能夠涵蓋所有設(shè)計(jì)目標(biāo),模塊能夠分工明確,狀態(tài)制定有條理, 轉(zhuǎn)換條件清晰,信號動作能夠相互呼應(yīng),邏輯自洽。
[0089] 二是功能實(shí)現(xiàn):方案設(shè)計(jì)完成并梳理無誤之后開始功能實(shí)現(xiàn),使用VHDL語言,從最 底層的子模塊開始實(shí)現(xiàn)模塊邏輯,并進(jìn)行仿真測試,采用自底向上的方式測試、迭代,最終 完成整個控制器的硬件語言編程并能夠?qū)崿F(xiàn)設(shè)計(jì)目標(biāo)。
[0090] CAN ro控制器模塊及引腳設(shè)計(jì)
[0091 ]設(shè)計(jì)目標(biāo):結(jié)合項(xiàng)目實(shí)際需求及CAN FD通信協(xié)議內(nèi)容,設(shè)計(jì)目標(biāo)分為兩個方面:一 是設(shè)計(jì)實(shí)現(xiàn)CAN總線通信協(xié)議的基礎(chǔ),即CAN Π )與CAN 2.0重合的部分,包括遠(yuǎn)程幀、錯誤 幀、過載幀、發(fā)送器/接收器的定義、報(bào)文校驗(yàn)、基本編碼規(guī)則、錯誤處理、錯誤檢測、錯誤標(biāo) 定、故障界定、位定時等內(nèi)容,這是最終CAN Π )控制器能夠?qū)崿F(xiàn)通信的基礎(chǔ);二是通過結(jié)合 褐煤微波干燥生產(chǎn)線的三個實(shí)際需求:(1)提高單幀攜帶的數(shù)據(jù)量;(2)提高數(shù)據(jù)傳輸速度; (3)增強(qiáng)抗干擾性,降低錯誤漏檢率。設(shè)計(jì)實(shí)現(xiàn)CAN Π )較之CAN 2.0協(xié)議有升級改良的部分: 包括(1)新的DLC編碼,其實(shí)現(xiàn)可以配合更長的數(shù)據(jù)場,單幀傳遞更多的數(shù)據(jù);(2)通信過程 中Flexible Data-Rate功能,其實(shí)現(xiàn)使得整個數(shù)據(jù)場位的傳輸速度大幅提高;(3)新的CRC 算法及封裝順序,其實(shí)現(xiàn)將能夠極大的降低錯誤漏檢率,保證幀傳輸?shù)恼_率。
[0092] 根據(jù)對CAN FD協(xié)議的理解,將CAN Π )控制器分為:CAN Π )總狀態(tài)機(jī)11、接收管理器 13、發(fā)送管理器12、時鐘同步器14、錯誤管理模塊15、寄存器組16、接口管理器17,共計(jì)七個 模塊,七個模塊之間的簡易信號流向圖如圖1所示。
[0093] CAN ro總狀態(tài)機(jī)11:用于調(diào)控CAN FD控制器整體功能及工作狀態(tài),作為管理CAN ro控制器運(yùn)行的核心部件,CAN ro總狀態(tài)機(jī)11需要采集來自各個模塊的信號,比如系統(tǒng)時 鐘、錯誤標(biāo)志、軟件復(fù)位、發(fā)送和取消發(fā)送命令、仲裁狀態(tài)、總線狀態(tài)等等,CAN ro總狀態(tài)機(jī) 11綜合處理了以上信號之后,負(fù)責(zé)調(diào)控CAN ro控制器的狀態(tài)及狀態(tài)轉(zhuǎn)移,為其他模塊下達(dá) 動作命令,協(xié)調(diào)整個系統(tǒng)的工作。
[0094]發(fā)送管理器12,用于所有類型的幀及ACK信號的發(fā)送,將負(fù)責(zé)具體執(zhí)行任何與發(fā)送 有關(guān)的命令,并在CAN FD總狀態(tài)機(jī)11的統(tǒng)一協(xié)調(diào)下發(fā)送數(shù)據(jù),從發(fā)送緩沖器中讀取仲裁場、 控制場和數(shù)據(jù)場的內(nèi)容,然后將其組裝成CAN FD幀,并向總線發(fā)送該幀;也會在收到錯誤或 是總線超載信號時,向總線發(fā)送錯誤幀或超載幀;還負(fù)責(zé)向狀態(tài)寄存器提供發(fā)送完成狀態(tài) 的信息。
[0095]發(fā)送管理器12中嵌入發(fā)送緩沖器,一方面存儲待發(fā)數(shù)據(jù),另一方面為狀態(tài)寄存器 模塊提供發(fā)送緩沖器狀態(tài)。
[0096]接收管理器13,用于監(jiān)視總線,并分析總線上接收到的數(shù)據(jù),將依照CAN Π )協(xié)議執(zhí) 行總線仲裁格式和各項(xiàng)檢測功能如填充錯誤檢測、CRC檢測、錯誤幀檢測和過載幀檢測、濾 波檢測等。接收管理器13中嵌入接收緩沖器,一方面用于存儲接收數(shù)據(jù),另一方面為狀態(tài)寄 存器反饋接收緩沖器狀態(tài)及數(shù)據(jù)溢出狀態(tài),向中斷寄存器提供接收中斷及數(shù)據(jù)溢出中斷。
[0097]時鐘同步器14,用于根據(jù)用戶設(shè)定及總線信號,控制位時鐘周期并提供總線值采 樣點(diǎn)及采樣值,將負(fù)責(zé)CAN FD通信協(xié)議所約定的重同步、硬同步及Flexible Data功能的具 體實(shí)現(xiàn)。內(nèi)含三個總線定時寄存器BTR0、BTR1、BTRFD,用于存儲用戶設(shè)定的位時間控制參 數(shù),從而產(chǎn)生相應(yīng)的位時鐘周期。
[0098]錯誤管理模塊15,用于對節(jié)點(diǎn)錯誤進(jìn)行統(tǒng)計(jì)計(jì)數(shù),并將計(jì)數(shù)值反應(yīng)為節(jié)點(diǎn)錯誤狀 態(tài)ES和總線狀態(tài)BS信息,并匯報(bào)給CAN狀態(tài)機(jī)及狀態(tài)寄存器。
[0099] 寄存器組16,用于集中管理四個關(guān)鍵寄存器:控制寄存器reg_c〇ntr〇l、狀態(tài)寄存 器status_reg、中斷寄存器Interrupt_reg及命令寄存器command_reg。
[0100] 其中,控制寄存器存儲來自外部CPU的控制命令;命令寄存器用于外部CPU給CAN ro控制器下達(dá)用戶可干預(yù)的操作命令;狀態(tài)寄存器用于實(shí)時展現(xiàn)控制器內(nèi)部狀態(tài);中斷寄 存器用于展現(xiàn)各種中斷狀態(tài)方便用戶隨時提取。
[0101] 接口管理器17,作為外部微控制器與CAN ro控制器交換信息的接口,負(fù)責(zé)解析來 自微控制器的指令,將收到的地址信息譯碼為對應(yīng)寄存器的選通信號,也負(fù)責(zé)向微控制器 反饋中斷信息及CAN控制器工作狀態(tài)。
[0102] 引腳設(shè)計(jì):就外部微控制器對頂層引腳的操作而言,CAN ro控制器使用CAN 2.0或 是CAN FD協(xié)議沒有明顯區(qū)別,因此CAN Π )控制器的頂層信號引腳設(shè)計(jì)基本參考SJA1000的 設(shè)置,各引腳信號解釋見表1。
[0103] 表1 CAN ro控制器頂層引腳表
[0105] CAN ro總狀態(tài)機(jī)11負(fù)責(zé)協(xié)調(diào)整個CAN FD控制器內(nèi)部的所有模塊聯(lián)動工作,現(xiàn)對其 內(nèi)部狀態(tài)、狀態(tài)轉(zhuǎn)移條件、信號引腳的設(shè)計(jì)進(jìn)行詳細(xì)說明。
[0106] 狀態(tài)設(shè)計(jì):通過分析CAN FD控制器的主要工作狀態(tài),將CAN ro控制器設(shè)計(jì)為總共 包括以下10個狀態(tài),狀態(tài)的劃分主要依據(jù)是當(dāng)前狀態(tài)下CAN FD控制器的功能職責(zé)。
[0107] Bus_〇ff:總線脫離狀態(tài),考慮到CAN FD控制器在某些情況下應(yīng)拒絕響應(yīng)總線上的 任何信號,將這些情況都?xì)w總為Bus_〇fT狀態(tài)。
[0108] Star_up:待復(fù)位狀態(tài),由于CAN FD協(xié)議要求節(jié)點(diǎn)從脫離總線恢復(fù)必須接收啟動信 號,故設(shè)置此狀態(tài),CAN FD控制器此時只能等待總線上的啟動信號的喚醒或微控制器的軟 件啟動信號。
[0109] Busjdle:總線空閑狀態(tài),考慮到CAN FD制器開始工作后,如果總線上沒有信號, 控制器將會等待發(fā)送或接收一個幀,Bus_idle用于歸總這種情況。
[0110] Arbit_mode:仲裁狀態(tài),考慮到非破壞性仲裁時CAN ro控制器將同時進(jìn)行發(fā)送與 接收,且仲裁的不同結(jié)果將導(dǎo)向CAN FD控制器的不同功能,因此單獨(dú)設(shè)為一個狀態(tài)。
[0111] Trans_mode:發(fā)送狀態(tài),由于數(shù)據(jù)幀的發(fā)送將是CAN FD控制器的主要職能,也需要 其他模塊相應(yīng)功能的配合,因此單獨(dú)設(shè)為一個狀態(tài)。
[0112] Recjnode:接收狀態(tài),同樣數(shù)據(jù)幀的接收也是CAN FD控制器的主要職能,也需要其 他模塊相應(yīng)功能的配合,因此單獨(dú)設(shè)為一個狀態(tài)。
[0113] err_mode :錯誤狀態(tài),考慮到CAN總線的較為復(fù)雜錯誤規(guī)則,為方便發(fā)送錯誤幀時 各模塊的相互配合而設(shè)置此狀態(tài)。
[0114] 〇Verl〇ad_m〇de :超載模式,為方便發(fā)送超載幀時各模塊的相互配合而設(shè)置此狀 ??τ 〇
[0115] Interjnode:間隙狀態(tài),由于CAN Π )協(xié)議中規(guī)定了間隙場的存在及其職能,且間隙 場中不同的顯性位出現(xiàn)時間將導(dǎo)向CAN FD控制器的不同功能,因此單獨(dú)設(shè)為一個狀態(tài)。
[0116] 相對于狀態(tài)劃分,狀態(tài)轉(zhuǎn)移條件的設(shè)計(jì)更為復(fù)雜,實(shí)際上是在各個模塊設(shè)計(jì)過程 逐步添加完善的,現(xiàn)僅將設(shè)計(jì)結(jié)果呈現(xiàn)于表2中。其中涉及到的部分CAN Π )控制器內(nèi)部信號 將在介紹到各信號的來源模塊時進(jìn)行介紹。
[0120] 信號設(shè)計(jì):由于CAN ro總狀態(tài)機(jī)11需要綜合各模塊信息以決定當(dāng)前CAN ro控制器 所處狀態(tài),因此CAN FD總狀態(tài)機(jī)11將匯聚來自其他各個模塊的信號,其信號設(shè)計(jì)見表3。
[0121] 表3 CAN Π )總狀態(tài)機(jī)模塊信號表
[0123] 設(shè)計(jì)通過trans_status[2:0]及rec_status[3:0]信號控制發(fā)送管理器12及接收 管理器13的狀態(tài)??紤]到CAN ro錯誤規(guī)則中,錯誤計(jì)數(shù)的計(jì)算需要考慮節(jié)點(diǎn)的前一狀態(tài),故 將錯誤狀態(tài)對應(yīng)的接收管理器13狀態(tài)設(shè)置為兩個,其中6號狀態(tài)是前一狀態(tài)為接收節(jié)點(diǎn)的 錯誤狀態(tài),7號狀態(tài)是前一狀態(tài)為發(fā)送節(jié)點(diǎn)的錯誤狀態(tài)。
[0124] Start_buS信號來自接收管理器13,由于協(xié)議中規(guī)定了兩種不同的總線啟動情況, 故將Start_bus設(shè)計(jì)為可取3個值:為0無效,為1則表示收到一次總線啟動信號,為2則表示 收到128次總線啟動信號。
[0125] TR_ZER0,專門設(shè)計(jì)用于在取消發(fā)送命令A(yù)T被執(zhí)行后寄提醒存器將相關(guān)位置0,若 AT和TR均為高,且此時不在bus_idle或inter_mode狀態(tài)則此位置高以清零TR和AT。
[0126] 當(dāng)處在arbit_mode和trans_mode時,CAN FD控制器都處于發(fā)送狀態(tài),因此TS_reg_ status將被置高,反之置低。
[0127] 當(dāng)處在rec_mode時,由于CAN FD控制器處于接收狀態(tài),RS_reg_status將被置高, 反之置低。
[0128]仿真測試:整個CAN Π )總狀態(tài)機(jī)11的輸出僅由當(dāng)前狀態(tài)決定,因此,采用moore型 狀態(tài)機(jī)進(jìn)行設(shè)計(jì),在設(shè)計(jì)時,將bus_off狀態(tài)設(shè)置為系統(tǒng)初始狀態(tài),而當(dāng)Reset_restart有效 時,present_state將強(qiáng)制回到bus_of f狀態(tài)。
[0129] A:CAN Π )總狀態(tài)機(jī)11在初始狀態(tài)或硬件復(fù)位后都將處在bus_ofT狀態(tài)。
[0130] B:等到ReSet_reStart被置低之后,接收管理器13狀態(tài)將被設(shè)為1,意為等待30啟 動信號。
[0131] C:檢測到了一個總線啟動信號從而進(jìn)入bus_idle狀態(tài),接收管理器13和發(fā)送管理 器12狀態(tài)也相應(yīng)變化。
[0132] D:在busjdle狀態(tài)收到了來自微控制器的TR命令,并且檢測到了總線上出現(xiàn)顯性 電平,從而進(jìn)入arbitjnode,接收管理器13和發(fā)送管理器12狀態(tài)也作相應(yīng)調(diào)整。
[0133] E:在busjdle狀態(tài)收到了來自微控制器的TR命令,并且檢測到了總線上出現(xiàn)顯性 電平從而進(jìn)入arb i t_mode,與此同時可以看到重同步命令信號Sync被打開。
[0134] F:未通過仲裁,從而轉(zhuǎn)入接收狀態(tài)。
[0135] G:隨后收到微控制器取消發(fā)送命令,可以看到AT和TR分別被置0。
[0136] 以上仿真結(jié)果表明,CAN Π )總狀態(tài)機(jī)11設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0137] 接收管理器13設(shè)計(jì):接收管理器13是整個CAN Π )控制器中功能最多,設(shè)計(jì)最復(fù)雜 的部分,該模塊將依照CAN ro協(xié)議執(zhí)行總線仲裁和各項(xiàng)檢測功能包括幀格式檢測、位填充 檢測、CRC檢測、錯誤幀檢測和過載幀檢測、濾波檢測等。
[0138] 由于功能復(fù)雜,接收管理器13的內(nèi)部還要進(jìn)一步劃分為七個模塊,分別為接收狀 態(tài)機(jī)模塊、過載幀檢測模塊、錯誤幀檢測模塊、格式檢測模塊、CRC檢測模塊、濾波檢測模塊、 接收緩沖器模塊。七個模塊都在接收狀態(tài)機(jī)模塊的統(tǒng)一調(diào)配下協(xié)同工作。
[0139] 接收管理器13模塊劃分及內(nèi)部信號關(guān)系圖。
[0140] 接收狀態(tài)機(jī)是由CAN Π )總狀態(tài)機(jī)11單方面決定其狀態(tài)的,因此其狀態(tài)與整個CAN FD控制器狀態(tài)--對應(yīng),轉(zhuǎn)移條件同CAN FD總狀態(tài)機(jī)11。
[0141 ]表4接收狀態(tài)機(jī)狀態(tài)與總狀態(tài)機(jī)狀態(tài)對應(yīng)表
[0143]接下來按照狀態(tài)對接收管理器13功能設(shè)計(jì)進(jìn)行說明:
[0144] 0ff_rec:此狀態(tài)對應(yīng)CAN Π )總狀態(tài)機(jī)11的bus_off狀態(tài),接收管理器13此時無需 設(shè)置任何動作。
[0145] Rr_rec:設(shè)置此狀態(tài)與CAN FD總狀態(tài)機(jī)11的start_up狀態(tài)相對應(yīng),考慮到此時 Resetjestart剛被外部微控制器置低,因此在Rr_rec狀態(tài)下,將接收管理器13功能設(shè)置為 只接收總線啟動信號(連續(xù)11位隱性位),并對總線啟動信號進(jìn)行計(jì)數(shù),計(jì)數(shù)值大于等于1且 小于128時,start_bus將輸出1,計(jì)數(shù)值大于128時,start_bus將輸出2。
[0146] Idle_rec:當(dāng)總線空閑時,接收管理器13也為空閑狀態(tài),功能設(shè)定為等待接收一個 幀,其工作流程如所示。
[0147] A:進(jìn)入Idle_rec狀態(tài)后,首先將sy_control置1,通過該上升沿提醒時鐘同步器14 準(zhǔn)備進(jìn)行硬同步。
[0148] B:當(dāng)檢測到總線上出現(xiàn)一個顯性位時,說明已經(jīng)收到了幀起始標(biāo)志,此時由end_ bit信號產(chǎn)生一個脈沖,同時開始幀格式檢測,即cs_fs_check被置1,而sy_control將產(chǎn)生 下降沿復(fù)原。
[0149] Arbit_rec:仲裁檢查狀態(tài)對應(yīng)CAN Π )總狀態(tài)機(jī)11的Arbit_mode,此時設(shè)置接收管 理器13密切監(jiān)視總線上的仲裁狀態(tài),通過對比Serial_data_in和serial_data_out上的信 號,判斷是否失去仲裁。流程如所示。
[0150] A:進(jìn)入Arbit_rec狀態(tài)后cs_fs_check也被置高,從仲裁位的第一位起開始格式檢 查和位填充檢查。
[0151 ] B: serial_data_out的顯性電平被隱形覆蓋,則是檢測到位錯誤,故出錯標(biāo)志err_ flag被置1,cs_fs_check也被關(guān)閉。
[0152] C: serial_data_out的隱形電平被顯性覆蓋,失去仲裁。故end_bit產(chǎn)生一個脈沖, arbit保持為0提醒CAN Π )總狀態(tài)機(jī)11停止一個幀的發(fā)送過程,轉(zhuǎn)而接收一個幀;若獲得仲 裁,貝lj end_b i t產(chǎn)生一個脈沖,arb i t產(chǎn)生一個脈沖。
[0153] TranS_reC:此時CAN Π )控制器處在發(fā)送狀態(tài),而接收管理器13則負(fù)責(zé)檢查總線上 的位錯誤及應(yīng)答錯誤。接收管理器13通過對比Serial_data_in和serial_data_out進(jìn)行位 檢測,若檢出錯誤則err_f lag發(fā)送脈沖。
[0154] A: serial_data_out的隱形電平被顯性覆蓋,貝lj檢出錯誤故err_f lag發(fā)送脈沖, err〇r_add[1:0]置3。
[0155] B:當(dāng)get_ack置高時,serial_data_in為出現(xiàn)應(yīng)答錯誤,若錯則err_flag置1,若此 時錯誤狀態(tài)位ES為高(當(dāng)前節(jié)點(diǎn)為主動錯誤節(jié)點(diǎn)),則err〇r_add[ 1:0]置3,反之置0(根據(jù) CAN協(xié)議錯誤規(guī)則3.例外1)。流程如所示:
[0156] ReC_reC:接收管理器13在這時開始檢查數(shù)據(jù)、遠(yuǎn)程幀錯誤,主要工作由相應(yīng)子模 塊完成。此時cs_fs_ CheCk依然被置高,幀格式檢查和填充位檢查繼續(xù)進(jìn)行。若檢出錯誤,幀 格式檢查模塊及CRC模塊會做相應(yīng)處理,接收完成則end_bit產(chǎn)生一個脈沖。
[0157] Err_rec:對應(yīng)于CAN FD總狀態(tài)機(jī)11的err_mode,接收管理器13此時應(yīng)負(fù)責(zé)檢查錯 誤幀格式是否正確,主要的檢測工作都交給Err_Ch eak模塊,因此接收管理器13僅需將cs_ ef_CheCk置1,開啟錯誤幀檢測模塊,錯誤幀檢測流程如所示。
[0158] over_rec:對應(yīng)于CAN FD總狀態(tài)機(jī)11的over_mode,接收管理器13此時應(yīng)負(fù)責(zé)檢查 過載幀格式是否正確,主要的檢測工作都交給〇Ver_ Cheak模塊,因此接收管理器13僅需將 CS_〇V_CheCk置1,開啟過載幀檢測模塊,過載幀檢測流程如所示。
[0159] Inter_rec:對應(yīng)于CAN FD總狀態(tài)機(jī)11的inter_mode,將接收管理器13的功能設(shè)置 為監(jiān)視三位間隙場。流程如所示。
[0160] A:當(dāng)在間隙場前兩位檢測到顯性位,則說明檢測到了超載現(xiàn)象,則〇ver_fram產(chǎn)生 一個脈沖。
[0161] B:當(dāng)在間隙場第三位檢測到顯性位,說明總線上已經(jīng)有節(jié)點(diǎn)開始發(fā)送一個幀,則 end_bit產(chǎn)生一個脈沖。
[0162] 接收狀態(tài)機(jī)中,erro;r_add信號的設(shè)計(jì)較為關(guān)鍵,它為錯誤計(jì)數(shù)器提供錯誤計(jì)數(shù), 其設(shè)計(jì)難點(diǎn)在于CAN FD的錯誤監(jiān)測機(jī)制包括5類錯誤且互不排斥,協(xié)議中對應(yīng)的錯誤計(jì)數(shù) 規(guī)則有12條,外加多條例外規(guī)則,因此不同的接收狀態(tài)、不同的節(jié)點(diǎn)上一狀態(tài),以及不同的 錯誤類型相組合,導(dǎo)致err 〇r_add變化較多,最終將其值梳理為0-3共4種狀態(tài),足以反映所 有的計(jì)數(shù)器值變化情況:分別對應(yīng)接收錯誤計(jì)數(shù)器加1和加8,發(fā)送錯誤計(jì)數(shù)器加8以及計(jì)數(shù) 器值不變。各種情況信號動作設(shè)計(jì)如下:
[0163] Err_rec狀態(tài)下,若err_ef置1,則err_flag置高,end_bit置1若節(jié)點(diǎn)前一狀態(tài)為接 收器則error_add置2 (接+8),若節(jié)點(diǎn)前一狀態(tài)為發(fā)送器,貝丨】error_add置3 (發(fā)+8)。
[0164] Err_rec狀態(tài)下,若err_ef置11,貝ljerr_flag置高,end_bit置1若節(jié)點(diǎn)前一狀態(tài)為 接收器則error_add置1 (接+1),若節(jié)點(diǎn)前一狀態(tài)為發(fā)送器,貝ljerror_add置3 (發(fā)+8)。
[0165] Err_rec狀態(tài)下,若檢測到第7位仍為顯性,若節(jié)點(diǎn)前一狀態(tài)為接收節(jié)點(diǎn)則error_ add置2,否則置0。(并非錯誤,不發(fā)送錯誤標(biāo)志)over_rec狀態(tài)下,若err_ov置1,則err_f lag 置高,end_bit置1,若節(jié)點(diǎn)前一狀態(tài)為接收器則error_add置2(接+8),若節(jié)點(diǎn)前一狀態(tài)為發(fā) 送器,貝1J error_add置3 (發(fā)+8)。
[0166] Arbit_rec狀態(tài)下和Rec_rec狀態(tài)下,若檢測到err_f s置1,則error_add置3,若檢 測到err_fs置11,則error_add置0。
[0167] Over_cheak模塊:0ver_cheak模塊主要負(fù)責(zé)對過載幀進(jìn)行檢錯。
[0168] 表5 Over_cheak模塊信號表
[0169]
[0170] -旦接收管理器13進(jìn)入over_rec狀態(tài),該子模塊片選cs_ov_check被啟動,開始檢 測過載狀態(tài)下的錯誤。若檢測無誤則Send_err_del產(chǎn)生脈沖,通知發(fā)送管理器12發(fā)送過載 界定符。
[0171 ] err_ov信號動作設(shè)計(jì)如下:1.當(dāng)在前6位檢測到隱性位,說明出現(xiàn)位錯誤,err_ov 置尚。
[0172] 2.從被片選開始計(jì)數(shù)連續(xù)顯性位彡14, err_ov置高。
[0173] 3.若在過載界定符中發(fā)現(xiàn)顯性位,則err_ov置高。
[0174] A: cs_ov_check被選中,從data_serial_in的第一個顯性位開始計(jì)數(shù),在計(jì)數(shù)不到 6的情況下檢測到隱性位。則通過err_ov脈沖報(bào)錯。
[0175] B:同樣的情況,計(jì)數(shù)超過14,通過err_〇v脈沖報(bào)錯。
[0176] C:若在計(jì)數(shù)不超過14的情況下檢測到data_serial_in上出現(xiàn)隱性位,則說明檢測 無誤,則send_err_del產(chǎn)生脈沖,隨后開始檢測過載界定符,隨后模塊被關(guān)閉;若計(jì)數(shù)超過 14,同樣報(bào)錯,模塊將被關(guān)閉。
[0177] 以上仿真結(jié)果表明,Over_cheak模塊設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0178] Err_cheak:模塊一旦接收管理器13進(jìn)入err_rec狀態(tài),該子模塊片選cs_ef_check 被置高,開始檢測錯誤狀態(tài)下的錯誤。
[0179]設(shè)計(jì)中需要注意的一個細(xì)節(jié)是,由于CAN Π )協(xié)議中規(guī)定ES置高后的第一個錯誤依 然算作主動錯誤,故需當(dāng)ES出現(xiàn)上升沿的時候,內(nèi)部使用變量es_sign進(jìn)行標(biāo)識,之后檢出 第一次錯誤后標(biāo)志歸零。
[0180]
[0181]將CAN Π )協(xié)議的錯誤規(guī)則進(jìn)行梳理簡化后,總結(jié)成樹狀圖,以方便分析。
[0182] err_ef·為Err_cheak模塊的關(guān)鍵信號,其信號動作設(shè)計(jì)如下:
[0183] 1 .ES為低時,當(dāng)在前6位檢測到隱性位,說明出現(xiàn)位錯誤,err_ef置1。
[0184] 2. ES為低時,從被片選開始計(jì)數(shù)連續(xù)顯性位彡12,err_ef置1。
[0185] 3. ES為低時,從第7位開始等待一隱性位,檢測到隱形位后,開始發(fā)送其余7個隱性 位如果期間檢測到有顯性位,err_ef置11。
[0186] 4.ES為高時,對連續(xù)的極性位計(jì)數(shù),多6(被動錯誤標(biāo)志發(fā)送完成)則開始等待一個 隱性位,檢測到隱形位后開始發(fā)送其余7個隱性位如果期間檢測到有顯性位,err_ef置11。 [0187] 5. ES為高時,對連續(xù)的極性位計(jì)數(shù),多6 (被動錯誤標(biāo)志發(fā)送完成)從第7位開始對 連續(xù)的顯性位進(jìn)行計(jì)數(shù),若彡8,err_ef置1。
[0188]以上制定的5點(diǎn)規(guī)則可以完全覆蓋.14的第1分支及第2分支2.2的所有情況。
[0189 ]由此可知此設(shè)計(jì)方案邏輯自洽,覆蓋完整,設(shè)計(jì)合理。
[0190] A:在片選開啟后檢測計(jì)數(shù)到大于6位的顯性位,隨后檢測到隱性位,則Send_err_ del產(chǎn)生脈沖通知發(fā)送管理器12發(fā)送錯誤界定符,Err_cheak模塊開始對隱性位計(jì)數(shù),計(jì)數(shù) 超過8且檢測到顯性位,則說明錯誤幀傳遞完畢。
[0191] B:在片選開啟后檢測計(jì)數(shù)到小于6位的顯性位,隨后檢測到隱性位,此時ES為低, 則err_ef置位'01',re_mode產(chǎn)生脈沖。
[0192] C:send_err_del產(chǎn)生脈沖后檢測到連續(xù)隱性位不足8個,此時ES為低,則err_ef置 位' 11 ',re_mode產(chǎn)生脈沖。
[0193] D:若send_err_del產(chǎn)生脈沖后,此時ES為高,檢測到連續(xù)隱性位超過8個,則err_ ef置位'01',re_mode產(chǎn)生脈沖。
[0194] E:若send_err_del產(chǎn)生脈沖后,此時ES為高,檢測到連續(xù)隱性位低于8個,則err_ ef置位'10',re_mode產(chǎn)生脈沖。
[0195]以上仿真結(jié)果表明,err_cheak模塊設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0196] Form_stuff_check模塊:當(dāng)接收管理器 13進(jìn)入arbit_rec狀態(tài),cs_f s_check即被 置高,直到Rec_rec狀態(tài)結(jié)束。從仲裁位的第一位起開始格式檢查和填充位檢查。
[0197] 表7 Form_stuff_check模塊信號表
[0198]
[0199] 填充位的檢查動作設(shè)計(jì)為對當(dāng)前值及上一時刻的值進(jìn)行比較計(jì)數(shù)。相等則計(jì)數(shù)加 1,不等則計(jì)數(shù)歸零,但要注意協(xié)議中規(guī)定的錯誤規(guī)則例外2,不會增加錯誤計(jì)數(shù),但會報(bào)錯, 則將err_fs置11。若計(jì)數(shù)值達(dá)到6,則將err_fs置1。
[0200]格式檢查設(shè)計(jì)為查看固定位是否為固定值,具體規(guī)則參照第二章的幀格式介紹, 若檢查位與預(yù)設(shè)值異或結(jié)果為1,則err_fs置1,設(shè)計(jì)中對第2-33、38-553位中的非填充位, 每位都對應(yīng)一個en_data_in脈沖以傳入CRC_check模塊進(jìn)行CRC檢測。當(dāng)檢測到ACK位時,將 send_ack置1〇
[0201 ]考慮到模塊的聯(lián)動配合需求,設(shè)計(jì)當(dāng)cs_fs_check被置高,幀格式檢測模塊開始工 作時,cs_acr_check和cs_crc_check也會被自動置高,報(bào)文濾波模塊以及CRC檢測模塊也開 始工作,直到當(dāng)檢測到SRR位時 cs_acr_check被置低,報(bào)文濾波結(jié)束。檢測到CRC界定符時, cs_crc_check置低,CRC檢測結(jié)束。
[0202]為保證數(shù)據(jù)存儲的完整性,設(shè)計(jì)一旦出現(xiàn)錯誤或者err_flag置高,則clear置高, 清除已經(jīng)寫入接收緩沖器的數(shù)據(jù),若err_aCr置高(濾波不通過)或arbit被置高(仲裁成功) 則都不再向接收緩沖器寫入數(shù)據(jù),且clear將同樣被置高、en_data_in將不再發(fā)送寫入脈 沖。
[0203]整個幀格式檢測流程如所示。
[0204] 該模塊設(shè)計(jì)方案覆蓋了第2分支2.1的所有情況。
[0205] A、B:當(dāng)cs_fs_check被置高時,cs_acr_check和cs_crc_check立即被置高,當(dāng)檢測 到data_serial_in上出現(xiàn)連續(xù)6位相同位時,都認(rèn)為檢測到了位填充錯誤,err_f lag及 cl ear將被置高。
[0206] C:當(dāng)在數(shù)據(jù)幀固定位檢測到的電平與預(yù)設(shè)值不同,比如這里第13位SRR應(yīng)為隱性, 但卻檢測到顯性,模塊將判斷出現(xiàn)了幀格式錯誤,err_f lag及clear將被置高。
[0207] D:當(dāng)檢測到最后一位ID而沒有檢測出錯誤,且arbit位為高,則說明拿到了仲裁, 處于發(fā)送狀態(tài),不再需要CRC檢測及濾波,也不需要寫入FIFO,cs_acr_check、cs_crc_check 及clear立即被置低。
[0208]以上仿真結(jié)果表明,F(xiàn)orm_stuff_check模塊設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0209] Acr_check模塊:Acr_check模塊設(shè)計(jì)用于進(jìn)行簡單的報(bào)文濾波,篩選出需要進(jìn)行 接收的幀進(jìn)行接收和存儲。Acr_check模塊信號設(shè)計(jì)如表8下:
[0210] 表8 Acr_check模塊信號表
[0212] 以上信號中,如前文所述,將cs_acr_check設(shè)計(jì)為由Form_stuff_check模塊控制。 濾波模塊開始工作后,若濾波不能通過則err_a Cr置高。
[0213] Acr_check模塊內(nèi)嵌一個驗(yàn)收碼寄存器ACR及一個驗(yàn)收屏蔽碼寄存器AMR。設(shè)計(jì)接 收碼寄存器中一位的含義是:當(dāng)此位與接收報(bào)文標(biāo)識符的高8位中對應(yīng)位相同時,則通過濾 波,反之該幀就被濾掉。而驗(yàn)收屏蔽碼寄存器的設(shè)計(jì)則相當(dāng)于驗(yàn)收碼寄存器某位的使能開 關(guān),當(dāng)驗(yàn)收屏蔽碼寄存器的某位置高時,則對應(yīng)的驗(yàn)收碼寄存器的該位就不能用作濾波。濾 波過程的邏輯表達(dá)式如下:
[0214] [ID.10-ID.3 一 AC.7-AC.0] U (ΑΜ·7-ΑΜ·0) = 11111111Β。
[0215] 接收濾波時,設(shè)計(jì)若該邏輯表達(dá)式成立,則此幀能夠通過濾波。
[0216] 驗(yàn)收碼寄存器及驗(yàn)收屏蔽碼寄存器設(shè)計(jì)如表9。
[0217]
[0218] 設(shè)計(jì)當(dāng)cs_acr、cs_amr被置高,則對應(yīng)寄存器為可寫狀態(tài)。
[0219] 仿真測試了濾波不通過的情況,提前將ACR寄存器置設(shè)置為'01001101',AMR設(shè)置 為'11011101'也就是只對第2位及第6位進(jìn)行濾波檢測,可以看到,測試中的ID'00011010' 第二位(A)能通過濾波,第6位(B)則不能,同時err_ac;r產(chǎn)生脈沖。
[0220] CRC_check模塊:CRC檢測模塊設(shè)計(jì)主要負(fù)責(zé)兩個功能:CRC檢驗(yàn)及填充位過濾。 [0221]由于CAN Π )協(xié)議采用了雙重位填充方式,即先對幀起始、仲裁場、控制場、數(shù)據(jù)場 進(jìn)行位填充,計(jì)算以上場位經(jīng)過填充后的CRC校驗(yàn)和,然后再對CRC校驗(yàn)和進(jìn)行位填充,因此 檢測CRC是否錯誤分為兩個方面,一是計(jì)算CRC的校驗(yàn)和部分是否正確,二是在校驗(yàn)和上的 位填充是否正確。
[0223] CRC校驗(yàn)的設(shè)計(jì)思路是:從片選置高開始,內(nèi)部設(shè)置一個22位寄存器crcjeg(初始 值為1,代表S0F)存儲data_serial_in的采樣數(shù)據(jù),存儲一個數(shù)據(jù)就左移一位,每當(dāng)首位為 1,就與生成序列進(jìn)行一次異或,然后左移(減計(jì)數(shù))直到首位為1,然后等待下一次首位為1 然后異或,直到片選置低不再讀取進(jìn)位,寄存器中所剩值若不為0,則CRC校驗(yàn)不能通過, err_crc產(chǎn)生一個脈沖。然后恢復(fù)初始值。
[0224] CRC_check模塊能檢測出位填充(A、B、C、D),并在同時使CLK_data暫停一個周期。
[0225] 接收緩沖器設(shè)計(jì):接收緩沖器負(fù)責(zé)存儲接收管理器13收到的有效數(shù)據(jù),接收緩沖 器信號設(shè)計(jì)如表11所示。
[0226] 基于接收數(shù)據(jù)完整性的考慮,如果在存儲過程中檢測到clear脈沖,則終止接收并 清除當(dāng)前這一幀。接收緩沖器設(shè)計(jì)實(shí)時向狀態(tài)寄存器報(bào)送D0S、RBS兩個狀態(tài)信號,若FIFO為 空,則將RBS置0,表示沒有待讀取的數(shù)據(jù)。命令寄存器中的兩個位RRB及C0S都能影響接收緩 沖器,若檢測到RRB置高,則清除最末尾的一幀;若檢測到C0S置高,則將DOS置低。
[0227] 表11接收緩沖器信號表
[0229] A:-旦濾波未通過,final_data_in和clk_data信號都會停止傳輸,同時就會收到 cl ear信號。
[0230] B:當(dāng)收到COS命令時,數(shù)據(jù)溢出狀態(tài)位信號D0S_reg_statuS將被置低。
[0231] C:當(dāng)收到RRB命令時,接收緩沖器中的數(shù)據(jù)將被逐幀刪除,直到?jīng)]有可讀幀接收緩 沖器狀態(tài)信號RBS_reg_status置0。
[0232]以上仿真結(jié)果表明,接收緩沖器模塊設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0233]數(shù)據(jù)幀接收過程:數(shù)據(jù)幀接收過程在CAN Π )總狀態(tài)機(jī)11的控制下,以接收管理器 13為核心,涉及到諸多模塊的協(xié)調(diào)配合,接下來對設(shè)計(jì)的數(shù)據(jù)幀接收過程進(jìn)行討論。數(shù)據(jù)幀 接收流程如所示。
[0234]首先,設(shè)定CAN FD控制器只能在總線空閑狀態(tài)時才能開始接收一個幀。此時CAN ro控制器若檢測到總線上出現(xiàn)顯性位,說明有幀開始發(fā)送。CAN Π)總狀態(tài)機(jī)11將進(jìn)入rec_ mode狀態(tài),首先對幀ID標(biāo)識符的高8位進(jìn)行濾波、幀格式以及CRC校驗(yàn)和檢測,若都通過則將 去除填充位并拆幀后的數(shù)據(jù)存入接收緩沖器,通過發(fā)送管理器12向總線發(fā)送顯性應(yīng)答信號 ACK,并通過中斷寄存器的接收中斷位提醒外部微控制器前來提取數(shù)據(jù)。外部微控制器取走 數(shù)據(jù)后會寫入RRB命令清除已經(jīng)讀取過的報(bào)文。如果不能通過濾波或接收期間檢測到錯誤, 則會停止寫入接收緩沖器并清除已經(jīng)接收的數(shù)據(jù)。出錯時還將由發(fā)送管理器12發(fā)送錯誤 幀。
[0235] 發(fā)送管理器12的模塊設(shè)計(jì):發(fā)送管理器12主要負(fù)責(zé)數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載 幀以及ACK信號的發(fā)送,由發(fā)送狀態(tài)機(jī)及發(fā)送緩沖器兩個子模塊組成,模塊劃分及信號關(guān)系 圖如9所示。
[0236] 發(fā)送狀態(tài)機(jī)模塊設(shè)計(jì):
[0237] 狀態(tài)設(shè)計(jì):發(fā)送管理器12的狀態(tài)是由CAN Π )總狀態(tài)機(jī)11單方面決定的,如表12所 示其狀態(tài)與CAN FD控制器總狀態(tài)相對應(yīng)。
[0238] 表12發(fā)送狀態(tài)機(jī)狀態(tài)與總狀態(tài)機(jī)狀態(tài)對應(yīng)表
[0240]按照狀態(tài)對發(fā)送狀態(tài)機(jī)的功能設(shè)計(jì)進(jìn)行介紹:
[0241 ] 0ff_trans:考慮到當(dāng)CAN FD總狀態(tài)機(jī)11處于bus_off及start_up狀態(tài)時,發(fā)送管 理器12沒有任何動作,故設(shè)計(jì)兩個總狀態(tài)都對應(yīng)0ff_trans。
[0242] Idle_trans:設(shè)計(jì)此狀態(tài)對應(yīng)CAN Π )總狀態(tài)機(jī)11的bus_idle狀態(tài),發(fā)送管理器12 將在Idle_trans狀態(tài)下等待發(fā)送一個幀,此時當(dāng)檢測到TR置高時,發(fā)送管理器12將發(fā)送S0F (幀起始位)。
[0243] Trans_trans:考慮到CAN FD總狀態(tài)機(jī)11進(jìn)入Arbit_mode狀態(tài)時,數(shù)據(jù)已經(jīng)開始發(fā) 送,因此將Arbit_mode、trans_mode都合并為Trans_trans狀態(tài),剛進(jìn)入該狀態(tài)時,TCS置0, 從第一個仲裁位開始發(fā)送一個幀,當(dāng)發(fā)送到應(yīng)答標(biāo)志位時,考慮到模塊間聯(lián)動的需要,發(fā)送 管理器12將向接收管理器13發(fā)送get_ack命令,提醒接收管理器13注意監(jiān)測應(yīng)答位。若發(fā)送 完成則將TCS置高。流程如所示。
[0244] Rec_trans:設(shè)計(jì)此狀態(tài)對應(yīng)CAN Π )總狀態(tài)機(jī)11的rec_mode狀態(tài),發(fā)送管理器12在 Rec_trans狀態(tài)下只需要負(fù)責(zé)應(yīng)答標(biāo)志位發(fā)送。當(dāng)檢測到Send_ack信號被置高,就發(fā)送一個 顯性位ACK。
[0245] Err_trans:設(shè)計(jì)此狀態(tài)對應(yīng)CAN FD總狀態(tài)機(jī)11的rec_mode狀態(tài),發(fā)送管理器12需 根據(jù)狀態(tài)寄存器ES位(高被動低主動)發(fā)送相應(yīng)錯誤幀,標(biāo)志位發(fā)完之后不斷發(fā)送隱性位直 到send_err_del為高則開始計(jì)數(shù)發(fā)送剩余7個隱性位。若檢測到re_mode脈沖,則從頭開始 發(fā)送相應(yīng)的錯誤幀。
[0246] Over_trans:設(shè)計(jì)此狀態(tài)對應(yīng)CAN FD總狀態(tài)機(jī)11的over_mod狀態(tài),發(fā)送管理器12 在此狀態(tài)下功能設(shè)計(jì)為首先發(fā)送6位過載標(biāo)志位,之后不斷發(fā)送隱性位直到send_err_del 為高則開始計(jì)數(shù)發(fā)送剩余7個隱性位。
[0247] 信號設(shè)計(jì):發(fā)送狀態(tài)機(jī)信號如表13所示。
[0248] 表13發(fā)送狀態(tài)機(jī)信號表
[0250] A:當(dāng)模塊處于Idle_trans狀態(tài)時,若收到TR命令,可以看到data_output上將產(chǎn)生 一個位時間的顯性位S0F,隨后開始發(fā)送幀的其它位。
[0251 ] B:當(dāng)模塊進(jìn)入Trans_trans狀態(tài)時,可以看到TCS_reg_status馬上被置低,幀的其 余位開始發(fā)送。
[0252] C:當(dāng)模塊處于Trans_trans狀態(tài)時,可以看到一旦接收到send_ack狀態(tài),data_ output上馬上發(fā)出一個顯性位ACK應(yīng)答。
[0253] D:在Err_trans狀態(tài),當(dāng)節(jié)點(diǎn)錯誤狀態(tài)ES_reg_status置高時,將發(fā)送隱性的錯誤 標(biāo)志位,收到send_err_del信號后,開始發(fā)送8位隱性的錯誤界定符。
[0254] E:在Over_trans狀態(tài)下,將首先發(fā)送6位顯性的過載標(biāo)識符,當(dāng)收到send_err_del 信號后,開始發(fā)送8位隱性的過載界定符。
[0255] 以上仿真結(jié)果表明,發(fā)送狀態(tài)機(jī)模塊設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0256] 發(fā)送緩沖器設(shè)計(jì):發(fā)送緩沖器負(fù)責(zé)存儲即將發(fā)送到總線上的待發(fā)送數(shù)據(jù)。
[0257] 信號設(shè)計(jì):發(fā)送緩沖器信號設(shè)計(jì)如表14所示??紤]到位填充機(jī)制的存在,設(shè)計(jì)了 FIF0_rd_clk與data_out對應(yīng)的數(shù)據(jù)讀取機(jī)制,每當(dāng)FIF0_rd_clk產(chǎn)生一個高電平,data_ out上就對應(yīng)一位數(shù)據(jù),并逐位后移,當(dāng)檢測到TCS_reg_status置高時,表明發(fā)送完成,則清 空當(dāng)前已發(fā)送的數(shù)據(jù),并將TBS_reg_status置高。若reset_restart置高,則寄存器清零,并 將 TBS_reg_status 置高。
[0258]若TR_ZER0被置高,說明取消發(fā)送命令A(yù)T已被響應(yīng),發(fā)送緩沖器將自動清空當(dāng)前待 發(fā)送的數(shù)據(jù),并將TBS_reg_status置高。
[0259] 表14發(fā)送緩沖器信號表
[0260]
[0261] A:當(dāng)FIF0_rd_clk不產(chǎn)生跳變(比如加入填充位時),data_out上的數(shù)據(jù)也會保持 上一時刻的數(shù)據(jù)。
[0262] B:當(dāng)TCS_reg_Status信號為高時或檢測到軟件復(fù)位時,可以看到模塊會將TBS_ reg_status 置高。
[0263] C:當(dāng)取消發(fā)送命令被執(zhí)行,TR_ZER0被置高后,TBS_reg_Status也會相應(yīng)置高。
[0264] 以上仿真結(jié)果表明,發(fā)送緩沖器設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0265] 數(shù)據(jù)幀發(fā)送過程:數(shù)據(jù)幀的發(fā)送是在CAN Π)總狀態(tài)機(jī)11的控制下,以發(fā)送管理器 12為核心,通過諸多模塊協(xié)調(diào)配合而完成的。接下來對設(shè)計(jì)的數(shù)據(jù)幀發(fā)送過程進(jìn)行討論。數(shù) 據(jù)幀發(fā)送流程如所示。
[0266] 考慮到發(fā)送緩沖器的容量限制,設(shè)計(jì)當(dāng)外部微控制器需要發(fā)送數(shù)據(jù)時,首先需要 檢測發(fā)送緩沖器狀態(tài)(狀態(tài)寄存器SR-TBS),若SR-TBS為' Γ,說明發(fā)送緩沖器為空,微控制 器可將數(shù)據(jù)寫入發(fā)送緩沖器中,同時寫入發(fā)送命令TRXAN Π)控制器在收到TR命令后再次 查詢SR-TBS位,確保其為' Γ。CAN Π)總狀態(tài)機(jī)11收到TR命令,將在總線空閑時向發(fā)送管理 器12下達(dá)發(fā)送命令。發(fā)送管理器12從發(fā)送緩沖器讀取原始數(shù)據(jù),向CRC場之前的位添加填充 位、計(jì)算CRC校驗(yàn)和、完成CRC編碼的位填充最終組成完整數(shù)據(jù)幀,并在通過總線仲裁后將剩 余位發(fā)送到總線。整個發(fā)送過程中接收管理器13對接收端數(shù)據(jù)進(jìn)行監(jiān)視,若接收到正確的 ACK信號,則發(fā)送完成,清除發(fā)送緩沖器中的內(nèi)容。若檢測出現(xiàn)錯誤,則CAN FD控制器停止發(fā) 送當(dāng)前數(shù)據(jù)幀,等待下次總線空閑時再將出錯或丟失仲裁的數(shù)據(jù)幀重發(fā)。若接收管理器13 沒有接收到應(yīng)答信號,CAN FD控制器也會自動重發(fā)該幀。
[0267] 時鐘同步器14及錯誤管理模塊15是CAN Π)控制器重要的支撐模塊。
[0268] 時鐘同步器14通過讀取時鐘寄存器的內(nèi)容,調(diào)控系統(tǒng)位時鐘周期。通過接收信號 配合兩種同步功能,向其他模塊發(fā)布總線采樣值。
[0269] 表15時鐘同步器信號表
[0270]
[0271 ]考慮到04~!70控制器在8七&1'1:_即、13118_丨(116、;[1^61'_1]1〇(16的第三位、8118。611(1_1]1〇(16 這些狀態(tài)下都具有接收一個幀的功能,在這些狀態(tài)下接收管理器13應(yīng)將sy_control置1允 許硬同步,而時鐘同步器14應(yīng)負(fù)責(zé)進(jìn)行硬同步的具體動作。故一旦檢測到sy_control被置 高,時鐘同步器14即開始等待data_input上的第一個下降沿,以進(jìn)行硬同步。
[0272 ]由于最小時間份額的個數(shù)是決定位時間周期的關(guān)鍵,改變一個位中最小時間份額 的個數(shù)即可立刻調(diào)整當(dāng)前的位周期,因此時鐘同步器14的內(nèi)部設(shè)計(jì)核心是一個最小時間份 額計(jì)數(shù)器,計(jì)數(shù)對象為最小時間份額個數(shù),計(jì)數(shù)容量由總線定時寄存器BTR0、BTR1、BTRH)設(shè) 定。
[0273]基于最小時間份額計(jì)數(shù)器設(shè)計(jì)的硬同步信號動作為:當(dāng)sy_control為高時,一旦 檢測到下降沿,計(jì)數(shù)器立刻歸零,并產(chǎn)生第一個位時鐘周期的下降沿,這時候硬同步就成功 了,節(jié)點(diǎn)成功與總線上的信號進(jìn)行了同步,接下來按照寄存器的設(shè)定值,產(chǎn)生相應(yīng)的位時鐘 周期。
[0274] 重同步的具體執(zhí)行原理也是依賴時間份額計(jì)數(shù)器,按照協(xié)議,一個位時鐘周期中 只執(zhí)行一次重同步。其信號動作設(shè)計(jì)為:在Sync置高的時候,捕捉data_input的下降沿,并 根據(jù)計(jì)數(shù)器的計(jì)數(shù)值確定當(dāng)前下降沿所在的位置??偣灿腥N可能的位置:SYNC_SEG、 PHASE_SEG1、PHASE_SEG2。
[0275] 當(dāng)檢測到下降沿處于SYNC_SEG時,A處,則表示節(jié)點(diǎn)與總線信號完美同步,不需要 重同步。
[0276] 若下降沿位于PHASE_SEG1B處,表明下降沿滯后,此時計(jì)算下降沿距離PHASE_SEG2 起點(diǎn)的時間份額數(shù)量t_num。it_num〈SJW時,將PHASE_SEG1延長t_num個時間份額,當(dāng)t_num > =S JW時,將PHASE_SEG1延長S JW個時間份額。對于延長的時間份額,采用另一個計(jì)數(shù)器t_ delay來計(jì)數(shù)延時。
[0277] 若下降沿位于PHASE_SEG2C處,表明下降沿提前,此時計(jì)算下降沿距離計(jì)數(shù)器滿值 的時間份額數(shù)量1:_11111]1。當(dāng)t_num〈SJW時,就直接開始下一個計(jì)數(shù)周期,并計(jì)數(shù)值設(shè)置在 PHASE_SEG 1起點(diǎn)處,當(dāng)t_num> = S JW時,將PHASE_SEG2縮短S JW個時間份額。對于縮短的時間 份額,直接在計(jì)數(shù)器加上值即可。
[0278] 總線定時寄存器:
[0279] 表16總線定時寄存器BTR0、BTR1、BTRH)位設(shè)計(jì)表
[0281 ]總線定時寄存器是根據(jù)CAN Π )協(xié)議的規(guī)定進(jìn)行設(shè)計(jì)的,滿足了協(xié)議中對位時間設(shè) 定的要求。
[0282] 首先是最小時間份額的設(shè)定,最小時間份額是組成位時鐘周期的最小單位,SPT.5 ~SPT.0決定了CAN FD控制器的最小時間份額,最小時間份額計(jì)算公式如下:
[0283] SPT = global_clock*( 32*SPT · 5+16*SPT · 4+8*SPT · 3+4*SPT · 2+2*SPT · 1+SPT · 0+1)
[0284] 本發(fā)明通過最小時間份額的調(diào)節(jié)來實(shí)現(xiàn)CAN FD的Flexible Data rate。
[0285] 在數(shù)據(jù)幀已進(jìn)入可變速率傳輸階段,時鐘同步器14需要以預(yù)設(shè)的更高位速率傳輸 數(shù)據(jù)。此時決定最小時間份額的寄存器位將發(fā)生變化,計(jì)算公式如下:
[0286] SPT=global_clock*(32*FPT·5+16*FPT·4+8*FPT·3+4*FPT·2+2*FPT·1+FPT·0+1)
[0287] -個位時鐘周期包括了四個部分
[0288] 同步段(SYNC_SEG):占一個最小時間份額,一個位的起始變化沿的理想情況就是 位于該段之內(nèi),重同步對位時間的調(diào)整也是以該段為基準(zhǔn)坐標(biāo)點(diǎn)。
[0289] 同步段(SYNC_SEG)為1個時間份額。
[0290]相位緩沖段1(PHASE_SEG1): -方面包括了原協(xié)議中提到的用于補(bǔ)償傳播延遲的 傳播時間段。另一方面,若重同步發(fā)生在相位緩沖段1中,那么可以通過延長相位緩沖段1來 調(diào)整采樣點(diǎn)位置。相位緩沖段1(PHASE_SEG1)的長度可設(shè)置為1-16個時間份額,計(jì)算公式如 下:
[0291] tPSEGl=SPT*(8*PSEG1.3+4*PSEGl.2+2*PSEGl.1+PSEG1.0+1)
[0292] 相位緩沖段2(PHASE_SEG2):若重同步發(fā)生在相位緩沖段2中,那么可以通過縮短 相位緩沖段2來調(diào)整采樣點(diǎn)位置。相位緩沖段2(PHASE_SEG2)的長度可設(shè)置為1-16個時間份 額,計(jì)算公式如下:
[0293] tPSEG2 = SPT*(8*PSEG2·3+4*PSEG2·2+2*PSEG2·1+PSEG2·1+1)
[0294] 同步跳轉(zhuǎn)寬度(SJW):用于規(guī)定一次重同步中,系統(tǒng)位時鐘周期的最大值。
[0295] 計(jì)算公式如下:tSJW=tSCL*(2*SJW.l+SJW.0+l)
[0296] 同步段、相位緩沖段1、相位緩沖段2以及同步跳轉(zhuǎn)寬度共同確定了位時間Tbit的 范圍:(l+PSEGl+PSEG2-tS jW,PSEGl+PSEG2+l+tS jW)。
[0297] 時鐘同步器14仿真測試:預(yù)設(shè)PHASE_SEG1為12個時間份額,PHASE_SEG2為7個時間 份額。
[0298] 從A所指向的波形可以看到,當(dāng)sy_control置高的時候,能夠捕捉到data_input的 下降沿進(jìn)行硬同步,從而立刻重新開始一個位時間。從B處可以看到硬同步后的下一位上升 沿對準(zhǔn)了位時鐘周期的同步段。
[0299] 在Sync置高的時候,一旦捕捉data_input的下降沿,則計(jì)算t_num,C所指向下降沿 出現(xiàn)在PHASE_SEG 1段,t_num為1,可以數(shù)出,模塊自動將PHASE_SEG 1段延長了一個時間份 額,相應(yīng)的該位時間也延長了一個時間份額。D處可以看到,下一位的上升沿對準(zhǔn)了位時鐘 周期的同步段。
[0300] 錯誤管理模塊15主要負(fù)責(zé)錯誤計(jì)數(shù),不關(guān)心錯誤細(xì)節(jié)。其主要工作是監(jiān)測err〇r_ add[ 1:0]、send_ack、TCS_reg_status三個信號,并采集其值做相應(yīng)處理。
[0301] 表17錯誤管理模塊信號表
[0303] 設(shè)計(jì)錯誤管理模塊15的主要作用是向其他模塊提供總線及節(jié)點(diǎn)狀態(tài),其中ES_ reg_status設(shè)計(jì)用于表征主動狀態(tài)或被動狀態(tài)。BS_reg_status設(shè)計(jì)用于表征總線在線或 總線脫離。start_bus為2時或re_start_low被置低時,計(jì)數(shù)將被清零,且ES和BS被置0。當(dāng) TCS_reg_status置1,則發(fā)送錯誤計(jì)數(shù)減1,若發(fā)送錯誤計(jì)數(shù)值已為0,則保持0。當(dāng)send_ack 置1.則接收錯誤計(jì)數(shù)減1,若接收錯誤計(jì)數(shù)值已為〇,則保持0。當(dāng)任一計(jì)數(shù)器>128時,ES_ reg_status置高,置高后的第一個錯誤幀依然是主動錯誤。當(dāng)兩個計(jì)數(shù)器都〈128時,ES_ reg_status置0〇
[0304] 若發(fā)送或接收錯誤計(jì)數(shù)器>256,BS_reg_status置高。
[0305]錯誤管理模塊15仿真測試。
[0306] A、B:對error_add的不同值接收錯誤計(jì)數(shù)器有正確的計(jì)數(shù)。
[0307] C:當(dāng)send_ack產(chǎn)生脈沖,說明正確接收一個幀,接收錯誤計(jì)數(shù)器計(jì)數(shù)值減1。
[0308] D:error_add為'11'時,發(fā)送錯誤計(jì)數(shù)器計(jì)數(shù)值加8。
[0309] E:當(dāng)TCS_reg_statUS產(chǎn)生上升沿,說明發(fā)送完成一個幀,發(fā)送錯誤計(jì)數(shù)器計(jì)數(shù)值 減1〇
[0310] F:當(dāng)任一發(fā)送計(jì)數(shù)器計(jì)數(shù)值大于128( 16進(jìn)制80)時,ES_reg_status將被置高,表 示節(jié)點(diǎn)進(jìn)入錯誤被動狀態(tài)。
[0311] G:當(dāng)任一發(fā)送器計(jì)數(shù)值大于256(16進(jìn)制100)時,BS_reg_status將被置高,此時總 線脫離,節(jié)點(diǎn)將不再工作。
[0312] 以上仿真結(jié)果表明,錯誤管理模塊15設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0313] 寄存器組16及接口管理器17:
[0314] CAN FD協(xié)議雖然較CAN 2.0有很多改良之處,但多數(shù)功能都已固化在它模塊中實(shí) 現(xiàn),而需要通過寄存器進(jìn)行設(shè)置的功能較少?;谑褂昧?xí)慣的考慮市面上多數(shù)CAN Π )控制 器設(shè)置都與SJA1000相似,因此寄存器組16的設(shè)計(jì)是在考SJA1000寄存器的基礎(chǔ)上針對CAN FD協(xié)議的需要進(jìn)行調(diào)整。
[0315] CAN Π )控制器寄存器組16中共有4個寄存器,分別為控制寄存器reg_c〇ntr〇l、狀 態(tài)寄存器status_reg、中斷寄存器Interrupt_reg、命令寄存器command_reg。
[0316]下面對各寄存器的設(shè)計(jì)作簡要介紹。
[0317] 控制寄存器reg_control負(fù)責(zé)為外部微處理器提供一些控制位,以此調(diào)控CAN FD 控制器的功能,控制寄存器地址分配及各位功能表所示,各位均為置'Γ有效。
[0318] 表18控制寄存器位功能表 [0319]
[0320] GW(g〇_W〇rk)設(shè)計(jì)用于在缺少總線啟動信號時,通過軟件啟動總線,也即將控制器 狀態(tài)調(diào)整為bus_idle狀態(tài)。
[0321 ] RR(Reset_restart)設(shè)計(jì)用于通過軟件讓控制器進(jìn)入bus_off狀態(tài)(稱為復(fù)位),需 要注意的是,RR同時也可看作bus_off狀態(tài)的標(biāo)志位,即使不被軟件置位,每當(dāng)控制器處于 bus_〇fT狀態(tài)時,RR都被自動置高。
[0322]對于不同的復(fù)位方式,根據(jù)CAN Π )總線協(xié)議,其恢復(fù)工作狀態(tài)還需要額外信號: [0323] 1.總線狀態(tài)BS由低變?yōu)楦叨沟肦R被自動置高后,若RR又被軟件置低,CAN Π )控 制器需要等待128次總線重啟信號(11個連續(xù)的隱性位為1次總線重啟信號),才能將BS自動 置' 〇 ',同時錯誤狀態(tài)ES也自動置' 0 '。
[0324] 2.若RR置高由外部硬件或軟件復(fù)位導(dǎo)致,CAN Π )控制器需要等待1次總線重啟信 號,才能將BS自動置'0'。
[0325] 狀態(tài)寄存器status_reg是展示CAN Π )控制器工作狀態(tài)的主要窗口。狀態(tài)寄存器為 只讀寄存器,只能由內(nèi)郃相關(guān)模塊提供狀態(tài)?目息。
[0326] 表19狀態(tài)寄存器位功能表
[0328]總線狀態(tài)BS:該狀態(tài)位設(shè)計(jì)由錯誤管理模塊15提供,置高表示總線脫離,置低表示 總線在線。除了寄存器模塊以外,CAN FD總狀態(tài)機(jī)11也需要此位信號作為狀態(tài)轉(zhuǎn)移的依據(jù)。 總線狀態(tài)由低變?yōu)楦?,將會有兩種情況,對應(yīng)的啟動方式也不相同。
[0329]錯誤狀態(tài)ES:該狀態(tài)位設(shè)計(jì)由錯誤管理模塊15提供,它是錯誤管理模塊15內(nèi)部錯 誤計(jì)數(shù)值的簡化反映,表征了總線被干擾的嚴(yán)重程度,接收管理器13及發(fā)送管理器12都需 要此位提供的當(dāng)前節(jié)點(diǎn)錯誤狀態(tài)作為動作依據(jù)。若任意一個錯誤計(jì)數(shù)器(發(fā)送或接收)計(jì)數(shù) 值達(dá)到128,則錯誤管理模塊15將錯誤狀態(tài)ES置為高;而若接收錯誤計(jì)數(shù)器和發(fā)送錯誤計(jì)數(shù) 的計(jì)數(shù)值都低于128,ES被置為低。
[0330]發(fā)送狀態(tài)TS:該狀態(tài)位設(shè)計(jì)由CAN Π )總狀態(tài)機(jī)11提供,供外部微控制器查詢,置高 時表示CAN FD控制器正在發(fā)送一個幀(數(shù)據(jù)幀或遠(yuǎn)程幀),置低時表示沒有發(fā)送。
[0331 ]接收狀態(tài)RS:該狀態(tài)位設(shè)計(jì)由CAN Π)總狀態(tài)機(jī)11提供,供外部微控制器查詢,置高 時表示CAN FD控制器正在接收一個幀(數(shù)據(jù)幀或遠(yuǎn)程幀),置低時表示沒有接收。
[0332]發(fā)送完成狀態(tài)TCS:該狀態(tài)位設(shè)計(jì)由發(fā)送管理器12提供,當(dāng)成功發(fā)送一幀數(shù)據(jù)時, 會將TCS置高,否則TCS就將保持低,錯誤管理模塊15依據(jù)該狀態(tài)信號進(jìn)行減計(jì)數(shù),CAN ro總 狀態(tài)機(jī)11的狀態(tài)轉(zhuǎn)移也需要該狀態(tài)信號。若將命令寄存器的發(fā)送請求位TR置高,則TCS將被 置低。
[0333]發(fā)送緩沖器狀態(tài)TBS:該狀態(tài)位設(shè)計(jì)由發(fā)送緩沖器提供,表征發(fā)送緩沖器是否為 空。設(shè)計(jì)在兩種情況下發(fā)送緩沖器會將TBS置高(表示空):
[0334] 1.當(dāng)CAN Π)控制器尚未開始發(fā)送報(bào)文時,發(fā)送請求命令TR被取消發(fā)送命令A(yù)T取消 時,借由TR_ZER0信號,發(fā)送緩沖器將被清空,TBS被置高。
[0335] 2.當(dāng)CAN FD控制器成功發(fā)送一個幀后,TCS及TBS同時被置高。
[0336]數(shù)據(jù)溢出狀態(tài)DOS:該狀態(tài)位由接收管理器13提供,當(dāng)接收緩沖器已裝滿,這時有 報(bào)文需要存入時,DOS將被置高,設(shè)計(jì)有兩種情況可將DOS置低:
[0337] 1.當(dāng)外部微控制下達(dá)清除溢出狀態(tài)命令從而將DOS置低。
[0338] 2.當(dāng)復(fù)位請求位Reset_Restart被置高時DOS將被置低。
[0339]接收緩沖器狀態(tài)RBS:該狀態(tài)位設(shè)計(jì)由接收管理器13提供,用于表征接收緩沖器中 是否有待讀取的有效幀,若有則將RBS置高,否則為置低。
[0340]中斷寄存器Interrupt_reg為只讀寄存器,各中斷信息來自CAN Π)控制器內(nèi)部其 他模塊,外部微控制器可以通過控制寄存器決定各中斷位的使能,可隨時依需要讀取中斷 位,中斷寄存器一旦已被讀取就會自動復(fù)位,當(dāng)任一使能中斷位被置高時會產(chǎn)生中斷檢測 信號,提醒微控制器讀取中斷信號。
[0341] 表20中斷寄存器位功能表
[0343]溢出中斷01:設(shè)計(jì)由接收管理器13提供,一旦接收緩沖器溢出就會置高。
[0344]錯誤中斷EI:設(shè)計(jì)由狀態(tài)寄存器提供,用于配合ES位和BS位展示總線被干擾的程 度。當(dāng)錯誤狀態(tài)ES或總線狀態(tài)BS被置高時EI置高。外部硬件復(fù)位也會將錯誤中斷EI置低。 [0345]發(fā)送完成中斷TI:設(shè)計(jì)由發(fā)送管理器12提供,當(dāng)TBS被置高時,發(fā)送完成中斷也被 置高,表示已經(jīng)清空發(fā)送緩沖器,可以存入新的待發(fā)送數(shù)據(jù)。
[0346]接收完成中斷RI:設(shè)計(jì)由接收管理器13提供,一旦接收完成就會置高。
[0347] 命令寄存器:外部微控制器通過命令寄存器向CAN FD控制器下達(dá)命令,置' Γ表示 有效命令。
[0348] 表21命令寄存器位功能表
[0349]
[0350] 清除溢出狀態(tài)COS:命令設(shè)計(jì)由接收管理器13處理,用于將接收緩沖器的數(shù)據(jù)溢出 狀態(tài)DOS位置低從而應(yīng)答數(shù)據(jù)溢出中斷信號01。
[0351]釋放接收緩沖器RRB:命令設(shè)計(jì)由接收管理器13處理,每當(dāng)外部微控制器成功讀取 接收緩沖器中的數(shù)據(jù)后,都可下達(dá)此命令,收到命令即釋放讀取指針之前的數(shù)據(jù)所占用的 存儲。
[0352] 取消發(fā)送命令A(yù)T:命令設(shè)計(jì)由發(fā)送管理器12處理,外部微控制器可以通過該命令 取消之前的發(fā)送請求,并同時清除發(fā)送緩沖器,除非發(fā)送已經(jīng)開始(發(fā)送狀態(tài)位TS為高)。
[0353] 發(fā)送請求命令TR:命令設(shè)計(jì)由發(fā)送管理器12處理,外部微控制器可以通過該命令 發(fā)送一個幀,命令將被傳遞到CAN ro總狀態(tài)機(jī)11。注意,TR只能被自動置'0',因此只能通過 取消發(fā)送命令A(yù)T,來取消發(fā)送命令TR。
[0354]接口管理器17主要設(shè)計(jì)用于負(fù)責(zé)解析來自微控制器的指令,將收到的地址信息譯 碼為對應(yīng)寄存器的選通信號,在相應(yīng)信號置低(Wr_l〇W、rd_l〇W)時,與外部微控制器交換信 息。
[0355] 接口管理器17信號引腳解釋見表22。
[0356]表22接口管理器信號引腳定義表
[0358] 仿真中對CAN FD控制器內(nèi)部各個寄存器進(jìn)行了片選通斷測試,結(jié)果表明,接口管 理器17模塊設(shè)計(jì)合理,能夠完成預(yù)設(shè)功能。
[0359] 本發(fā)明實(shí)施例提供的新型CAN FD控制器,由CAN FD總狀態(tài)機(jī)11、發(fā)送管理器12、接 收管理器13、時鐘同步器14、錯誤管理模塊15、寄存器組16、接口管理器17構(gòu)成,CAN FD總狀 態(tài)機(jī)11調(diào)控CAN Π )控制器整體功能及工作狀態(tài),發(fā)送管理器12用于所有類型的幀及ACK信 號的發(fā)送,接收管理器13用于監(jiān)視總線,并分析總線上接收到的數(shù)據(jù),時鐘同步器14根據(jù)用 戶設(shè)定及總線信號,控制位時鐘周期,并提供總線值采樣點(diǎn)及采樣值,錯誤管理模塊15對節(jié) 點(diǎn)錯誤進(jìn)行統(tǒng)計(jì)計(jì)數(shù),將計(jì)數(shù)值反應(yīng)為節(jié)點(diǎn)錯誤狀態(tài)ES和總線狀態(tài)BS信息,并匯報(bào)給CAN狀 態(tài)機(jī)及狀態(tài)寄存器,寄存器組16對控制寄存器、狀態(tài)寄存器、中斷寄存器及命令寄存器進(jìn)行 集中管理,接口管理器17用于外部微控制器與CAN Π )控制器交換信息的接口,解析來自微 控制器的指令,將收到的地址信息譯碼為對應(yīng)寄存器的選通信號,同時向微控制器反饋中 斷信息及CAN FD控制器工作狀態(tài);該新型CAN Π )控制器基于CAN FD總線通信協(xié)議規(guī)范與微 波功率分布式控制系統(tǒng)的實(shí)際需求,性能優(yōu)越,具有重要的實(shí)際工程意義。
[0360] 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種新型CAN FD控制器,其特征在于,該新型CAN FD控制器包括: CAN FD總狀態(tài)機(jī),用于調(diào)控新型CAN FD控制器整體功能及工作狀態(tài); 發(fā)送管理器,與所述CAN FD總狀態(tài)機(jī)相連接,用于所有類型的幀及ACK信號的發(fā)送; 接收管理器,與所述CAN Π )總狀態(tài)機(jī)相連接,用于監(jiān)視總線,并分析總線上接收到的數(shù) 據(jù); 時鐘同步器,與所述CAN Π )總狀態(tài)機(jī)及接收管理器相連接,用于根據(jù)用戶設(shè)定及總線 信號,控制位時鐘周期,并提供總線值采樣點(diǎn)及采樣值; 錯誤管理模塊,與所述CAN Π )總狀態(tài)機(jī)及接收管理器相連接,用于對節(jié)點(diǎn)錯誤進(jìn)行統(tǒng) 計(jì)計(jì)數(shù),將計(jì)數(shù)值反應(yīng)為節(jié)點(diǎn)錯誤狀態(tài)ES和總線狀態(tài)BS信息,并匯報(bào)給CAN狀態(tài)機(jī)及狀態(tài)寄 存器; 寄存器組,與所述CAN Π )總狀態(tài)機(jī)、發(fā)送管理器及接收管理器相連接,用于對控制寄存 器、狀態(tài)寄存器、中斷寄存器及命令寄存器進(jìn)行集中管理; 接口管理器,與所述寄存器組、發(fā)送管理器及接收管理器相連接,用于外部微控制器與 CAN ro控制器交換信息的接口,解析來自微控制器的指令,將收到的地址信息譯碼為對應(yīng) 寄存器的選通信號,同時向微控制器反饋中斷信息及CAN FD控制器工作狀態(tài)。2. 如權(quán)利要求1所述的新型CAN Π )控制器,其特征在于,所述發(fā)送管理器中嵌入發(fā)送緩 沖器,所述發(fā)送緩沖器用于存儲待發(fā)數(shù)據(jù),并為所述寄存器組中的狀態(tài)寄存器模塊提供發(fā) 送緩沖器狀態(tài); 所述發(fā)送管理器負(fù)責(zé)具體執(zhí)行任何與發(fā)送有關(guān)的命令,并在所述CAN Π )總狀態(tài)機(jī)的統(tǒng) 一協(xié)調(diào)下發(fā)送數(shù)據(jù),能從所述發(fā)送緩沖器中讀取仲裁場、控制場和數(shù)據(jù)場的內(nèi)容,然后將組 裝成CAN ro幀,并向總線發(fā)送CAN FD幀;在收到錯誤或是總線超載信號時,向總線發(fā)送錯誤 幀或超載幀;還用于向狀態(tài)寄存器提供發(fā)送完成狀態(tài)的信息; 所述接收管理器將依照CAN ro協(xié)議,執(zhí)行總線仲裁格式和各項(xiàng)檢測功能如填充錯誤檢 測、CRC檢測、錯誤幀檢測和過載幀檢測、濾波檢測,所述接收管理器中嵌入接收緩沖器,所 述接收緩沖器用于存儲接收數(shù)據(jù),并為所述寄存器組中的狀態(tài)寄存器反饋接收緩沖器狀態(tài) 及數(shù)據(jù)溢出狀態(tài),向所述寄存器組中的中斷寄存器提供接收中斷及數(shù)據(jù)溢出中斷; 所述時鐘同步器用于CAN FD通信協(xié)議所約定的重同步、硬同步及Flexible Data功能 的具體實(shí)現(xiàn),所述時鐘同步器內(nèi)含三個總線定時寄存器^1?0、8了1?1、8了1^0,用于存儲用戶設(shè) 定的位時間控制參數(shù),從而產(chǎn)生相應(yīng)的位時鐘周期; 所述寄存器組中的控制寄存器存儲來自外部CPU的控制命令;命令寄存器用于外部CPU 給CAN ro控制器下達(dá)用戶可干預(yù)的操作命令;狀態(tài)寄存器用于實(shí)時展現(xiàn)控制器內(nèi)部狀態(tài); 中斷寄存器用于展現(xiàn)各種中斷狀態(tài),方便用戶隨時提??; 所述接口管理器作為外部微控制器與CAN ro控制器交換信息的接口,解析來自微控制 器的指令,將收到的地址信息譯碼為對應(yīng)寄存器的選通信號,也向微控制器反饋中斷信息 及CAN FD控制器工作狀態(tài)。3. 如權(quán)利要求1所述的新型CAN FD控制器,其特征在于,所述新型CAN Π )控制器包括10 個狀態(tài),分別為: Bus_〇ff:總線脫離狀態(tài),考慮到CAN FD控制器在某些情況下應(yīng)拒絕響應(yīng)總線上的任何 信號,將這些情況都?xì)w總為Bus_ofT狀態(tài); Star_up:待復(fù)位狀態(tài),由于CAN FD協(xié)議要求節(jié)點(diǎn)從脫離總線恢復(fù)必須接收啟動信號, 故設(shè)置此狀態(tài),CAN FD控制器此時只能等待總線上的啟動信號; Busjdle:總線空閑狀態(tài),考慮到CAN Π )控制器開始工作后,如果總線上沒有信號,CAN FD控制器將會等待發(fā)送或接收一個幀,Bus_idle用于歸總這種情況; Arbit_mode :仲裁狀態(tài),考慮到非破壞性仲裁時,CAN FD控制器將同時進(jìn)行發(fā)送與接 收,且仲裁的不同結(jié)果將導(dǎo)向CAN FD控制器的不同功能,因此單獨(dú)設(shè)為一個狀態(tài); Transjnode:發(fā)送狀態(tài),由于數(shù)據(jù)幀的發(fā)送將是CAN Π )控制器的主要職能,也需要其他 模塊相應(yīng)功能的配合,因此單獨(dú)設(shè)為一個狀態(tài); Recjnode:接收狀態(tài),同樣數(shù)據(jù)幀的接收也是CAN Π )控制器的主要職能,也需要其他模 塊相應(yīng)功能的配合,因此單獨(dú)設(shè)為一個狀態(tài); err_mode :錯誤狀態(tài),考慮到CAN總線的較為復(fù)雜錯誤規(guī)則,為方便發(fā)送錯誤幀時各模 塊的相互配合而設(shè)置此狀態(tài); over 1 oad_mode:超載模式,為方便發(fā)送超載幀時各模塊的相互配合而設(shè)置; Interjnode:間隙狀態(tài),由于CAN Π )協(xié)議中規(guī)定了間隙場的存在及其職能,且間隙場中 不同的顯性位出現(xiàn)時間將導(dǎo)向CAN FD控制器的不同功能,因此單獨(dú)設(shè)為一個狀態(tài); Suspend_mode:掛起狀態(tài),考慮到CAN FD協(xié)議中對節(jié)點(diǎn)掛起有詳細(xì)的規(guī)定,且該情況下 CAN FD控制器的行為較為特殊,因此單獨(dú)設(shè)為一個狀態(tài)。4. 如權(quán)利要求1所述的新型CAN FD控制器,其特征在于,所述接收管理器進(jìn)一步包括: 接收狀態(tài)機(jī)模塊,由CAN FD總狀態(tài)機(jī)單方面決定其狀態(tài),狀態(tài)與整個CAN Π )控制器狀 態(tài)--對應(yīng); 過載幀檢測模塊,用于對過載幀進(jìn)行檢錯; 錯誤幀檢測模塊,當(dāng)所述接收管理器進(jìn)入err_rec狀態(tài)時,錯誤幀檢測模塊片選cs_ef_ check被置高,開始檢測錯誤狀態(tài)下的錯誤; 格式檢測模塊,當(dāng)所述接收管理器進(jìn)入arbit_rec狀態(tài)時,cs_fs_check即被置高,直到 Rec_reC狀態(tài)結(jié)束,從仲裁位的第一位起開始格式檢查和填充位檢查; 濾波檢測模塊,用于進(jìn)行簡單的報(bào)文濾波,篩選出需要進(jìn)行接收的幀進(jìn)行接收和存儲; CRC檢測模塊,用于CRC檢驗(yàn)及填充位過濾; 接收緩沖器,用于存儲接收管理器收到的有效數(shù)據(jù)。5. 如權(quán)利要求1所述的新型CAN FD控制器,其特征在于,所述發(fā)送管理器進(jìn)一步包括: 發(fā)送狀態(tài)機(jī); 發(fā)送緩沖器,用于存儲即將發(fā)送到總線上的待發(fā)送數(shù)據(jù)。6. 如權(quán)利要求1所述的新型CAN Π )控制器,其特征在于,所述時鐘同步器通過讀取時鐘 寄存器的內(nèi)容,調(diào)控系統(tǒng)位時鐘周期,并通過接收信號配合兩種同步功能,向其他模塊發(fā)布 總線采樣值。7. 如權(quán)利要求1所述的新型CAN Π )控制器,其特征在于,所述錯誤管理模塊用于錯誤計(jì) 數(shù),不關(guān)心錯誤細(xì)節(jié),監(jiān)測error_add[ 1:0]、send_ack、TCS_reg_status三個信號,并采集其 值做相應(yīng)處理。8. 如權(quán)利要求1所述的新型CAN Π )控制器,其特征在于,所述控制寄存器用于為外部微 處理器提供控制位,以此調(diào)控CAN Π )控制器的功能,控制寄存器地址分配及各位功能表所 示,各位均為置1有效; 所述狀態(tài)寄存器是展示CAN FD控制器工作狀態(tài)的主要窗口,狀態(tài)寄存器為只讀寄存 器,只能由內(nèi)部相關(guān)模塊提供狀態(tài)信息; 所述中斷寄存器為只讀寄存器,各中斷信息來自CAN Π )控制器內(nèi)部其他模塊,外部微 控制器可以通過控制中斷寄存器決定各中斷位的使能,可隨時依需要讀取中斷位,中斷寄 存器一旦已被讀取就會自動復(fù)位,當(dāng)任一使能中斷位被置高時會產(chǎn)生中斷檢測信號,提醒 微控制器讀取中斷信號; 外部微控制器通過所述命令寄存器向CAN FD控制器下達(dá)命令,置1表示有效命令。9.如權(quán)利要求1所述的新型CAN Π )控制器,其特征在于,所述接口管理器用于解析來自 微控制器的指令,將收到的地址信息譯碼為對應(yīng)寄存器的選通信號,在相應(yīng)信號置低(Wr_ low、rd_low)時,與外部微控制器交換信息。
【文檔編號】G05B23/02GK106094801SQ201610546227
【公開日】2016年11月9日
【申請日】2016年7月12日
【發(fā)明人】周新志, 唐臻宇, 鐘睿
【申請人】四川大學(xué)