不要忽略默認的MCU設置。調試是嵌入式設計的重要組成部分,必須彌合硬件/軟件之間的鴻溝。
在系統級別,嵌入式設計的功能越來越多地由固件定義,因此,為了避免漏洞,經過特定培訓的工程師需要在項目的設計階段緊密合作。這也意味著,當不可避免地出現漏洞時,需要抑制彼此推脫的沖動。
也許正是軟件定義的硬件特性使現代嵌入式設計成為一個有趣的行業。每個新的微控制器(MCU)似乎都提供了更高級別的集成和更高級的功能,但是直到對其進行編程后才完全啟用。
盡管這種集成和配置顯然是一個促進因素,并且正在為產品設計帶來巨大進步,但有時可能會給工程師帶來無法預料的問題。諸如MCU之類的嵌入式組件所提供的功能和可配置功能正在不斷改進,并且這些組件提供了并非每種設計都需要的許多功能。
這些附加功能可能會被忽略,從而導致較少的問題。正如大多數工程師所了解的那樣,這些功能通常由寄存器控制,這些寄存器可以通過軟件進行修改。
因此,它們在打開時具有默認設置,并且如果保持不變,它們將繼續在這些默認設置下運行。在許多情況下,這可能不會引起問題。
但是,如果這些功能尚未使用,并且可能尚未經過測試,則可能會以意想不到的方式產生影響。由常規功能引起的系統中可能會產生漏洞,而這些功能可能會被忽略。
即使在理想條件下,查找故障也可能很困難,耗時且成本高昂。通常,我們通過故障的影響來識別故障,這些故障通常為工程師提供足夠的證據來追蹤原因。
故障原因與硬件或軟件有關。在很大程度上,這并不重要,但這可能仍存在爭議。
重要的是找到并修復故障。如果失敗的原因是未正確初始化的低級功能,那么找到它會變得更具挑戰性。
為了了解硬件平臺的初始狀態如何影響整個設計,有必要對整個系統有更高的了解,并且跟蹤這些難以捉摸的條件會消耗大量資源。例如,MCU上的SPI總線訪問串行閃存是許多嵌入式系統中使用的相對簡單的功能。
如果在存儲的值中檢測到錯誤,則表明存儲(不是MCU)有故障。這是客戶的經驗。
從閃存的狀態寄存器連續讀取時,它提示找到讀/寫錯誤。自然地,該存儲設備被認為是有故障的。
該理論源于以下事實:如果在狀態寄存器讀取之間設置了短延遲,則檢測到的故障數量似乎會減少。此外,重新啟動電源似乎可以清除故障一段時間。
客戶工程師認為,這些癥狀表明即使串行存儲器仍在指定規格的周期限制之內,串行存儲器也有故障,但僅完成了約60k的寫周期。當客戶將串行閃存設備退還給我們進行進一步測試時,即使執行了超過30萬次寫周期,我們也沒有發現任何故障。
為了找到真正的故障,我們的工程師調查了客戶的應用并探索了SPI信號。我們發現這似乎是存儲設備的故障,但是實際上這是系統噪聲問題,可以輕松解決。
盡管部分原因是由于MCU與閃存之間的PCB走線阻抗不匹配,但噪聲并不完全是由于不良的PCB設計或信號完整性問題所致。盡管這似乎是PCB或電路設計問題,但噪聲實際上是SPI信號的過沖和下沖,這是由信號的過高驅動強度引起的。
該過沖足以影響閃存設備的電荷泵并引起讀取和寫入錯誤。在某些情況下,SPI信號的過沖和下沖也可以解釋為信號跳變,這也可能導致讀取或寫入錯誤。
跟蹤圖像顯示了SPI線上的過沖和下沖。一種可能的解決方案是在信號走線上放置一個RC電路,以減慢信號轉換的速度。
但是,我們發現該設計基于相對較新的MCU,該MCU允許在固件中修改I / O引腳的驅動強度。降低信號的驅動強度足以消除SPI信號線上的過沖和下沖,從而有效消除系統級噪聲源。
焦點
在系統級別,嵌入式設計的功能越來越多地由固件定義,因此,為了避免漏洞,經過特定培訓的工程師需要在項目的設計階段緊密合作。這也意味著,當不可避免地出現漏洞時,需要抑制彼此推脫的沖動。
也許正是軟件定義的硬件特性使現代嵌入式設計成為一個有趣的行業。每個新的微控制器(MCU)似乎都提供了更高級別的集成和更高級的功能,但是直到對其進行編程后才完全啟用。
盡管這種集成和配置顯然是一個促進因素,并且正在為產品設計帶來巨大進步,但有時可能會給工程師帶來無法預料的問題。諸如MCU之類的嵌入式組件所提供的功能和可配置功能正在不斷改進,并且這些組件提供了并非每種設計都需要的許多功能。
這些附加功能可能會被忽略,從而導致較少的問題。正如大多數工程師所了解的那樣,這些功能通常由寄存器控制,這些寄存器可以通過軟件進行修改。
因此,它們在打開時具有默認設置,并且如果保持不變,它們將繼續在這些默認設置下運行。在許多情況下,這可能不會引起問題。
但是,如果這些功能尚未使用,并且可能尚未經過測試,則可能會以意想不到的方式產生影響。由常規功能引起的系統中可能會產生漏洞,而這些功能可能會被忽略。
即使在理想條件下,查找故障也可能很困難,耗時且成本高昂。通常,我們通過故障的影響來識別故障,這些故障通常為工程師提供足夠的證據來追蹤原因。
故障原因與硬件或軟件有關。在很大程度上,這并不重要,但這可能仍存在爭議。
重要的是找到并修復故障。如果失敗的原因是未正確初始化的低級功能,那么找到它會變得更具挑戰性。
為了了解硬件平臺的初始狀態如何影響整個設計,有必要對整個系統有更高的了解,并且跟蹤這些難以捉摸的條件會消耗大量資源。例如,MCU上的SPI總線訪問串行閃存是許多嵌入式系統中使用的相對簡單的功能。
如果在存儲的值中檢測到錯誤,則表明存儲(不是MCU)有故障。這是客戶的經驗。
從閃存的狀態寄存器連續讀取時,它提示找到讀/寫錯誤。自然地,該存儲設備被認為是有故障的。
該理論源于以下事實:如果在狀態寄存器讀取之間設置了短延遲,則檢測到的故障數量似乎會減少。此外,重新啟動電源似乎可以清除故障一段時間。
客戶工程師認為,這些癥狀表明即使串行存儲器仍在指定規格的周期限制之內,串行存儲器也有故障,但僅完成了約60k的寫周期。當客戶將串行閃存設備退還給我們進行進一步測試時,即使執行了超過30萬次寫周期,我們也沒有發現任何故障。
為了找到真正的故障,我們的工程師調查了客戶的應用并探索了SPI信號。我們發現這似乎是存儲設備的故障,但是實際上這是系統噪聲問題,可以輕松解決。
盡管部分原因是由于MCU與閃存之間的PCB走線阻抗不匹配,但噪聲并不完全是由于不良的PCB設計或信號完整性問題所致。盡管這似乎是PCB或電路設計問題,但噪聲實際上是SPI信號的過沖和下沖,這是由信號的過高驅動強度引起的。
該過沖足以影響閃存設備的電荷泵并引起讀取和寫入錯誤。在某些情況下,SPI信號的過沖和下沖也可以解釋為信號跳變,這也可能導致讀取或寫入錯誤。
跟蹤圖像顯示了SPI線上的過沖和下沖。一種可能的解決方案是在信號走線上放置一個RC電路,以減慢信號轉換的速度。
但是,我們發現該設計基于相對較新的MCU,該MCU允許在固件中修改I / O引腳的驅動強度。降低信號的驅動強度足以消除SPI信號線上的過沖和下沖,從而有效消除系統級噪聲源。
焦點