本發(fā)明屬于I2C總線領(lǐng)域,尤其涉及一種I2C總線消除干擾信號(hào)的方法和裝置。
背景技術(shù):I2C(Inter-ICBUS)是由Philip(飛利浦)公司開發(fā)的串聯(lián)總線,用于集成電路間的連接和通信,主要應(yīng)用于連接微控制器和外圍設(shè)備。I2C總線有兩根信號(hào)線,一根SCL時(shí)鐘線和一根雙向SDA數(shù)據(jù)線。I2C總線具有接口線少,控制方式簡(jiǎn)化,器件封裝形式小,通信速率較高等優(yōu)點(diǎn),標(biāo)準(zhǔn)模式下為100KHz,SCL/SDA的高電平最小4us,低電平最小4.7us。一般情況下或者環(huán)境較好的情況下,I2C總線通信不會(huì)出什么問題,能夠保障總線的正常操作。但當(dāng)設(shè)備所處環(huán)境較差或者其他異常情況產(chǎn)生時(shí)??赡軙?huì)對(duì)I2C通信造成干擾,情況嚴(yán)重時(shí),數(shù)據(jù)丟失,接收出錯(cuò),狀態(tài)紊亂。進(jìn)而產(chǎn)生如死鎖等問題。I2C協(xié)議里描述了SCL,SDA的上升沿最大1000ns,在這個(gè)處于邏輯值變化的間隙(亞穩(wěn)態(tài)),門電路的反饋系數(shù)很大,最容易受到外界干擾而發(fā)生邏輯紊亂,而這種變化是不需要的,它會(huì)造成與它相連的邏輯部件做出不同的判斷,"1"判斷成"0","0"判斷成"1",又或者是進(jìn)入亞穩(wěn)態(tài)從而導(dǎo)致系統(tǒng)邏輯紊亂。目前針對(duì)該問題常用的解決方法主要有三種1.因容易受到干擾的是信號(hào)處于亞穩(wěn)態(tài)的情況,主要是上升沿時(shí)間過長(zhǎng)給了干擾機(jī)會(huì)。因此只要減小上升沿時(shí)間即可,具體實(shí)施方式為減小上拉電阻以減小上升沿時(shí)間,但該方法可能會(huì)造成系統(tǒng)EMC(輻射超標(biāo))問題,且不能從根本上消除干擾,只是概率變小。2.在I2C總線上串入一個(gè)死鎖恢復(fù)的緩沖器,當(dāng)檢測(cè)到I2C異常已經(jīng)死鎖后,再對(duì)I2C設(shè)備進(jìn)行恢復(fù)。該方式需要額外增加電路,提高成本。且并未將異常的發(fā)生防患于未然。3.在微控制器中軟件增加I2C狀態(tài)監(jiān)測(cè)功能,當(dāng)I2C狀態(tài)出錯(cuò),通信異常時(shí)對(duì)I2C模塊進(jìn)行恢復(fù)操作。該方式雖不會(huì)增加硬件成本,但會(huì)占用微控制器有限的資源,且需要進(jìn)行大量模擬測(cè)試,才能確保在監(jiān)測(cè)I2C的同時(shí)不會(huì)對(duì)微控制器的其他功能造成影響,而且如果不出現(xiàn)問題的話,設(shè)計(jì)人員也很少考慮增加這樣一個(gè)軟件模塊,等出現(xiàn)問題時(shí)已經(jīng)造成一些損失。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供了一種I2C總線消除干擾信號(hào)的方法,旨在解決現(xiàn)有技術(shù)中I2C總線信號(hào)容易受干擾信號(hào)影響,造成裝置不穩(wěn)定的問題。為了解決上述技術(shù)問題,本發(fā)明是這樣實(shí)現(xiàn)的:一種I2C總線消除干擾信號(hào)的方法,所述方法包括以下步驟:根據(jù)預(yù)設(shè)采樣頻率對(duì)I2C總線信號(hào)進(jìn)行實(shí)時(shí)采樣以獲取信號(hào)采樣值;根據(jù)預(yù)設(shè)需要消除的干擾信號(hào)的最大脈沖寬度和所述預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n,并將所述信號(hào)采樣值依次存入位數(shù)為n+1的移位寄存器中進(jìn)行,并對(duì)所述信號(hào)采樣值進(jìn)行邏輯運(yùn)算;根據(jù)所述邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)所述I2C總線信號(hào)進(jìn)行干擾消除處理后輸出。進(jìn)一步地,所述根據(jù)預(yù)設(shè)需要消除的最大脈沖寬度和所述預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n的步驟具體為:根據(jù)以下算式計(jì)算最大采樣次數(shù)n:n=[A*B];其中,A表示所述預(yù)設(shè)的消除的干擾信號(hào)的的最大脈沖寬度,B表示所述預(yù)設(shè)采樣頻率。進(jìn)一步地,所述對(duì)所述信號(hào)采樣值進(jìn)行邏輯運(yùn)算的步驟具體包括以下步驟:根據(jù)以下算式對(duì)依次存入所述移位寄存器中的的信號(hào)采樣值進(jìn)行與運(yùn)算:Y=S0&S1&S2&S3&...&Sn;根據(jù)以下算式對(duì)依次存入所述移位寄存器中的的信號(hào)采樣值進(jìn)行或運(yùn)算:Y′=S0|S1|S2|S3|...|Sn;其中,Y和Y’分別表示與運(yùn)算和或運(yùn)算的運(yùn)算結(jié)果,S0、S1、S2、S3...Sn表示依次存入移位寄存器中的的信號(hào)采樣值。進(jìn)一步地,所述根據(jù)所述邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)所述采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出的步驟具體為:當(dāng)Y為1時(shí),將所述采樣的I2C總線信號(hào)置為高電平后輸出;當(dāng)Y’為0時(shí),將所述采樣的I2C總線信號(hào)置為低電平后輸出;當(dāng)Y為0且Y’為1時(shí),將所述采樣的I2C總線信號(hào)維持與其上一進(jìn)行干擾消除后的I2C總線信號(hào)相同的工作狀態(tài)進(jìn)行輸出。本發(fā)明還提供了一種I2C總線消除干擾信號(hào)的裝置,所述裝置包括:采樣單元,用于根據(jù)預(yù)設(shè)采樣頻率對(duì)I2C總線信號(hào)進(jìn)行實(shí)時(shí)采樣以獲取信號(hào)采樣值;處理單元,用于根據(jù)預(yù)設(shè)需要消除的干擾信號(hào)的最大脈沖寬度和所述預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n,并將所述信號(hào)采樣值依次存入位數(shù)為n+1的移位寄存器中,并對(duì)所述信號(hào)采樣值進(jìn)行邏輯運(yùn)算;輸出單元,用于根據(jù)所述邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)所述采樣的I2C總線信號(hào)進(jìn)行干擾消除處理后輸出。進(jìn)一步地,所述處理單元根據(jù)預(yù)設(shè)需要消除的最大脈沖寬度和所述預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n的步驟具體為:根據(jù)以下算式計(jì)算最大采樣次數(shù)n:n=[A*B];其中,A表示所述預(yù)設(shè)的消除的干擾信號(hào)的的最大脈沖寬度,B表示所述預(yù)設(shè)采樣頻率。進(jìn)一步地,所述移位寄存器進(jìn)行邏輯運(yùn)算的步驟具體包括以下步驟:根據(jù)以下算式對(duì)依次存入所述移位寄存器中的的信號(hào)采樣值進(jìn)行與運(yùn)算:Y=S0&S1&S2&S3&...&Sn;根據(jù)以下算式對(duì)依次存入所述移位寄存器中的的信號(hào)采樣值進(jìn)行或運(yùn)算:Y′=S0|S1|S2|S3|...|Sn;其中,Y和Y’分別表示與運(yùn)算和或運(yùn)算的運(yùn)算結(jié)果,S0、S1、S2、S3...Sn表示依次存入移位寄存器中的的信號(hào)采樣值。進(jìn)一步地,所述輸出單元根據(jù)所述邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)所述采樣的I2C信號(hào)進(jìn)行干擾消除后輸出的步驟具體為:當(dāng)Y為1時(shí),將所述采樣的I2C總線信號(hào)置為高電平后輸出;當(dāng)Y’為0時(shí),將所述采樣的I2C總線信號(hào)置為低電平后輸出;當(dāng)Y為0且Y’為1時(shí),將所述采樣的I2C總線信號(hào)維持與其上一進(jìn)行干擾消除后的I2C總線信號(hào)相同的工作狀態(tài)進(jìn)行輸出。在本發(fā)明中,通過對(duì)I2C總線信號(hào)進(jìn)行采樣獲取信號(hào)采樣值并存入移位寄存器進(jìn)行邏輯運(yùn)算,根據(jù)移位寄存器對(duì)所述信號(hào)采樣值的邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出,解決了現(xiàn)有技術(shù)中I2C總線信號(hào)容易受干擾信號(hào)的影響,造成裝置不穩(wěn)定的問題。附圖說明圖1是本發(fā)明實(shí)施例提供的I2C總線消除干擾信號(hào)的方法流程圖;圖2是本發(fā)明實(shí)施例提供的I2C總線消除干擾信號(hào)的裝置模塊結(jié)構(gòu)圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。以下結(jié)合具體實(shí)施例對(duì)本發(fā)明的具體實(shí)現(xiàn)進(jìn)行詳細(xì)描述:圖1示出了本發(fā)明實(shí)施例提供的I2C總線消除干擾信號(hào)的方法流程圖,為了便于說明,本實(shí)施例僅列舉與本實(shí)施例相關(guān)的部分。作為本發(fā)明一實(shí)施例,I2C總線信號(hào)一般包括SCL信號(hào)和SDA信號(hào),但是SCL信號(hào)和SDA信號(hào)中通常含有干擾信號(hào),本發(fā)明實(shí)施例提供了一種I2C總線消除干擾信號(hào)的方法,包括以下步驟:步驟S100、根據(jù)預(yù)設(shè)采樣頻率對(duì)I2C總線信號(hào)進(jìn)行實(shí)時(shí)采樣以獲取信號(hào)采樣值;在本發(fā)明實(shí)施例中,預(yù)設(shè)采樣頻率為驅(qū)動(dòng)采樣的頻率,其值由驅(qū)動(dòng)設(shè)備決定。步驟S200、根據(jù)預(yù)設(shè)需要消除的干擾信號(hào)的最大脈沖寬度和預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n,并將信號(hào)采樣值依次存入位數(shù)為n+1的移位寄存器M中,并對(duì)該信號(hào)采樣值進(jìn)行邏輯運(yùn)算。在步驟S200中,需要消除的干擾信號(hào)的最大脈沖寬度是根據(jù)實(shí)際需要進(jìn)行的預(yù)先設(shè)置。在步驟S200中,根據(jù)預(yù)設(shè)需要消除的最大脈沖寬度和預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n的步驟具體為:根據(jù)以下算式計(jì)算最大采樣次數(shù)n:n=[A*B];其中,A表示預(yù)設(shè)的需要消除的干擾信號(hào)的的最大脈沖寬度,B表示預(yù)設(shè)采樣頻率。在步驟S200中,將信號(hào)采樣值依次存入位數(shù)為n+1的移位寄存器M中進(jìn)行邏輯運(yùn)算的步驟具體包括以下步驟:根據(jù)以下算式對(duì)依次存入移位寄存器M中的的信號(hào)采樣值進(jìn)行與運(yùn)算:Y=S0&S1&S2&S3&...&Sn;根據(jù)以下算式對(duì)依次存入移位寄存器M中的的信號(hào)采樣值進(jìn)行或運(yùn)算:Y′=S0|S1|S2|S3|...|Sn;其中,Y和Y’分別表示與運(yùn)算和或運(yùn)算的運(yùn)算結(jié)果,S0、S1、S2、S3...Sn表示依次存入移位寄存器M中的的信號(hào)采樣值。作為本發(fā)明一實(shí)施例,存入移位寄存器M中的信號(hào)采樣值的個(gè)數(shù)為對(duì)干擾信號(hào)的采樣次數(shù)加一,這樣可以避免將干擾信號(hào)誤判為有用信號(hào),因?yàn)榧拇嫫髦等珵?時(shí)或者0時(shí),我們會(huì)認(rèn)為這確實(shí)是有用的信號(hào),所以如果采樣到的干擾信號(hào)將移位寄存器M填滿,則會(huì)導(dǎo)致裝置誤判將干擾信號(hào)當(dāng)成有用信號(hào),從而出現(xiàn)數(shù)據(jù)異常,故使移位寄存器M的位數(shù)比采樣到的干擾信號(hào)的次數(shù)多一,這樣使有用信號(hào)進(jìn)入移位寄存器M,避免誤判。步驟S300、根據(jù)邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出。在步驟S300中,根據(jù)邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出的步驟具體為:當(dāng)Y為1時(shí),將采樣的I2C總線信號(hào)置為高電平后輸出;當(dāng)Y’為0時(shí),將采樣的I2C總線信號(hào)置為低電平后輸出;當(dāng)Y為0且Y’為1時(shí),將采樣的I2C總線信號(hào)維持與其上一進(jìn)行干擾消除后的I2C總線信號(hào)相同的工作狀態(tài)進(jìn)行輸出。在步驟S300中,當(dāng)Y為1時(shí),表示存入移位寄存器M中的信號(hào)采樣值都為1,即進(jìn)行了采樣的那一段I2C總線信號(hào)都為高電平,不包含任何干擾信號(hào),進(jìn)行干擾消除后輸出的為高電平信號(hào),輸出當(dāng)Y’為0時(shí),表示存入移位寄存器M中的信號(hào)采樣值都為0,即進(jìn)行了采樣的那一段I2C總線信號(hào)都為低電平,不包含任何干擾信號(hào),進(jìn)行干擾消除后輸出的為低電平信號(hào),當(dāng)Y為0且Y’為1時(shí),表示存入移位寄存器M中的信號(hào)采樣值有1和0,表明進(jìn)行了采樣的那一段I2C總線信號(hào)中有干擾信號(hào)或者是正常信號(hào)發(fā)生了電平轉(zhuǎn)換,此時(shí)將采樣的I2C總線信號(hào)維持與其上一進(jìn)行干擾消除后的I2C總線信號(hào)相同的工作狀態(tài)進(jìn)行輸出,即對(duì)進(jìn)行了采樣的I2C總線信號(hào)進(jìn)行了一個(gè)采樣周期(n+1次采樣的采樣時(shí)間)的延遲處理后輸出,當(dāng)為干擾信號(hào)時(shí),即對(duì)干擾信號(hào)進(jìn)行了消除,當(dāng)為正常信號(hào)發(fā)生高低電平轉(zhuǎn)換時(shí),只是對(duì)正常信號(hào)進(jìn)行了延遲,并不影響最終的結(jié)果。作為本發(fā)明一實(shí)施例,本發(fā)明主要是利用延時(shí)將干擾信號(hào)進(jìn)行消除,而正常信號(hào)不受影響可以正常輸出,但會(huì)有一定的延時(shí),考慮到I2C總線干擾信號(hào)一般為ns級(jí),因此ns級(jí)的延時(shí)是可接受的。如圖2所示,本發(fā)明還提供了一種I2C總線消除干擾信號(hào)的裝置100,包括:采樣單元101,用于根據(jù)預(yù)設(shè)采樣頻率對(duì)I2C總線信號(hào)進(jìn)行實(shí)時(shí)采樣以獲取信號(hào)采樣值;處理單元102,用于根據(jù)預(yù)設(shè)需要消除的干擾信號(hào)的最大脈沖寬度和預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n,并將信號(hào)采樣值依次存入位數(shù)為n+1的移位寄存器M中,并對(duì)該信號(hào)采樣值進(jìn)行邏輯運(yùn)算;輸出單元103,用于根據(jù)移位寄存器M的邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出。作為本發(fā)明一實(shí)施例,預(yù)設(shè)采樣頻率為驅(qū)動(dòng)采樣的頻率,其值由驅(qū)動(dòng)設(shè)備決定,需要消除的干擾信號(hào)的最大脈沖寬度根據(jù)需要進(jìn)行預(yù)先設(shè)置,移位寄存器M可以是外置的,也可以是包含在裝置100里面的,在本發(fā)明實(shí)施例中,移位寄存器M是不包含在裝置100里面的。作為本發(fā)明一實(shí)施例,處理單元102根據(jù)預(yù)設(shè)需要消除的最大脈沖寬度和預(yù)設(shè)采樣頻率獲取對(duì)干擾信號(hào)的最大采樣次數(shù)n的步驟具體為:根據(jù)以下算式計(jì)算最大采樣次數(shù)n:n=[A*B];其中,A表示所述預(yù)設(shè)的消除的干擾信號(hào)的的最大脈沖寬度,B表示所述預(yù)設(shè)采樣頻率。作為本發(fā)明一實(shí)施例,移位寄存器M進(jìn)行邏輯運(yùn)算的步驟具體包括以下步驟:根據(jù)以下算式對(duì)依次存入移位寄存器M中的的信號(hào)采樣值進(jìn)行與運(yùn)算:Y=S0&S1&S2&S3&...&Sn;根據(jù)以下算式對(duì)依次存入移位寄存器M中的的信號(hào)采樣值進(jìn)行或運(yùn)算:Y′=S0|S1|S2|S3|...|Sn;其中,Y和Y’分別表示與運(yùn)算和或運(yùn)算的運(yùn)算結(jié)果,S0、S1、S2、S3...Sn表示依次存入移位寄存器M中的的信號(hào)采樣值。作為本發(fā)明一實(shí)施例,輸出單元103根據(jù)移位寄存器M的邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出的步驟具體為:當(dāng)Y為1時(shí),將采樣的I2C總線信號(hào)置為高電平后輸出;當(dāng)Y’為0時(shí),將采樣的I2C總線信號(hào)置為低電平后輸出;當(dāng)Y為0且Y’為1時(shí),將采樣的I2C總線信號(hào)維持與其上一進(jìn)行干擾消除后的I2C總線信號(hào)相同的工作狀態(tài)進(jìn)行輸出。在本發(fā)明實(shí)施例中,當(dāng)Y為1時(shí),表示存入移位寄存器M中的信號(hào)采樣值都為1,即進(jìn)行了采樣的那一段I2C總線信號(hào)都為高電平,不包含任何干擾信號(hào),進(jìn)行干擾消除后輸出的為高電平信號(hào),輸出當(dāng)Y’為0時(shí),表示存入移位寄存器M中的信號(hào)采樣值都為0,即進(jìn)行了采樣的那一段I2C總線信號(hào)都為低電平,不包含任何干擾信號(hào),進(jìn)行干擾消除后輸出的為低電平信號(hào),當(dāng)Y為0且Y’為1時(shí),表示存入移位寄存器M中的信號(hào)采樣值有1和0,表明進(jìn)行了采樣的那一段I2C總線信號(hào)中有干擾信號(hào)或者是正常信號(hào)發(fā)生了電平轉(zhuǎn)換,此時(shí)將采樣的I2C總線信號(hào)維持與其上一進(jìn)行干擾消除后的I2C總線信號(hào)相同的工作狀態(tài)進(jìn)行輸出,即對(duì)進(jìn)行了采樣的I2C總線信號(hào)進(jìn)行了一個(gè)采樣周期(n+1次采樣的采樣時(shí)間)的延遲處理后輸出,當(dāng)為干擾信號(hào)時(shí),即對(duì)干擾信號(hào)進(jìn)行了消除,當(dāng)為正常信號(hào)發(fā)生高低電平轉(zhuǎn)換時(shí),只是對(duì)正常信號(hào)進(jìn)行了延遲。在本發(fā)明實(shí)施中,通過對(duì)I2C總線信號(hào)進(jìn)行采樣獲取信號(hào)采樣值并存入移位寄存器M進(jìn)行邏輯運(yùn)算,根據(jù)移位寄存器M對(duì)所述信號(hào)采樣值的邏輯運(yùn)算的運(yùn)算結(jié)果對(duì)采樣的I2C總線信號(hào)進(jìn)行干擾消除后輸出,解決了現(xiàn)有技術(shù)中I2C總線信號(hào)容易受干擾信號(hào)的影響,造成裝置不穩(wěn)定的問題。本發(fā)明的實(shí)施例中,所述的I2C總線消除干擾信號(hào)的方法和裝置,可以基于可編程邏輯器件實(shí)現(xiàn),在IC設(shè)計(jì)中設(shè)置在信號(hào)接收模塊中對(duì)信號(hào)進(jìn)行干擾消除后再輸出給下一級(jí),從而避免當(dāng)出現(xiàn)問題時(shí)才去找解決辦法的尷尬,避免了出問題帶來的時(shí)間和成本的損失。本領(lǐng)域技術(shù)人員可以理解為上述實(shí)施例包括的各個(gè)單元只是按照功能邏輯進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù)范圍。本領(lǐng)域普通技術(shù)人員還可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以在存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,所述的存儲(chǔ)介質(zhì),包括ROM/RAM、磁盤、光盤等。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。