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