本文作者:Miler Shao 一天,有個(gè)客戶跟我電話,他在用STMCU開發(fā)車載產(chǎn)品,STM32和STM8都有用。STM32芯片用在他的多路控制板上,STM8S105用在另外顯示面板上。多路控制板上的STM32與顯示板上的STM8S105進(jìn)行UART通訊,電源由從多路控制板這邊送過去,兩塊板之間用了根近2米的普通信號(hào)連接線作供電和UART信號(hào)傳送。STM8S105 的供電電壓為5V。
客戶反映他的產(chǎn)品已經(jīng)生產(chǎn)1000多套,小批量送樣出去。他的客戶反映產(chǎn)品的STM8S105很容易受干擾而程序丟失。他拿到退貨后如果重新燒錄又能正常工作。
因其進(jìn)度緊,相約于一晚上見面繼續(xù)了解情況,探討問題原因。 見面后他進(jìn)一步反映,每次STM8S105頭次燒錄后能正常工作,如果無外來干擾,也能保持正常狀態(tài)。但如果STM8s105這端的顯示板受到外來干擾,比方電源波動(dòng)[其實(shí)不一定限于電源波動(dòng),只是找了這么個(gè)簡單而有效的比較粗暴的辦法,他們用手指在多路控制板端的電源供電線路的器件上一派亂摸,導(dǎo)致給顯示板的供電異常波動(dòng)]后,STM8S105工作異常屬實(shí)。斷電后再上電也不能恢復(fù)正常,即使多次掉電上電也無濟(jì)于事。的確很有點(diǎn)像程序丟失的味道。
連上STLINK,打開STVP查看程序[客戶之前沒有做讀保護(hù)],讀出后進(jìn)一步跟原始燒錄文件比對(duì),一模一樣。說明程序并未丟失。既然程序沒有丟,而STM8S105顯示板受干擾導(dǎo)致功能異常后即使斷電再上電都沒法回歸正常。難道芯片在電源波動(dòng)干擾時(shí)壞了?
檢測(cè)STM8S105的VCAP腳電源,1.8v,內(nèi)核供電穩(wěn)穩(wěn)的。其復(fù)位電路為10K配104電容,參數(shù)沒什么異常。測(cè)試RST復(fù)位腳電平,結(jié)果是2.5v,顯然不正常,正常應(yīng)該是5v。因?yàn)樗f產(chǎn)品都測(cè)試過了,小批量出貨。首先比較懷疑電源劇烈波動(dòng)時(shí)個(gè)別器件或STM8s105出了故障,還有那根近兩米的電源傳輸纜線讓電源波動(dòng)時(shí)的情況變得更為復(fù)雜。
當(dāng)晚作罷,建議其第二天做電源線路的自行檢查,外圍器件和STM8S105芯片的更換比對(duì)測(cè)試。
第二天上午客戶反饋,他把所謂的壞板的復(fù)位電路處的那個(gè)外接電阻從10K更換為110歐就正常工作了。聽后一驚,覺得沒道理。但人家說行,就只好先建議他多測(cè)試下,然后自己心里繼續(xù)思考到底怎么回事。
到了下午客戶反饋回來,說按上午的接法是比之前穩(wěn)定多了,當(dāng)用手摸供電模塊時(shí)還是會(huì)出狀況。要命的是,當(dāng)他在110歐的條件下更換MCU芯片做燒錄時(shí)幾乎沒法正常燒錄。這是跟之前接10K時(shí)是不一樣的新狀況。說明他隨手更換為110歐并不靠譜,也沒理論支撐。當(dāng)時(shí)他更換后感覺好些了,并非真的穩(wěn)定好了。
記得前一天晚上我隨便掃了幾眼他的源代碼,不復(fù)雜。他使用外部晶體做時(shí)鐘源,UART通信和部分GPIO及顯示控制。不過,經(jīng)過近2天我對(duì)該客戶的接觸,感覺他因?yàn)樘?duì)整個(gè)開發(fā)沒花什么心思,代碼是基于ST庫代碼修改而來,基本沒時(shí)間做太多研究。
鑒于此,想到他使用外部時(shí)鐘,需要他做代碼配置。突然懷疑會(huì)不會(huì)是他的時(shí)鐘配置出了問題,而且如果時(shí)鐘配置出了問題,比如超頻了,那上面的那些奇怪現(xiàn)象就不難理解了。想到這里,我電話他屏蔽跟HSE時(shí)鐘配置有關(guān)的所有代碼,使用系統(tǒng)默認(rèn)HSI做主時(shí)鐘。
功夫不負(fù)有心人,還真是他在利用HSE進(jìn)行時(shí)鐘配置的地方出了問題。改用HSI后,復(fù)位線路回歸正常接法。他們繼續(xù)用手去觸摸電源供電線路的器件會(huì)讓STM8S105產(chǎn)生復(fù)位,但復(fù)位后能回歸正常運(yùn)行狀態(tài)。不像之前受干擾后就回不去了。之前被懷疑因?yàn)殡娫串惓2▌?dòng)可能致?lián)p的芯片都能正常工作了。
看到這里會(huì)有人好奇,他為什么會(huì)想到把那個(gè)RC中的電阻改為110呢?這點(diǎn)出乎我意料,呵呵。因?yàn)轭^天晚上我測(cè)試異常板的復(fù)位腳電平時(shí)發(fā)現(xiàn)電平才2.5V,不正常。沒想到他第二天為了想把RST腳電平湊到接近VDD,他就不停減小電阻直到復(fù)位腳電平接近5V。當(dāng)然湊巧的時(shí)是,此時(shí)功能還真有改善,這更加讓他自信這個(gè)動(dòng)作的合理性了。
當(dāng)然還有個(gè)原因,后來他告訴這個(gè)問題也拖了幾個(gè)月了一直沒找到原因,病急亂投醫(yī)也可以理解。這種情況在產(chǎn)品開發(fā)過程中也較普遍,在時(shí)間進(jìn)度緊急時(shí)先應(yīng)付了再說。
這里或許有人覺得疑惑,既然他MCU內(nèi)部時(shí)鐘配置錯(cuò)誤了,為什么第一次燒錄后能妥妥地的工作,還可以給客戶送樣,直到受到外在干擾時(shí)才出現(xiàn)異常呢?第一次燒錄后的代碼和受干擾再次上電的代碼并無差別。這點(diǎn)我也迷惑不解,有知道的歡迎留言交流。
但可以肯定的是,他的超頻時(shí)鐘問題代碼總歸是讓芯片工作在技術(shù)手冊(cè)參數(shù)約定之外的不可靠無保障的狀態(tài)。即使某種條件下的正常運(yùn)行也不能視為真正的正常狀態(tài),就像個(gè)醉漢個(gè)別的正確言行并不代表他的言行可靠一樣,因?yàn)楸旧砭褪浅鲇谝环N不靠譜狀態(tài)。
應(yīng)該說事情并不復(fù)雜,但往往由于客戶在出現(xiàn)狀況時(shí)不夠冷靜淡定去找原因,往往急于片面下結(jié)論而使得自己的項(xiàng)目進(jìn)展緩慢;或者無意地把誤判信息再傳達(dá)給別人而讓事情復(fù)雜化或玄奧化,類似情況可謂不勝枚舉。
比方說,前些天有個(gè)工程師問我,說某STM32 芯片的某管腳怎么不聽使喚,奇怪納悶,問是否有特別之處。我查看手冊(cè),該管腳跟別的絕大部分GPIO并無特性上的差異,讓其繼續(xù)檢查。后來發(fā)現(xiàn)是代碼在兩處作了不一致的配置。再說個(gè)實(shí)例,也是幾天前有個(gè)工程師反映說在SWIM燒錄時(shí),只要配置了某管腳輸出時(shí)就沒法燒錄。咋聽起來兩個(gè)東西應(yīng)該是不著邊際,讓其檢查該腳控制了些什么。后來發(fā)現(xiàn)該腳控制了某個(gè)電源開關(guān)管,它的通斷直接影響到MCU的供電。
套用一句類似評(píng)價(jià)家庭幸福的話來結(jié)尾,正常產(chǎn)品的結(jié)果是一致的,異常產(chǎn)品的癥狀和原因是五花八門的。 |