一種發(fā)動機燃油供應系統(tǒng)控制時序存儲和讀取方法
【技術領域】
[0001]本發(fā)明屬于數據存儲領域,針對發(fā)動機燃油供應系統(tǒng),尤其涉及一種發(fā)動機燃油供應系統(tǒng)控制時序存儲和讀取方法。
【背景技術】
[0002]發(fā)動機燃油供應系統(tǒng)是一個多變量、時變、非線性的復雜系統(tǒng),其控制過程嚴重依賴設計人員按照經驗設定的時序信息。
[0003]早期的時序數據以機械形式存儲,但其保存形式單一,存儲過程復雜,且只能存儲簡單的時序。隨著磁存儲技術和光存儲技術的出現,時序的保存形式得到了極大的擴展,但是相對于處理器的速率來說,其讀寫時間較長,存儲器內部的機械部件較易出現故障,且易受發(fā)動機機械振動的影響。伴隨著微電子技術的發(fā)展,出現了半導體技術存儲。半導體存儲器幾乎無磨損,沒用可移動部件,因此讀取的過程中不容易受到發(fā)動機機械振動以及其移動的影響。
[0004]隨著計算機技術不斷提高、控制理論的不斷發(fā)展,發(fā)動機燃油供應系統(tǒng)處理速度越來越快,這就要求在保證時序可靠性存儲的基礎上,盡可能縮短時序存儲、讀取的時間。
[0005]目前,發(fā)動機燃油供應系統(tǒng)中使用的時序存儲方法在空間利用率、儲存/讀取速度上存在不足,不能滿足系統(tǒng)處理器的高速運行。且時序存儲方法安全性不高,在存儲/讀取過程中易受外界干擾,可能出現存儲/讀取錯誤的現象。
【發(fā)明內容】
[0006]要解決的技術問題
[0007]為了避免現有技術的不足之處,本發(fā)明提出一種發(fā)動機燃油供應系統(tǒng)控制時序存儲和讀取方法。
[0008]技術方案
[0009]本發(fā)明應用在由數字芯片為主要器件構成的數字電子控制器(DEEC)中。在DEEC內嵌的FPGA芯片中,構建有雙循環(huán)鏈表,使用者將編寫的時序信息發(fā)送給DEEC后就保存在該雙循環(huán)鏈表中。存儲在雙循環(huán)鏈表中的時序信息為臨時數據,為保證系統(tǒng)上電后能夠再次執(zhí)行時序信息,需將時序信息存儲在Flash存儲器中。
[0010]一種發(fā)動機燃油供應系統(tǒng)控制時序存儲方法,其特征在于步驟如下:
[0011 ]步驟1:當DEEC需要存儲時序時,FPGA向DSP發(fā)送存儲時序的置位信號,DSP接收到該信號后,對Flash進行格式化,及相關變量初始化;
[0012]步驟2:DSP向FPGA發(fā)送存儲準備就緒置位信號,FPGA接收該信號,完成FPGA跟DSP間存儲時序的第一次握手;
[0013]步驟3:FPGA統(tǒng)計各時序組中時序結點的數目,然后將時序版本及各時序組的結點數目進行組包,形成一個代表時序版本及各時序組結點數目的Flash頭結點,然后將頭結點和各時序組中的結點依次存儲到Flash中;
[0014]所述FPGA與DSP協(xié)同工作將一個結點存儲到Flash中的過程如下:
[0015]步驟a:FPGA向DSP發(fā)送需要存儲數據的請求信號,DSP接收到請求信號后,將對應FPGA寫數據的地址進行清空,清空完畢后立刻向FPGA發(fā)送接收存儲數據請求的回復信號,完成FPGA與DSP之間的握手;
[0016]步驟b:FPGA接收到DSP的回復信號后,向其發(fā)送本次寫數據的長度。本發(fā)明對一次寫入DSP的數據長度進行限定,當需要存儲結點的數據長度大于限定值時,分為多次向DSP寫入,一次向DSP至多寫限定值長度的數據,直至將該結點中的所有數據寫入DSP中;當存儲結點的數據長度小于設定值時,一次將其寫入DSP中;
[0017]步驟c:FPGA將需要存儲結點的數據寫入DSP中,在進行寫數據時,FPGA將每次需要存儲的數據進行ELF Hash求和,并將ELF Hash求和值接在時序數據后面一同發(fā)送給DSP;
[0018]步驟d:數據發(fā)送完畢后,FPGA向DSP發(fā)送完成發(fā)送數據操作置位信號,DSP接收到該信號后,從設定地址讀取此次寫入的數據長度,并按照長度從對應地址中讀取FPGA發(fā)送的數據,并對其進行ELF Hash求和,并與FPGA發(fā)送過來的ELF Hash求和值進行比較;
[0019]如果兩個Hash值一樣,則向FPGA發(fā)送接收到正確數據的標志信號,并將此次讀取的數據存儲到Flash的Page中,并實時判斷Flash的該Page是否滿頁,如果滿頁則將數據寫入下一Page中;如果未滿頁則繼續(xù)存儲到該Page,直至其滿頁;FPGA讀取到該信號后,結束此次數據存儲,FPGA完成跟DSP的握手。如果該結點中的數據未完全存儲,從步驟一開始繼續(xù)該過程,直至該結點中的所有數據都存儲完畢;如果該結點數據全部存儲完畢,則結束該結點的存儲,進行下一結點的存儲,直至所有時序結點都存儲完畢;
[0020]如果兩個Hash值不一樣,DSP清空接收到的數據,并向FPGA請求重新發(fā)送此次存儲的數據,FPGA接收到重發(fā)請求后,從步驟a重新開始,重新發(fā)送此次數據。
[0021 ]步驟4:PFGA將所有時序結點存儲完畢后,向DSP發(fā)送存儲時序的復位信號,DSP接收到復位信號后,將Flash的當前Page中的無效位清除,并向FPGA發(fā)送時序完成存儲的標志信號,FPGA接收到該信號后,完成跟DSP的最后一次握手,結束整個存儲過程。
[0022]—種與上述相對應的發(fā)動機燃油供應系統(tǒng)控制時序讀取方法,其特征在于步驟如下:
[0023]步驟1:當DEEC需要讀取時序時,FPGA向DSP發(fā)送讀取時序的置位信號,DSP接收到讀取時序的置位信號后,準備時序讀取工作;
[0024]步驟2:準備就緒后,DSP向FPGA發(fā)送讀取準備就緒置位信號,FPGA接收該信號,完成FPGA跟DSP的第一次握手;
[0025]步驟3:然后按照定義的Flash頭結點長度,將頭結點從Flash中讀取。然后解析頭結點,得到時序的版本及各時序組中時序結點的數目;按照各時序組中時序結點的數目,將各時序組中的每個結點依次從Flash中讀??;
[0026]所述FPGA與DSP協(xié)同工作將頭結點及時序結點從Flash中讀取的具體流程如下:
[0027]步驟a:FPGA首先向DSP寫需要讀取數據的長度,本發(fā)明對一次讀取的數據長度進行限定,當需要讀取的結點數據長度大于設定值時,分成多次讀取,一次從Flash中至多只讀取限定值長度的數據,直至將該結點中的所有數據都讀取到FPGA中;當讀取結點的數據長度小于等于設定值時,一次完成讀取;
[0028]步驟b:FPGA向DSP發(fā)送讀取數據請求信號,DSP接收到請求信號后,按照此次需要讀取的數據長度讀取Flash的Page中的數據,并將數據寫在約定的地址上。在進行寫數據的同時,DSP將從存儲中取出的數據進行ELF Hash求和,并將ELF Hash求和值寫在相應地址上發(fā)送給FPGA,DSPWFlash Page中讀取數據時,判斷當前Page的數據是否讀取完畢,讀取完畢則讀取下一Page中的數據;
[0029]步驟c:完成上述過程后,向FPGA發(fā)送允許讀取的回復信號,完成FPGA與DSP之間的握手;
[0030]步驟d:FPGA接收到DSP的回復信號后,從地址上讀取數據,并對讀取的數據進行ELF Hash求和,并與DSP發(fā)送的ELF Hash求和值進行比較;
[0031]如果兩個Hash值一樣,將此次讀取的時序信息添加到對應的時序結點中。并向DSP發(fā)送讀取到正確數據的標志信號,DSP接收到該信號后,清除地址中的數據,為下一次讀取做準備,并向FPGA發(fā)送數據清除完成的標志信號;FPGA接收到該信號后,結束此次數據讀取,FPGA完成跟DSP的握手。如果該結點的所有數據都讀取完畢,則完成此次讀取,將該結點添加到對應的時序鏈表中;如果數據未讀取完畢,從步驟一開始繼續(xù)該過程。直至該結點所有數據都讀取完畢,再進行下一結點的讀??;
[0032]如果兩個Hash值不一樣,FPGA丟棄此次讀取的數據,并向DSP請求重新發(fā)送數據,DSP接收到該請求后,清除地址中的數據,并將讀取Flash的指針回調至上一狀態(tài)。并向FPGA發(fā)送可重新讀取信號。FPGA接收到該信號后,繼續(xù)步驟一及以后的步驟,重新讀取此次數據;
[0033]步驟4:FPGA將所有時序結點讀取完畢后,向DSP發(fā)送讀取時序復位信號,DSP接收到復位信號后,將讀取Flash的指針指回初始狀態(tài),