數(shù)字接口中的系統(tǒng)級噪聲如何導致串行閃存產(chǎn)生數(shù)據(jù)錯誤
在不斷追求系統(tǒng)更高性能的過程中,集成設(shè)備制造商(IDMS)已經(jīng)非常擅長開發(fā)數(shù)字接口,能夠在充滿挑戰(zhàn)的電力環(huán)境中高速運行。標準接口,如SPI和I2C,提供了一種相對簡單的方式,以可靠和有效的方式連接來自不同供應(yīng)商的設(shè)備。其他類型的接口也是如此。
數(shù)字領(lǐng)域可以被認為是為希望利用"標準"技術(shù)快速構(gòu)建復雜系統(tǒng)的開發(fā)者提供了一個安全的避難所。實際上,嵌入式產(chǎn)業(yè)在很大程度上依賴于基于標準的界面,因為它們?yōu)閯?chuàng)新提供了框架。當它們不"僅僅起作用"時,就會導致混淆,特別是如果錯誤的原因被錯誤解釋的話。任何混淆都是可以理解的,因為當按照規(guī)范應(yīng)用時,接口的開發(fā)是安全和可靠的。事實上,底層的物理接口是固定的保護器件也將提供保證。
各種形式的系統(tǒng)噪音
對信號的任何扭曲都可以被解釋為噪音,可能有理由假定在通信環(huán)境中噪音最為明顯;所收到的信號不是所發(fā)出的信號。這種直接相關(guān)性是相對容易找到的,但在某些情況下,因果關(guān)系并不那么容易確定。當斷層時斷時續(xù)時,挑戰(zhàn)就更加復雜了。
今天的微控制器設(shè)計的目的是以最小的配置提供可靠的操作。在串行接口的情況下,這可能包括對I/O銷上的高驅(qū)動電流的默認,以應(yīng)對長電路板軌道或高電容負載的影響。在某些情況下,這會導致過度驅(qū)動一個接口,而這反過來又會導致被解釋為錯誤或錯誤的派生效應(yīng)。
例如,串行閃存裝置提供了一些先進的功能,可以確??煽康牟僮?并允許對該裝置進行審訊。這可以包括噪聲濾波器,先進的自適應(yīng)編程,和擦除算法,以管理單元格邊緣.一些制造商還將ECC包括在存儲元件中,在每個寫入操作中保存額外元數(shù)據(jù),允許檢測和糾正單位或多位錯誤,但當噪音腐蝕通信接口總線上的基本消息事務(wù)時,ECC修復將不會有幫助。
SPI接口上的噪音可能被誤解為額外的時鐘脈沖。由于SPI是一個時鐘驅(qū)動的接口,它會產(chǎn)生一些影響,比如命令被忽略、數(shù)據(jù)被錯誤解釋、命令被使用錯誤等等。然而,噪音也攜帶能量,在某些情況下,這種能量本身就會在設(shè)備的操作中造成錯誤。
充電泵和超射
在大多數(shù)情況下,一些信號的過高或過低可以被數(shù)字接口所容忍。然而,不應(yīng)忘記,曲線下的能量仍然存在,在某些電路中,這可能是破壞性的。
這方面的一個例子是串行閃存中的電荷泵電路。如果SPI總線信號含有明顯的噪聲,則該信號中的能量有可能傳播到電荷泵并擾亂其運行。
閃存中的電荷泵是一個關(guān)鍵功能,因為它提供了改變存儲單元的偏置所需的能量,并且有效地存儲了一個邏輯1或0。寫入/刪除過程是閃存操作中的一個關(guān)鍵時刻,在此期間對充電泵的任何干擾都可能導致寫入或刪除錯誤,雖然這些錯誤可能被發(fā)現(xiàn),但它們可能不明顯。
這種錯誤很容易被解釋為閃存設(shè)備中的故障。閃存具有有限數(shù)量的讀寫周期由制造商保證,這一事實被嵌入式設(shè)計師很好地理解,但也許沒有很好地理解,提供一個沒有太多過高或過低過高的干凈接口的重要性。
影響噪聲水平的因素有多種,如操作頻率、信號幅值、單片機驅(qū)動水平、噪聲峰所含能量。PCB的設(shè)計和信號之間的交叉對話也可能是一個因素。
這種噪聲的結(jié)果是設(shè)備操作錯誤,顯示為串行閃存存儲值中的錯誤。最初,錯誤的真正影響被忽略了,因為在較少頻率的基礎(chǔ)上對狀態(tài)登記冊進行輪詢報告的錯誤較少,導致設(shè)計人員對失敗的根本原因做出錯誤的假設(shè)。
找出真正的根源
雖然這個故障看起來像是內(nèi)存故障,但根本原因并不在閃存設(shè)備上。這是阿多斯特工程師通過探測SPI信號和識別系統(tǒng)噪聲發(fā)現(xiàn)的。雖然噪音部分可以歸因于單片機和閃存之間的電路板軌道上的阻抗不匹配,但這并不是全部的故事。
噪音的來源實際上是單片機接口,它默認為高驅(qū)動水平的電源。過度的驅(qū)動力足以導致過高和過低的SPI線,在一些情況下,這可能被錯誤地解釋為信號轉(zhuǎn)換,導致讀寫錯誤。然而,在這個例子中,發(fā)現(xiàn)過遠射具有足夠的能量來擾亂閃存泵,從而導致錯誤。
在客戶的設(shè)計中,正在使用的單片機為其I/O提供了可配置的驅(qū)動電流,該電流在啟動時默認值很高。由于應(yīng)用程序代碼在初始化過程中沒有修改這個級別,所以在正常操作中仍然很高。
對于SPI總線上的其他設(shè)備來說,這種影響可能并不明顯,因為數(shù)字接口通常設(shè)計得很安全。閃存的敏感性,需要在更高的頻率上工作,特別是充電泵的工作,使得閃存容易受到過高/過高的影響。這導致錯誤的操作,最初被錯誤地解釋為一個故障的閃存設(shè)備。
糾正錯誤
降低通過固件的驅(qū)動電流,將超射和下射降低到有效的零,反過來導致閃存的無錯誤操作。
故障的性質(zhì)表明,閃光設(shè)備正在盡一切努力補償錯誤的影響,這是系統(tǒng)對SPI接口的過度噪聲。
也許這里最重要的一點是,原因?qū)嶋H上是所使用的單片機的設(shè)計特性,它默認了一種在大多數(shù)情況下完全可以接受的操作模式。高驅(qū)動輸出和不完全的印刷電路板電感的結(jié)合造成了間歇性失效的情況。減少了單片機上的驅(qū)動輸出,通過簡單的固件更換,解決了問題。
這突出了這里的真正教訓:可能出現(xiàn)的真正組件故障實際上可能是設(shè)計中的疏忽。更換存儲器設(shè)備本來是對最初被認為是故障的自然反應(yīng),但通過客戶與供應(yīng)商以及硬件和軟件工程團隊之間的強有力的工作關(guān)系,找到了實際原因并應(yīng)用了正確的解決辦法。其結(jié)果是設(shè)計明顯改進,系統(tǒng)性能提高,可靠性提高.
結(jié)論
如果沒有明顯的影響,系統(tǒng)噪音很容易消除.在最佳情況下,間歇性錯誤特別難以確定,但當錯誤被錯誤解釋時,挑戰(zhàn)就更加困難。
過高可能是系統(tǒng)噪聲中最不明顯的一種形式,但正如這里所解釋的,它的影響可能是顯著的。閃存是一種可靠的技術(shù),但它依賴于精心設(shè)計的接口。串行接口上的過高噪聲有可能傳播到電荷泵電路上,影響編程的運行,消除電路。這導致了不可預見的特性,很容易被解釋為設(shè)備本身的故障,顯示為內(nèi)存單元故障,以及不一致或不可靠的編程和刪除操作。
在這種情況下,替換閃存并假設(shè)問題已經(jīng)解決,可能導致產(chǎn)品進入市場,在某一時刻可能會失敗。相反,設(shè)計者能夠通過一個重要的因素改進編程和消除一致性,在檢測到超過250萬個周期的錯誤之前,有效的耐力從一個不可接受的~20k周期跳到?jīng)]有錯誤和不需要補充錯誤檢測和糾正例程。
現(xiàn)代微控制器提供的可配置水平可以被看作是一個幫助和障礙;在這個例子中,驅(qū)動器電流是可配置的事實可能是導致過度的原因。然而,能夠降低驅(qū)動強度也是有效的解決問題。