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