一種lin總線解碼、觸發(fā)和分析技術(shù)的制作方法
【專(zhuān)利摘要】本發(fā)明提供了一種LIN總線解碼、觸發(fā)和分析方法,能夠?qū)IN總線傳輸?shù)臄?shù)據(jù)進(jìn)行實(shí)時(shí)解碼,并能夠根據(jù)用戶設(shè)定的不同觸發(fā)條件,在準(zhǔn)確的位置上進(jìn)行觸發(fā),并能將采集范圍內(nèi)所有幀的信息匯總成事件列表的技術(shù)。本發(fā)明針對(duì)現(xiàn)有技術(shù)的缺點(diǎn)采用硬件解碼技術(shù),能夠?qū)崿F(xiàn)多路總線實(shí)時(shí)解碼,解碼速度快,效率高,只需要一片現(xiàn)場(chǎng)可編程邏輯器件,成本低。對(duì)LIN總線的分析與觸發(fā)方法簡(jiǎn)單,成本低廉,可實(shí)現(xiàn)同時(shí)對(duì)多路LIN總線的分析與觸發(fā),可對(duì)任意波特率的LIN總線信號(hào)進(jìn)行分析,通用性強(qiáng)。
【專(zhuān)利說(shuō)明】
一種LIN總線解碼、觸發(fā)和分析技術(shù)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及LIN總線領(lǐng)域,具體涉及一種LIN總線解碼、觸發(fā)和分析方法。
【背景技術(shù)】
[0002]LIN總線是一種基于增強(qiáng)IS09141標(biāo)準(zhǔn)的低成本單總線實(shí)現(xiàn)方法。該總線網(wǎng)絡(luò)有一個(gè)主設(shè)備,多個(gè)從設(shè)備。所有的消息都由主設(shè)備發(fā)起,但是只有一個(gè)從設(shè)備響應(yīng),故不需要進(jìn)行碰撞檢測(cè)和仲裁。該通信基于UART/SCI,數(shù)據(jù)速率在lkb/s至20kb/s之間,使EMI達(dá)到最小。該總線總是處于兩種狀態(tài)之一:活動(dòng)狀態(tài)或睡眠狀態(tài)。
[0003]現(xiàn)有的LIN總線分析與觸發(fā)技術(shù)都是基于軟件算法處理的,具體的說(shuō)就是:用軟件對(duì)接收到的信號(hào)數(shù)字量化后成為邏輯O或邏輯I,然后根據(jù)LIN的協(xié)議內(nèi)容,逐位分析解碼,然后將解碼后的信息與用戶設(shè)定的觸發(fā)條件進(jìn)行比較。
[0004]現(xiàn)有的LIN總線分析與觸發(fā)技術(shù)都是采用軟件解碼,由于軟件固有的特點(diǎn)決定這種解碼方式的速度慢,尤其是當(dāng)測(cè)量?jī)x器同時(shí)對(duì)多路不同的總線信號(hào)進(jìn)行解碼分析與觸發(fā)時(shí),速度更慢。其次軟件在解碼過(guò)程中,不能同時(shí)采集總線上仍然在傳輸?shù)臄?shù)據(jù),否則先前得到的數(shù)據(jù)會(huì)被“沖掉”,這就大大增加了解碼的“死區(qū)時(shí)間”。再次,現(xiàn)有的技術(shù)的解碼要求LIN總線上傳輸?shù)臄?shù)據(jù)個(gè)數(shù)必須是奇數(shù)個(gè)或偶數(shù)個(gè)。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有LIN總線解碼速度慢,實(shí)時(shí)性差的問(wèn)題,本發(fā)明提供了一種LIN總線解碼、觸發(fā)和分析方法。
[0006]本發(fā)明采用以下的技術(shù)方案:
[0007]—種LIN總線解碼、觸發(fā)和分析方法,包括解碼模塊,該方法包括:
[0008]步驟1:將總線空閑時(shí)總線信號(hào)上的I視為隱性電平,O視為顯性電平;
[0009]步驟2:根據(jù)用戶設(shè)定的LIN總線幀特征,對(duì)輸入的LIN總線信號(hào)解碼標(biāo)準(zhǔn)進(jìn)行選擇,解碼標(biāo)準(zhǔn)包括LIN2.X和LIN1.X,兩個(gè)標(biāo)準(zhǔn)之間的區(qū)別是校驗(yàn)和所計(jì)算的包含對(duì)象不同;
[0010]步驟3:根據(jù)用戶設(shè)定的LIN總線幀特征,設(shè)定被解碼信號(hào)的波特率和數(shù)字比較器選取參考值,并設(shè)定采樣點(diǎn)位置,參考值包括觸發(fā)電平或閾值,采樣點(diǎn)位置決定了解碼器將在某一位的哪一個(gè)位置時(shí)判別該位的邏輯值,被解碼的總線信號(hào)經(jīng)過(guò)觸發(fā)電平后的信號(hào)稱為DEC_LIN信號(hào);
[0011 ]步驟4:用DEC_LIN信號(hào)的波特率的64倍時(shí)鐘信號(hào)作為解碼時(shí)鐘,DEC_LIN信號(hào)的波特率不超過(guò)20kbps,解碼時(shí)鐘由分頻時(shí)鐘模塊生成,分頻時(shí)鐘模塊將400MHz的時(shí)鐘信號(hào)按照被解碼信號(hào)波特率的64倍頻率值進(jìn)行分頻;
[0012]步驟5:當(dāng)檢測(cè)到總線信號(hào)的電平由隱性電平轉(zhuǎn)為顯性電平后,解碼模塊發(fā)出一個(gè)“類(lèi)同步間隔段開(kāi)頭”標(biāo)識(shí),在“類(lèi)同步間隔段開(kāi)頭”標(biāo)識(shí)發(fā)出后,如果連續(xù)檢測(cè)到不滿3個(gè)連續(xù)的顯性電平位后,跳轉(zhuǎn)到隱性電平,則說(shuō)明此處是幀的內(nèi)部,舍棄,重新查找“類(lèi)幀開(kāi)頭”,如果連續(xù)檢測(cè)到大于等于3個(gè)但是小于13個(gè)顯性電平位,然后跳轉(zhuǎn)到隱性電平,則判定當(dāng)前總線上發(fā)送的幀是“喚醒幀”,而如果顯性電平的持續(xù)時(shí)間達(dá)到13位后,則該幀不是“喚醒幀”而是普通的幀;
[0013]步驟6:在“類(lèi)同步間隔段開(kāi)頭”后的第一個(gè)“上升沿”出現(xiàn)后,解碼模塊發(fā)出“同步間隔段間隔符”標(biāo)志,“上升沿”指被解碼信號(hào)由“顯性電平”跳轉(zhuǎn)到“隱性電平”;解碼狀態(tài)機(jī)會(huì)在“同步間隔段間隔符”標(biāo)志后出現(xiàn)的第一個(gè)“下降沿”跳轉(zhuǎn)到下一個(gè)狀態(tài),“下降沿”指被解碼信號(hào)由“隱性電平”跳轉(zhuǎn)到“顯性電平”;
[0014]步驟7:在“同步間隔段間隔符”標(biāo)志后,解碼模塊將檢測(cè)“同步段起始位”,即一個(gè)位時(shí)的顯性電平,之后解碼模塊將連續(xù)檢測(cè)8個(gè)位時(shí),逐次相應(yīng)檢測(cè)出的每個(gè)位時(shí)所對(duì)應(yīng)的布爾值存入第一8位寄存器的逆序相應(yīng)位,當(dāng)?shù)谝?位寄存器的8位被依次存滿后,對(duì)第一8位寄存器的值進(jìn)行檢測(cè),如果該值等于8,H55,則在第8位采樣點(diǎn)處,解碼模塊會(huì)發(fā)出一個(gè)“同步段”標(biāo)志,如果該寄存器的值不等于8’H55,則在第8位采樣點(diǎn)處,解碼模塊發(fā)出一個(gè)“同步段錯(cuò)誤”標(biāo)志;
[0015]步驟8:在“同步段錯(cuò)誤”標(biāo)志后,解碼模塊將檢測(cè)“同步段結(jié)束位”,即一個(gè)位時(shí)的隱性電平,在“同步段結(jié)束位”后,解碼模塊將檢測(cè)一個(gè)位時(shí)的顯性電平,即“受保護(hù)ID段開(kāi)始位”,在“受保護(hù)ID段開(kāi)始位”后,解碼模塊將連續(xù)檢測(cè)8個(gè)位時(shí),并將每位解出的邏輯值按照先解出的存入低位的原則,逆序依次存入第二 8位寄存器;
[0016]步驟9:在解出第二8位寄存器的第LSB位后,解碼模塊將檢測(cè)一個(gè)隱性位,ΒΓ受保護(hù)ID段結(jié)束位”,同時(shí)將判斷以下兩個(gè)邏輯關(guān)系是否成立:
[0017]PIF[0] = = (PIF[0]'PIF[1]'PIF[2]'PIF[4])
[0018]PIF[1] = =?(PIF[irPIF[3rPIF[4]~PIF[5])
[0019]如果以上兩個(gè)邏輯關(guān)系均成立,則說(shuō)明PID的奇偶校驗(yàn)位是正確的,否則說(shuō)明奇偶校驗(yàn)位錯(cuò)誤;
[0020]步驟10:在“受保護(hù)ID段結(jié)束位”之后,解碼器會(huì)檢測(cè)一個(gè)隱性位,ΒΓ數(shù)據(jù)段開(kāi)始位”,在“數(shù)據(jù)段開(kāi)始位”之后,解碼器將連續(xù)檢測(cè)8個(gè)位時(shí),并按照先解出的邏輯值存入低位的原則,將8個(gè)位時(shí)所對(duì)應(yīng)的邏輯值逆序存入第三8位的寄存器中;
[0021]步驟11:解碼器將檢測(cè)I個(gè)隱性位,ΒΓ數(shù)據(jù)段停止位”,然后重復(fù)步驟10的過(guò)程,一直到連續(xù)檢測(cè)到在“數(shù)據(jù)段結(jié)束位”后緊接著檢測(cè)到I個(gè)位時(shí)的隱性電平,則認(rèn)為整個(gè)幀結(jié)束,解碼器會(huì)發(fā)出一個(gè)“幀結(jié)束”標(biāo)志;
[0022]步驟12:在“幀結(jié)束”標(biāo)志后,校驗(yàn)和檢測(cè)模塊根據(jù)用戶設(shè)定的總線標(biāo)準(zhǔn),來(lái)計(jì)算校驗(yàn)和,并與解碼模塊解出的最后一個(gè)字節(jié)的“數(shù)據(jù)段”進(jìn)行對(duì)比,如果兩者不同,則說(shuō)明總線上傳輸?shù)男r?yàn)和有誤,解碼模塊會(huì)發(fā)出一個(gè)“校驗(yàn)和錯(cuò)誤”標(biāo)志,如果相同,則總線解碼部分完成;
[0023]步驟13:用戶可選的總線觸發(fā)類(lèi)型包括喚醒幀觸發(fā)、同步間隔段觸發(fā)、ID觸發(fā)、數(shù)據(jù)觸發(fā)、ID及數(shù)據(jù)觸發(fā)、睡眠幀觸發(fā)、同步間隔段錯(cuò)誤觸發(fā)、奇偶校驗(yàn)錯(cuò)誤觸發(fā)及校驗(yàn)和錯(cuò)誤觸發(fā),總線觸發(fā)部分由比較器和觸發(fā)器組成,用戶提前設(shè)置好所需要的觸發(fā)類(lèi)型,比較器將解碼器解出的觸發(fā)類(lèi)型與用戶設(shè)定的觸發(fā)類(lèi)型進(jìn)行實(shí)時(shí)的對(duì)比,如果兩者相同,則觸發(fā)器的狀態(tài)機(jī)會(huì)產(chǎn)生一個(gè)正向脈沖,表示有觸發(fā)產(chǎn)生。
[0024]本發(fā)明具有的有益效果是:
[0025]本發(fā)明采用現(xiàn)場(chǎng)可編程邏輯器件,實(shí)現(xiàn)LIN總線的分析與觸發(fā)技術(shù),實(shí)時(shí)性強(qiáng),解碼速度快,死區(qū)時(shí)間??;對(duì)LIN總線的分析與觸發(fā)方法簡(jiǎn)單,成本低廉;可實(shí)現(xiàn)同時(shí)對(duì)多路LIN總線的分析與觸發(fā),可對(duì)任意波特率的LIN總線信號(hào)進(jìn)行分析,通用性強(qiáng);可對(duì)LIN總線上傳輸?shù)母鱾€(gè)幀中包含任意個(gè)數(shù)據(jù)字節(jié)(byte)進(jìn)行解碼,不拘泥于奇數(shù)個(gè)或者偶數(shù)個(gè)。本發(fā)明采用現(xiàn)場(chǎng)可編程邏輯器件,實(shí)現(xiàn)LIN總線的分析與觸發(fā)技術(shù)。
【附圖說(shuō)明】
[0026]圖1為L(zhǎng)IN總線普通幀格式示意圖。
[0027]圖2為L(zhǎng)IN總線解碼過(guò)程的結(jié)構(gòu)示意圖。
[0028]圖3為L(zhǎng)IN總線解碼的狀態(tài)機(jī)的工作流程圖。
【具體實(shí)施方式】
[0029]下面結(jié)合附圖對(duì)本發(fā)明進(jìn)行具體的說(shuō)明:
[0030]結(jié)合圖1至圖3,一種LIN總線解碼、觸發(fā)和分析方法,包括解碼模塊,該方法包括:
[0031]步驟1:將總線空閑時(shí)總線信號(hào)上的I視為隱性電平,O視為顯性電平。
[0032]步驟2:根據(jù)用戶設(shè)定的LIN總線幀特征,對(duì)輸入的LIN總線信號(hào)解碼標(biāo)準(zhǔn)進(jìn)行選擇,解碼標(biāo)準(zhǔn)包括LIN2.X和LIN1.X,兩個(gè)標(biāo)準(zhǔn)之間的區(qū)別是校驗(yàn)和所計(jì)算的包含對(duì)象不同。
[0033]步驟3:根據(jù)用戶設(shè)定的LIN總線幀特征,設(shè)定被解碼信號(hào)的波特率和數(shù)字比較器選取參考值,并設(shè)定采樣點(diǎn)位置,參考值包括觸發(fā)電平或閾值,采樣點(diǎn)位置決定了解碼器將在某一位的哪一個(gè)位置時(shí)判別該位的邏輯值,被解碼的總線信號(hào)經(jīng)過(guò)觸發(fā)電平后的信號(hào)稱為DEC_LIN信號(hào)。
[0034]步驟4:用DEC_LIN信號(hào)的波特率的64倍時(shí)鐘信號(hào)作為解碼時(shí)鐘,DEC_LIN信號(hào)的波特率不超過(guò)20kbps,解碼時(shí)鐘由專(zhuān)門(mén)的分頻時(shí)鐘模塊生成,分頻時(shí)鐘模塊將400MHz的時(shí)鐘信號(hào)按照被解碼信號(hào)波特率的64倍頻率值進(jìn)行分頻。
[0035]步驟5:解碼模塊首先根據(jù)幀條件,檢測(cè)出“可能的”幀同步頭的“開(kāi)頭”,之所以要檢測(cè)出“可能的”幀同步間隔段的“開(kāi)頭”是因?yàn)?,解碼模塊首先采集到的是某一幀的中間位置,或者說(shuō)非總線空閑的位置。按照LIN總線協(xié)議的格式,必須先將“喚醒幀”的可能性排除掉后,然后才能確定該幀是普通的幀。當(dāng)檢測(cè)到總線信號(hào)的電平由隱性電平轉(zhuǎn)為顯性電平后,解碼模塊發(fā)出一個(gè)“類(lèi)同步間隔段開(kāi)頭”標(biāo)識(shí),表示該位置有可能是幀開(kāi)頭。在“類(lèi)同步間隔段開(kāi)頭”標(biāo)識(shí)發(fā)出后,如果連續(xù)檢測(cè)到不滿3個(gè)連續(xù)的顯性電平位后,跳轉(zhuǎn)到隱性電平,則說(shuō)明此處是幀的內(nèi)部,舍棄,重新查找“類(lèi)幀開(kāi)頭”,如果連續(xù)檢測(cè)到大于等于3個(gè)但是小于13個(gè)顯性電平位,然后跳轉(zhuǎn)到隱性電平,則判定當(dāng)前總線上發(fā)送的幀是“喚醒幀”,而如果顯性電平的持續(xù)時(shí)間達(dá)到13位后,則該幀不是“喚醒幀”而是普通的幀。
[0036]步驟6:在“類(lèi)同步間隔段開(kāi)頭”后的第一個(gè)“上升沿”出現(xiàn)后,解碼模塊發(fā)出“同步間隔段間隔符”標(biāo)志,“上升沿”指被解碼信號(hào)由“顯性電平”跳轉(zhuǎn)到“隱性電平”;由于LIN協(xié)議本身只規(guī)定了“同步間隔段間隔符”的電平極性為隱性電平,但是沒(méi)有規(guī)定該電平持續(xù)的時(shí)間長(zhǎng)度,因此,解碼狀態(tài)機(jī)會(huì)在“同步間隔段間隔符”標(biāo)志后出現(xiàn)的第一個(gè)“下降沿”跳轉(zhuǎn)到下一個(gè)狀態(tài),“下降沿”指被解碼信號(hào)由“隱性電平”跳轉(zhuǎn)到“顯性電平”。
[0037]步驟7:在“同步間隔段間隔符”標(biāo)志后,解碼模塊將檢測(cè)“同步段起始位”,即一個(gè)位時(shí)的顯性電平,之后解碼模塊將連續(xù)檢測(cè)8個(gè)位時(shí),逐次相應(yīng)檢測(cè)出的每個(gè)位時(shí)所對(duì)應(yīng)的布爾值存入第一8位寄存器的逆序相應(yīng)位,當(dāng)?shù)谝?位寄存器的8位被依次存滿后,對(duì)第一8位寄存器的值進(jìn)行檢測(cè),如果該值等于8,H55,則在第8位采樣點(diǎn)處,解碼模塊會(huì)發(fā)出一個(gè)“同步段”標(biāo)志,如果該寄存器的值不等于8’H55,則在第8位采樣點(diǎn)處,解碼模塊發(fā)出一個(gè)“同步段錯(cuò)誤”標(biāo)志。
[0038]步驟8:在“同步段錯(cuò)誤”標(biāo)志后,解碼模塊將檢測(cè)“同步段結(jié)束位”,即一個(gè)位時(shí)的隱性電平,在“同步段結(jié)束位”后,解碼模塊將檢測(cè)一個(gè)位時(shí)的顯性電平,即“受保護(hù)ID段開(kāi)始位”,在“受保護(hù)ID段開(kāi)始位”后,解碼模塊將連續(xù)檢測(cè)8個(gè)位時(shí),并將每位解出的邏輯值按照先解出的存入低位的原則,逆序依次存入第二 8位寄存器;
[0039]步驟9:在解出第二8位寄存器的第LSB位后,解碼模塊將檢測(cè)一個(gè)隱性位,ΒΓ受保護(hù)ID段結(jié)束位”,同時(shí)將判斷以下兩個(gè)邏輯關(guān)系是否成立:
[0040]PIF[0] = = (PIF[0]'PIF[1]'PIF[2]'PIF[4])
[0041]PIF[1] = =?(PIF[irPIF[3rPIF[4]~PIF[5])
[0042]如果以上兩個(gè)邏輯關(guān)系均成立,則說(shuō)明PID的奇偶校驗(yàn)位是正確的,否則說(shuō)明奇偶校驗(yàn)位錯(cuò)誤。
[0043]步驟10:“受保護(hù)ID段結(jié)束位”后,解碼模塊將進(jìn)入“數(shù)據(jù)段”(DF)的檢測(cè)。LIN總線協(xié)議并沒(méi)有規(guī)定幀中的哪一部分顯示數(shù)據(jù)長(zhǎng)度碼的信息,數(shù)據(jù)的內(nèi)容和藏毒是由系統(tǒng)設(shè)計(jì)者根據(jù)幀ID事先約定好的,這給解碼帶來(lái)一定的困難。因?yàn)榻獯a器是站在“旁觀者”的角度來(lái)“觀察”總線信號(hào),解碼器本身是不應(yīng)該參與總線通信的。因此,解碼器本身不能提前知道在某一幀中,總線上會(huì)傳輸幾個(gè)數(shù)據(jù)字節(jié)。經(jīng)過(guò)分析發(fā)現(xiàn),“數(shù)據(jù)段”(DF)后面緊鄰的“校驗(yàn)和段”(CF)在形式上與“數(shù)據(jù)段”(DF)是完全一致的?!靶r?yàn)和段”后就是整個(gè)幀的結(jié)束了,與“校驗(yàn)和”是容易區(qū)分出來(lái)的。因此,將“校驗(yàn)和段”當(dāng)作“數(shù)據(jù)段”來(lái)解,在顯示屏顯示的時(shí)候,由軟件進(jìn)行處理(軟件接收到解碼器發(fā)過(guò)來(lái)的解碼信息,整理后再進(jìn)行顯示),不會(huì)把“校驗(yàn)和段”顯示為“數(shù)據(jù)段”。
[0044]在“受保護(hù)ID段結(jié)束位”之后,解碼器會(huì)檢測(cè)一個(gè)隱性位,ΒΓ數(shù)據(jù)段開(kāi)始位”,在“數(shù)據(jù)段開(kāi)始位”之后,解碼器將連續(xù)檢測(cè)8個(gè)位時(shí),并按照先解出的邏輯值存入低位的原貝IJ,將8個(gè)位時(shí)所對(duì)應(yīng)的邏輯值逆序存入第三8位的寄存器中;
[0045]步驟11:解碼器將檢測(cè)I個(gè)隱性位,ΒΓ數(shù)據(jù)段停止位”,然后重復(fù)步驟10的過(guò)程,一直到連續(xù)檢測(cè)到在“數(shù)據(jù)段結(jié)束位”后緊接著檢測(cè)到I個(gè)位時(shí)的隱性電平,則認(rèn)為整個(gè)幀結(jié)束,解碼器會(huì)發(fā)出一個(gè)“幀結(jié)束”標(biāo)志。因?yàn)槿绻?dāng)前的I個(gè)字節(jié)數(shù)據(jù)結(jié)束后,后面還繼續(xù)有數(shù)據(jù)的話,“數(shù)據(jù)段結(jié)束位”后不可能緊接著I個(gè)位時(shí)的隱性電平,而應(yīng)該是I個(gè)位時(shí)的顯性電平,即“數(shù)據(jù)段開(kāi)始位”。
[0046]步驟12:在“幀結(jié)束”標(biāo)志后,校驗(yàn)和檢測(cè)模塊會(huì)馬上根據(jù)用戶設(shè)定的總線標(biāo)準(zhǔn),SPLIN1.X或LIN2.X,來(lái)計(jì)算真正的校驗(yàn)和,并與解碼模塊解出的最后一個(gè)字節(jié)的“數(shù)據(jù)段”(其實(shí)是校驗(yàn)和段)進(jìn)行對(duì)比,如果兩者不同,則說(shuō)明總線上傳輸?shù)男r?yàn)和有誤,解碼模塊會(huì)發(fā)出一個(gè)“校驗(yàn)和錯(cuò)誤”標(biāo)志,如果相同,則總線解碼部分完成。
[0047]步驟13:用戶可選的總線觸發(fā)類(lèi)型包括喚醒幀觸發(fā)、同步間隔段觸發(fā)、ID觸發(fā)、數(shù)據(jù)觸發(fā)、ID及數(shù)據(jù)觸發(fā)、睡眠幀觸發(fā)、同步間隔段錯(cuò)誤觸發(fā)、奇偶校驗(yàn)錯(cuò)誤觸發(fā)及校驗(yàn)和錯(cuò)誤觸發(fā),總線觸發(fā)部分由比較器和觸發(fā)器組成,用戶提前設(shè)置好所需要的觸發(fā)類(lèi)型,比較器將解碼器解出的觸發(fā)類(lèi)型與用戶設(shè)定的觸發(fā)類(lèi)型進(jìn)行實(shí)時(shí)的對(duì)比,如果兩者相同,則觸發(fā)器的狀態(tài)機(jī)會(huì)產(chǎn)生一個(gè)正向脈沖,表示有觸發(fā)產(chǎn)生。
[0048]由于LIN總線信號(hào)中不包含“時(shí)鐘線”,因此,解碼模塊需要對(duì)接收到的總線信號(hào)是多少個(gè)比特位進(jìn)行判斷。“比特位數(shù)據(jù)提取模塊”的作用就是判斷出在一段時(shí)間內(nèi)所接收到的數(shù)據(jù)是多少個(gè)比特位,并且要識(shí)別出每一位的邏輯值是多少。
[0049]總線上傳輸?shù)摹氨忍匚粩?shù)據(jù)提取模塊”中計(jì)數(shù)器的工作方式如下:設(shè)置計(jì)數(shù)器:sample_cnt和code_cnt,兩者位寬均為6比特位。其中sample_cnt的作用是在從解碼模塊找到“類(lèi)同步間隔段開(kāi)頭”開(kāi)始,在每個(gè)解碼時(shí)鐘的上升沿,從O開(kāi)始自加I計(jì)數(shù),一直到記滿6位數(shù)后,自動(dòng)跳轉(zhuǎn)到0,繼續(xù)自加計(jì)數(shù)。Code_Cnt的作用是從解碼模塊找到“類(lèi)同步間隔段開(kāi)頭”開(kāi)始,在每個(gè)解碼時(shí)鐘的上升沿,如果LIN總線信號(hào)的電平為顯性電平,則Code_Cnt從O開(kāi)始自加I計(jì)數(shù),否則code_cnt的值被置為O。
[0050]“比特位數(shù)據(jù)提取模塊”的工作方式如下:當(dāng)設(shè)定采集位置(CATCH_P0S)時(shí),在sample_cnt = CATCH_P0S 時(shí),判斷 code_cnt 的值是否大于 CATCH_P0S/2,如果 code_cnt 的值大于CATCH_P0S/2則說(shuō)明該位的邏輯值為O,如果code_cnt的值不大于CATCH_P0S/2,則說(shuō)明該位的邏輯值為I。其中CATCH_P0S的值設(shè)定時(shí)應(yīng)介于O到63之間。
[0051]通過(guò)軟件來(lái)循環(huán)判斷接收到的“類(lèi)同步間隔段開(kāi)頭”后面是否緊接著有“喚醒幀”或者“同步間隔段間隔符”標(biāo)志。如果沒(méi)有,則說(shuō)明該“類(lèi)同步間隔段開(kāi)頭”是假的,軟件人員應(yīng)該拋棄該標(biāo)志,重新搜、判斷下一個(gè)“類(lèi)同步間隔段開(kāi)頭”。如果搜索到某一個(gè)“類(lèi)同步間隔段開(kāi)頭”后緊接著是一個(gè)“喚醒幀”標(biāo)志,則說(shuō)明當(dāng)前幀是“喚醒幀”,軟件人員應(yīng)該按照“喚醒幀”的格式,在屏幕上響應(yīng)的位置繪制“喚醒幀”的解碼符號(hào)。如果搜索到某一個(gè)“類(lèi)同步間隔段開(kāi)頭”后緊跟著一個(gè)“同步間隔段間隔符”標(biāo)志,則說(shuō)明該幀是普通幀,軟件人員應(yīng)該按照“普通幀”的格式在屏幕上響應(yīng)的位置繪制該幀的解碼符號(hào)。
[0052]如果搜索到某一個(gè)“數(shù)據(jù)段開(kāi)始位”后面緊跟著一個(gè)“數(shù)據(jù)段結(jié)束位”,則說(shuō)明該位置是真正的幀結(jié)束,軟件人員在繪制解碼符號(hào)的時(shí)候,應(yīng)該拋棄該“數(shù)據(jù)段開(kāi)始位”。這種處理的必要性是由于將LIN總線的“校驗(yàn)和段”當(dāng)做普通的“數(shù)據(jù)”進(jìn)行解碼所要求的。
[0053]實(shí)施例1
[0054]LIN總線解碼的狀態(tài)機(jī)工作方式如下:
[0055]狀態(tài)O:總線空閑狀態(tài),用來(lái)復(fù)位狀態(tài)機(jī),并將所有計(jì)數(shù)器的值清零。如果檢測(cè)到DEC_LIN的值為1(即當(dāng)前總線電平處于隱性電平,下同),則狀態(tài)機(jī)將跳轉(zhuǎn)到狀態(tài)I;如果檢測(cè)到DEC_LIN的值為0(即當(dāng)前總線電平處于顯性電平,下同),則狀態(tài)機(jī)將一直保持在狀態(tài)O。
[0056]狀態(tài)1:“類(lèi)同步間隔段開(kāi)頭”提取狀態(tài),在狀態(tài)機(jī)從狀態(tài)O跳轉(zhuǎn)到狀態(tài)I的時(shí)候,解碼模塊會(huì)發(fā)出“類(lèi)同步間隔段開(kāi)頭”標(biāo)志。在當(dāng)前狀態(tài)下,解碼模塊將連續(xù)采集13個(gè)位,并根據(jù)連續(xù)采集的結(jié)果進(jìn)行狀態(tài)跳轉(zhuǎn):如果連續(xù)采集到不超過(guò)3個(gè)位的O后,緊接著DEC_LIN就變成了 I,則說(shuō)明當(dāng)前位置不是幀開(kāi)頭,狀態(tài)機(jī)將返回狀態(tài)O,進(jìn)行DEC_LIN的檢測(cè);如果連續(xù)采集到超過(guò)3個(gè)位且小于13個(gè)位的O后,緊接著DEC_LIN變成I,則說(shuō)明該位置是“喚醒幀”,狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)4;如果連續(xù)采集到超過(guò)13個(gè)位的O后,DEC_LIN變成I,則說(shuō)明該位置是普通幀的“同步間隔段間隔符”,狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)2。
[0057]狀態(tài)2:“同步間隔段間隔符”提取狀態(tài),用來(lái)提取“同步間隔段間隔符”。由于LIN協(xié)議標(biāo)準(zhǔn)只是規(guī)定“同步間隔段的間隔符是至少持續(xù)I位的隱性電平”,因此,狀態(tài)3將一直采集,直到采集到DEC_LIN跳轉(zhuǎn)為O,狀態(tài)機(jī)才會(huì)跳轉(zhuǎn)到狀態(tài)3,否則狀態(tài)機(jī)將一直停留在狀態(tài)2。
[0058]狀態(tài)3:“同步段開(kāi)始位”提取狀態(tài),狀態(tài)機(jī)將采集I位的0,在sample_cnt = CATCH_POS時(shí),解碼模塊發(fā)出一個(gè)“同步段開(kāi)始位”標(biāo)志,在sample_cnt = 63時(shí)狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)5。
[0059]狀態(tài)4:“喚醒幀”提取狀態(tài),解碼模塊發(fā)出“喚醒幀”標(biāo)志,在sample_Cnt= 63狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)O。
[0060]狀態(tài)5: “同步段”提取狀態(tài),狀態(tài)機(jī)將逐位采集,連續(xù)采集8位,并將第i位的邏輯值存入第一8位寄存器SBF的第i位中,i的取值范圍是O至7。如果i不等于7,則狀態(tài)機(jī)將一直保持在狀態(tài)4,如果i等于7,則狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)6。
[0061]狀態(tài)6:“同步段停止位”提取狀態(tài),狀態(tài)機(jī)將采集I位的隱性電平。對(duì)第一8位寄存器SBF的邏輯值進(jìn)行判斷,如果SBF = S’H55,則說(shuō)明同步段是正確的,解碼模塊輸出“同步段停止位”標(biāo)志,狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)7;否則,解碼模塊輸出“同步段錯(cuò)誤”標(biāo)志,狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)7。
[0062]狀態(tài)7:“同步段間隔符”提取狀態(tài),由于LIN總線協(xié)議并沒(méi)有明確規(guī)定“同步段間隔符”的長(zhǎng)度,因此,狀態(tài)機(jī)7將一直檢測(cè)DEC_LIN變?yōu)镺,然后狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)8,同時(shí)解碼器發(fā)出一個(gè)“同步段間隔符”標(biāo)志,否則一直停留在狀態(tài)7中。
[0063]狀態(tài)8:“受保護(hù)ID段開(kāi)始位”提取狀態(tài),在該狀態(tài)下,解碼器將檢測(cè)I位的0,并發(fā)出一個(gè)“受保護(hù)ID開(kāi)始位”標(biāo)志,同時(shí)狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)9。
[0064]狀態(tài)9:“受保護(hù)ID段開(kāi)始位”提取狀態(tài),狀態(tài)機(jī)將連續(xù)提取8位,并按照提取的先后順序,依次存入第二8位寄存器PIF的第η位(η從O起計(jì)數(shù),計(jì)到7為止)。在第7位提取完成后,馬上判斷以下兩個(gè)邏輯關(guān)系式是否同時(shí)成立,如果同時(shí)成立,貝1Jid_check_reg=l,否則id_check_reg = 0。第7位提取完成后,狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)10。
[0065]PIF[0] = = (PIF[0]'PIF[1]'PIF[2]'PIF[4])
[0066]PIF[1] = =?(PIF[irPIF[3rPIF[4]~PIF[5])
[0067]狀態(tài)10:“受保護(hù)ID段結(jié)束位”判斷狀態(tài),如果id_check_reg=l,則解碼器發(fā)出一個(gè)“受保護(hù)ID段結(jié)束位”標(biāo)志,否則解碼器發(fā)出一個(gè)“受保護(hù)ID奇偶校驗(yàn)錯(cuò)誤”標(biāo)志。在samp I e_cnt = CATCH_P0S時(shí),狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)11。
[0068]狀態(tài)11:“受保護(hù)ID段應(yīng)答間隔”提取狀態(tài),由于LIN總線協(xié)議沒(méi)有明確規(guī)定“受保護(hù)ID段應(yīng)答間隔”的長(zhǎng)度,因此狀態(tài)機(jī)11如果檢測(cè)不到DEC_LIN變?yōu)镺,則其將一直停留在狀態(tài)11,否則狀態(tài)跳轉(zhuǎn)到狀態(tài)12。
[0069]狀態(tài)12: “數(shù)據(jù)段開(kāi)始位”判斷提取狀態(tài),狀態(tài)機(jī)將檢測(cè)I位,并在sample_cnt =CATCH_P0S時(shí)檢測(cè)到DEC_LIN = 0,說(shuō)明此處是下一個(gè)“數(shù)據(jù)段開(kāi)始位”,解碼器輸出一個(gè)“數(shù)據(jù)段開(kāi)始位”標(biāo)志,在sample_cnt = 63時(shí)跳轉(zhuǎn)到狀態(tài)13;如果在sample_cnt = CATCH_POS時(shí)檢測(cè)到DEC_L IN = I,則說(shuō)明已經(jīng)是“幀結(jié)束”,在samp I e_cnt = 6 3時(shí)跳轉(zhuǎn)到狀態(tài)15。
[0070]狀態(tài)13:“數(shù)據(jù)段”提取狀態(tài),狀態(tài)機(jī)將連續(xù)提取8位,并按照提取的先后順序,將第m位(m從O開(kāi)始計(jì)數(shù),記到7為止)依次存入第三8位寄存器的第7-m位,每當(dāng)bit_cnt = 7時(shí),byte_cnt將自加I,用以記錄當(dāng)前幀中傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)。其中“校驗(yàn)和段”當(dāng)作普通的“數(shù)據(jù)段”進(jìn)行解碼。bit_cnt計(jì)數(shù)器的寬度為3位。每當(dāng)bit_cnt = 7且sample_cnt = CATCH_POS時(shí),解碼器將輸出一個(gè)“數(shù)據(jù)”標(biāo)志,sample_Cnt = 63時(shí)狀態(tài)跳轉(zhuǎn)到狀態(tài)14。[0071 ] 狀態(tài)14: “數(shù)據(jù)段結(jié)束位”提取狀態(tài),狀態(tài)機(jī)將在sample_cnt = CATCH_P0S時(shí),檢測(cè)I個(gè)隱性位,在s amp le_cnt = 63時(shí)跳轉(zhuǎn)到狀態(tài)12。
[0072]狀態(tài)15:“幀結(jié)束”提取狀態(tài),狀態(tài)機(jī)將在sample_Cnt= 63時(shí)輸出一個(gè)“幀結(jié)束”標(biāo)志,同時(shí)狀態(tài)機(jī)跳轉(zhuǎn)到狀態(tài)I。
[0073]本發(fā)明采用硬件解碼技術(shù),能夠?qū)崿F(xiàn)多路總線實(shí)時(shí)解碼,解碼速度快,效率高,只需要一片現(xiàn)場(chǎng)可編程邏輯器件,成本低。
[0074]當(dāng)然,上述說(shuō)明并非是對(duì)本發(fā)明的限制,本發(fā)明也并不僅限于上述舉例,本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明的實(shí)質(zhì)范圍內(nèi)所做出的變化、改型、添加或替換,也應(yīng)屬于本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種LIN總線解碼、觸發(fā)和分析方法,其特征在于,包括解碼模塊,該方法包括: 步驟1:將總線空閑時(shí)總線信號(hào)上的I視為隱性電平,O視為顯性電平; 步驟2:根據(jù)用戶設(shè)定的LIN總線幀特征,對(duì)輸入的LIN總線信號(hào)解碼標(biāo)準(zhǔn)進(jìn)行選擇,解碼標(biāo)準(zhǔn)包括LIN2.X和LINl.X ; 步驟3:根據(jù)用戶設(shè)定的LIN總線幀特征,設(shè)定被解碼信號(hào)的波特率和數(shù)字比較器選取參考值,并設(shè)定采樣點(diǎn)位置,參考值包括觸發(fā)電平或閾值,采樣點(diǎn)位置決定了解碼器將在某一位的哪一個(gè)位置時(shí)判別該位的邏輯值,被解碼的總線信號(hào)經(jīng)過(guò)觸發(fā)電平后的信號(hào)稱為DEC_LIN信號(hào); 步驟4:用DEC_LIN信號(hào)的波特率的64倍時(shí)鐘信號(hào)作為解碼時(shí)鐘,DEC_LIN信號(hào)的波特率不超過(guò)20kbps,解碼時(shí)鐘由分頻時(shí)鐘模塊生成,分頻時(shí)鐘模塊將400MHz的時(shí)鐘信號(hào)按照被解碼信號(hào)波特率的64倍頻率值進(jìn)行分頻; 步驟5:當(dāng)檢測(cè)到總線信號(hào)的電平由隱性電平轉(zhuǎn)為顯性電平后,解碼模塊發(fā)出一個(gè)“類(lèi)同步間隔段開(kāi)頭”標(biāo)識(shí),在“類(lèi)同步間隔段開(kāi)頭”標(biāo)識(shí)發(fā)出后,如果連續(xù)檢測(cè)到不滿3個(gè)連續(xù)的顯性電平位后,跳轉(zhuǎn)到隱性電平,則說(shuō)明此處是幀的內(nèi)部,舍棄,重新查找“類(lèi)幀開(kāi)頭”,如果連續(xù)檢測(cè)到大于等于3個(gè)但是小于13個(gè)顯性電平位,然后跳轉(zhuǎn)到隱性電平,則判定當(dāng)前總線上發(fā)送的幀是“喚醒幀”,而如果顯性電平的持續(xù)時(shí)間達(dá)到13位,則該幀不是“喚醒幀”而是普通的幀; 步驟6:在“類(lèi)同步間隔段開(kāi)頭”后的第一個(gè)“上升沿”出現(xiàn)后,解碼模塊發(fā)出“同步間隔段間隔符”標(biāo)志,“上升沿”指被解碼信號(hào)由“顯性電平”跳轉(zhuǎn)到“隱性電平”;解碼狀態(tài)機(jī)會(huì)在“同步間隔段間隔符”標(biāo)志后出現(xiàn)的第一個(gè)“下降沿”跳轉(zhuǎn)到下一個(gè)狀態(tài),“下降沿”指被解碼信號(hào)由“隱性電平”跳轉(zhuǎn)到“顯性電平”; 步驟7:在“同步間隔段間隔符”標(biāo)志后,解碼模塊將檢測(cè)“同步段起始位”,即一個(gè)位時(shí)的顯性電平,之后解碼模塊將連續(xù)檢測(cè)8個(gè)位時(shí),逐次相應(yīng)檢測(cè)出的每個(gè)位時(shí)所對(duì)應(yīng)的布爾值存入第一8位寄存器的逆序相應(yīng)位,當(dāng)?shù)谝?位寄存器的8位被依次存滿后,對(duì)第一8位寄存器的值進(jìn)行檢測(cè),如果該值等于8 ’ H55,則在第8位采樣點(diǎn)處,解碼模塊會(huì)發(fā)出一個(gè)“同步段”標(biāo)志,如果該寄存器的值不等于8’H55,則在第8位采樣點(diǎn)處,解碼模塊發(fā)出一個(gè)“同步段錯(cuò)誤”標(biāo)志; 步驟8:在“同步段錯(cuò)誤”標(biāo)志后,解碼模塊將檢測(cè)“同步段結(jié)束位”,即一個(gè)位時(shí)的隱性電平,在“同步段結(jié)束位”后,解碼模塊將檢測(cè)一個(gè)位時(shí)的顯性電平,即“受保護(hù)ID段開(kāi)始位”,在“受保護(hù)ID段開(kāi)始位”后,解碼模塊將連續(xù)檢測(cè)8個(gè)位時(shí),并將每位解出的邏輯值按照先解出的存入低位的原則,逆序依次存入第二 8位寄存器; 步驟9:在解出第二8位寄存器的第LSB位后,解碼模塊將檢測(cè)一個(gè)隱性位,即“受保護(hù)ID段結(jié)束位”,同時(shí)將判斷以下兩個(gè)邏輯關(guān)系是否成立: PIF[0] = = (PIF[0]'PIF[1]'PIF[2]'PIF[4]) PIF[1] = =?(PIF[irPIF[3]~PIF[4rPIF[5]) 如果以上兩個(gè)邏輯關(guān)系均成立,則說(shuō)明PID的奇偶校驗(yàn)位是正確的,否則說(shuō)明奇偶校驗(yàn)位錯(cuò)誤; 步驟10:在“受保護(hù)ID段結(jié)束位”之后,解碼器會(huì)檢測(cè)一個(gè)隱性位,即“數(shù)據(jù)段開(kāi)始位”,在“數(shù)據(jù)段開(kāi)始位”之后,解碼器將連續(xù)檢測(cè)8個(gè)位時(shí),并按照先解出的邏輯值存入低位的原貝IJ,將8個(gè)位時(shí)所對(duì)應(yīng)的邏輯值逆序存入第三8位的寄存器中; 步驟11:解碼器將檢測(cè)I個(gè)隱性位,即“數(shù)據(jù)段停止位”,然后重復(fù)步驟10的過(guò)程,一直到連續(xù)檢測(cè)到在“數(shù)據(jù)段結(jié)束位”后緊接著檢測(cè)到I個(gè)位時(shí)的隱性電平,則認(rèn)為整個(gè)幀結(jié)束,解碼器會(huì)發(fā)出一個(gè)“幀結(jié)束”標(biāo)志; 步驟12:在“幀結(jié)束”標(biāo)志后,校驗(yàn)和檢測(cè)模塊根據(jù)用戶設(shè)定的總線標(biāo)準(zhǔn),來(lái)計(jì)算校驗(yàn)和,并與解碼模塊解出的最后一個(gè)字節(jié)的“數(shù)據(jù)段”進(jìn)行對(duì)比,如果兩者不同,則說(shuō)明總線上傳輸?shù)男r?yàn)和有誤,解碼模塊會(huì)發(fā)出一個(gè)“校驗(yàn)和錯(cuò)誤”標(biāo)志,如果相同,則總線解碼部分完成; 步驟13:用戶可選的總線觸發(fā)類(lèi)型包括喚醒幀觸發(fā)、同步間隔段觸發(fā)、ID觸發(fā)、數(shù)據(jù)觸發(fā)、ID及數(shù)據(jù)觸發(fā)、睡眠幀觸發(fā)、同步間隔段錯(cuò)誤觸發(fā)、奇偶校驗(yàn)錯(cuò)誤觸發(fā)及校驗(yàn)和錯(cuò)誤觸發(fā),總線觸發(fā)部分由比較器和觸發(fā)器組成,用戶提前設(shè)置好所需要的觸發(fā)類(lèi)型,比較器將解碼器解出的觸發(fā)類(lèi)型與用戶設(shè)定的觸發(fā)類(lèi)型進(jìn)行實(shí)時(shí)的對(duì)比,如果兩者相同,則觸發(fā)器的狀態(tài)機(jī)會(huì)產(chǎn)生一個(gè)正向脈沖,表示有觸發(fā)產(chǎn)生。
【文檔編號(hào)】G06F13/42GK106021165SQ201610323399
【公開(kāi)日】2016年10月12日
【申請(qǐng)日】2016年5月16日
【發(fā)明人】劉紀(jì)龍, 賀增昊, 劉永, 姜正吉, 張成森, 劉洪慶, 向前, 邵成華
【申請(qǐng)人】中國(guó)電子科技集團(tuán)公司第四十研究所, 中國(guó)電子科技集團(tuán)公司第四十一研究所