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