數位介面中系統級雜訊如何導致串列快閃記憶體虛假報錯

作者 : Paul Hill、Gordon MacNee,Adesto資深市場總監、北歐現場應用經理

如今的微控制器設計目標是以最少的配置提供可靠的操作,但在某些情況下,可能會導致介面過度驅動…

在不懈追求更高系統性能的過程中,整合元件製造商(IDM)變得越來越精於開發數位介面,這些介面能夠在充滿挑戰的電子環境中高速運作。諸如SPI和I2C之類的標準介面提供了一種相對簡單的方式,以可靠且有效的方式將自不同供應商的設備連接起來,其他類型的介面亦如此。

對於想要使用「標準」技術快速構建複雜系統的開發人員來說,數位域無疑被視為避風港。的確,嵌入式產業在很大程度上依靠「正常工作」的標準介面,因為它們提供了可供創新的框架,但當它們不能「正常工作」時,就可能導致混亂,尤其是當錯誤原因被誤判時。當根據規範應用時,介面開發一般都穩健且可靠,因此任何混亂都可理解,底層物理介面固定在晶片中的事實也保證了這一點。

各種形式的系統雜訊

任何訊號失真都可解釋為雜訊,可以合理地假設雜訊在通訊環境中最明顯,收到的訊號已不是最初發送的訊號。這種直接相關性相對容易發現,但在某些情況下,因果關係不太容易辨識。當故障間歇性出現時,問題就更加複雜了。

如今的微控制器(MCU)設計目標是以最少的配置提供可靠的操作。對序列介面來說,這可能包括預先設置I/O引腳上的高驅動電流,用以應對較長的PCB走線或高容性負載的影響。在某些情況下,這可能會導致介面過度驅動,進而導致並被誤讀為錯誤或故障的衍生結果。

例如,串列快閃記憶體元件提供了許多高階功能,以確保可靠的操作並允許設備被詢問。這可能包括雜訊濾波器、高階自我調整程式設計,以及管理儲存單元裕度的擦除演算法。一些製造商還將ECC設計在儲存元素中,從而在每次寫入操作時保存額外的中繼資料,用以允許檢測和糾正單個或多個位元錯誤,但是當雜訊破壞了通訊介面匯流排上的基本消息傳輸時,採用ECC修復錯誤將於事無補。

SPI介面上的雜訊可能會被誤讀為附加的時脈脈衝。由於SPI是時脈驅動介面,因此可能會產生一些不良影響,例如命令被忽略、資料被誤讀、錯誤命令被使用等。但是,雜訊也攜帶能量,在某些情況下,這種能量本身會在設備操作過程中引入錯誤。

電荷泵和過衝

大多數情況下,數位介面可以忽略訊號中的某些過衝或欠衝。但是,不要忘記,曲線下的能量仍然存在,在某些電路中這可能具有破壞性。

一個典型的例子是串列快閃記憶體中的電荷泵電路。如果SPI匯流排訊號包含很大的雜訊,則該訊號中的能量可能會傳播到電荷泵並干擾其工作。

快閃記憶體中的電荷泵承擔著一項關鍵任務,即提供用於改變儲存單元偏置並有效儲存邏輯1或邏輯0所需的電源。寫/擦過程是快閃記憶體操作中的關鍵時刻,在此期間電荷泵的任何中斷都可能導致寫入/擦除錯誤,儘管這種錯誤可能被檢測出來,但也有可能被隱藏。

上述類型的錯誤很容易被誤解為快閃記憶體元件的故障。快閃記憶體應具有製造商保證的有限次數的讀寫週期,對這一點,嵌入式設計人員完全瞭解,但他們不太瞭解的是,一個沒有太多過衝或欠衝的簡潔介面有多麼重要。

例如,圖1中的曲線顯示了六個快閃記憶體元件的正常單元裕度。用代表邏輯1(2V~5V)和邏輯0(> 6V)的資料進行程式設計的儲存單元之間出現了兩種不同的模式。相比之下,圖2中的曲線顯示了三個快閃記憶體元件的儲存單元裕度數據,這些快閃記憶體元件因為控制線路上的過衝和欠衝而導致資料損壞。

20200113TA31P1
圖1 程式設計和擦除兩種情況下,良好的快閃記憶體儲存單元裕度數據。(資料來源:Adesto)

有多種因素會影響雜訊水準,例如工作頻率、訊號幅度、MCU驅動等級,以及雜訊尖峰中包含的能量;PCB設計,以及訊號間的串擾也可能成為影響因素。

圖2中的資料顯示了序列介面上太多過衝和欠衝造成的影響,圖3則展示了實際應用中過衝會造成何種結果。

20200113TA31P2
圖2 當SPI線上存在明顯雜訊時,糟糕的快閃記憶體儲存單元裕度數據。(資料來源:Adesto)

20200113TA31P3
圖3 該跡線清楚表示SPI線上的過衝和欠衝,導致5.65V的峰-峰電壓值,該值超過了快閃記憶體規範中提到的絕對最大值。(資料來源:Adesto)

這種雜訊可能導致錯誤的設備操作,表現為串列快閃記憶體儲存值的錯誤。最初,錯誤的真正影響被忽略了,因為以較低頻率輪詢STATUS寄存器,報告的錯誤也少,從而導致設計人員對故障的根本原因做出誤判。

找出真正的根源

儘管此故障表現為記憶體故障,但根本原因並不在快閃記憶體元件。Adesto工程師透過探測SPI訊號,並辨識系統雜訊表徵發現了這一點。雖然雜訊的產生部分歸因於MCU與快閃記憶體之間的PCB跡線上存在阻抗不匹配,但這還不是全部。

雜訊源實際上是MCU介面,其在電源啟動時默認為高驅動電平。驅動過量足以在SPI線上引起過衝和欠衝,在某些情況下,這可能被誤讀為訊號跳變,從而導致讀取和寫入錯誤。而且,在這種情況下,過衝保持了足夠的能量來破壞快閃記憶體電荷泵,這反過來又導致了錯誤。

在客戶設計中,MCU為其I/O介面提供可配置的驅動電流,啟動時默認為HIGH。由於應用程式碼在初始化期間不修改此電平,因此在正常操作中它仍保持高電平。

對於SPI匯流排上的其他元件,這種影響可能並不明顯,因為數位介面通常設計地很穩健。而快閃記憶體的敏感特性,以及在高頻下運作的需求,特別是電荷泵的運作,使得該記憶體極易受到過衝/欠衝的影響。這導致了錯誤的操作,一開始就將其錯誤地理解為快閃記憶體元件的故障。

糾錯

降低流經韌體的驅動電流,可將過衝和欠衝有效地減少到零(圖4),進而實現快閃記憶體的無錯執行。

20200113TA31P4
圖4 在沒有明顯過衝的情況下,串列快閃記憶體的電荷泵能夠正確運行並提供可靠的功能。(資料來源:Adesto)

故障特性表示,快閃記憶體元件正在盡一切努力補償錯誤造成的影響,即SPI介面上過多的系統雜訊。

最重要的是,產生錯誤的原因實際上是MCU採用的一項設計功能,這項功能被預先設定為大多數情況下完全可接受的工作模式。高驅動輸出和不完善PCB電感的結合,為間歇性故障的產生創造了條件。一個簡單的韌體修改,減少MCU上的驅動輸出,即可解決該問題。

真正的教訓在於:看起來確定的元件故障可能實際上是設計的疏忽��最初的誤判自然導致記憶體件的更換,但是透過客戶和供應商,以及硬體和軟體工程團隊之間的緊密合作,一定可以找到真正的原因,進而採用正確的解決方案。最終,設計得以完善,使得系統性能更高、可靠性更高。

結論

在沒有明顯影響的情況下,系統雜訊很容易被忽略。在最佳條件下很難定位間歇性錯誤,但如果錯誤被誤讀,情況會更加糟糕。

過衝可能是最不明顯的系統雜訊形式,但是如上所述,其影響可能是巨大的。快閃記憶體是一種可靠的技術,但仍然取決於精心設計的介面,序列介面上過多的雜訊有可能傳播到電荷泵電路,可能損壞程式設計和擦除電路操作。由此產生的無法預料的特徵很容易被誤讀為元件本身的故障,它表現為儲存單元的故障,以及不一致或不可靠的程式設計和擦除操作。

在這種情況下,更換快閃記憶體以為問題已解決,可能會導致產品在某一時刻進入市場失敗。反之,設計人員能夠將程式設計和擦除一致性提高一個等級,使得有效容錯能力從檢測到錯誤之前不可接受的約20K個週期,躍升到超過2.5M個週期,並且沒有錯誤,也不需要補充的錯誤檢測和糾正程式。

現代MCU提供的可配置水平是把雙刃劍。在本文的示例中,驅動電流可配置也許是產生過衝的根本原因。不過,能夠減小驅動強度對於解決該問題也有效。

(參考原文: How system level noise in digital interfaces can lead to spurious errors in serial Flash memory,by Paul Hill、Gordon MacNee)

本文同步刊登於EE Times 2020年1月號雜誌

掃描或點擊QR Code立即加入 “EETimes技術論壇” Line 群組 !

 EET-Line技術論壇-QR

發表評論