中文字幕一级黄色A级片|免费特级毛片。性欧美日本|偷拍亚洲欧美1级片|成人黄色中文小说网|A级片视频在线观看|老司机网址在线观看|免费一级无码激情黄所|欧美三级片区精品网站999|日韩av超碰日本青青草成人|一区二区亚洲AV婷婷

您當(dāng)前的位置:檢測(cè)資訊 > 科研開(kāi)發(fā)

多年低功耗硬件設(shè)計(jì)的慘痛心得

嘉峪檢測(cè)網(wǎng)        2023-08-30 20:38

經(jīng)過(guò)多年的低功耗硬件設(shè)計(jì)(公司硬件設(shè)計(jì)和軟件設(shè)計(jì)是分開(kāi)的,我一直是做硬件,在面對(duì)低功耗生產(chǎn)事故中做硬件的往往很苦逼),我發(fā)現(xiàn)其中容易出的一個(gè)問(wèn)題就是單片機(jī)進(jìn)睡眠模式前IO沒(méi)配好,產(chǎn)品上主要出的問(wèn)題是這些出問(wèn)題的IO比較隱蔽,當(dāng)時(shí)經(jīng)過(guò)多次測(cè)試也沒(méi)測(cè)試出來(lái),后來(lái)在生產(chǎn)或現(xiàn)場(chǎng)才發(fā)現(xiàn)的概率性功耗偏大的問(wèn)題。
站在硬件的角度,最近才意識(shí)到原來(lái)軟件上一直容易犯的一個(gè)毛病是進(jìn)睡眠前沒(méi)有把所有IO重新配置一遍,這樣容易導(dǎo)致IO低功耗的BUG出現(xiàn)。
這個(gè)心得總結(jié)起來(lái)是:要求在進(jìn)睡眠模式前,把所用的單片機(jī)的所有的IO從代碼上1個(gè)IO接1個(gè)IO的配置一遍。不要偷懶,不要多個(gè)IO一起配置。
 
分析如下:
 
  外設(shè)時(shí)鐘
外設(shè)的時(shí)鐘沒(méi)關(guān),單片機(jī)內(nèi)部模塊沒(méi)關(guān)等,部分單片機(jī)進(jìn)睡眠后自動(dòng)會(huì)關(guān)閉,部分不會(huì)自動(dòng)關(guān)閉的,沒(méi)關(guān)的話當(dāng)場(chǎng)測(cè)試功耗就偏高,會(huì)馬上發(fā)現(xiàn)的。所以這些在實(shí)際生產(chǎn)中都沒(méi)出過(guò)問(wèn)題。
  IO配置
1個(gè)IO接1個(gè)IO配置,不要多個(gè)IO用類(lèi)似BIT1|BIT2……,|=0xxx這類(lèi)一起配置。因?yàn)榇a上越是直觀,出現(xiàn)筆誤的概率越低。而且我們核對(duì)IO的時(shí)候都是一個(gè)IO一個(gè)IO的去核對(duì)配置對(duì)不對(duì)。所以,代碼上依次寫(xiě)一下其實(shí)花了不了多少時(shí)間和代碼空間的?;▊€(gè)5到30分鐘撐死,但后續(xù)節(jié)省的時(shí)間和金錢(qián)就不好說(shuō)了。
人的總是有惰性的,我自己寫(xiě)代碼的時(shí)候之前進(jìn)低功耗前也只是配置了一部分,現(xiàn)在慢慢開(kāi)始習(xí)慣全部配置,很多配置可以復(fù)制之前的IO初始化(這個(gè)已經(jīng)養(yǎng)成了1個(gè)IO,1個(gè)IO的配置,改起來(lái)其實(shí)很舒服的)。
 
案例分析
 
實(shí)際出現(xiàn)的最麻煩,最隱蔽的情況往往跟IO的配置有關(guān),越簡(jiǎn)單的往往越容易出問(wèn)題。
 
1、比如大多數(shù)情況下程序從A子程序進(jìn)入睡眠后IO配置沒(méi)問(wèn)題,經(jīng)過(guò)大量測(cè)試也沒(méi)發(fā)現(xiàn)問(wèn)題。但是當(dāng)某次執(zhí)行了B后再進(jìn)睡眠,B中對(duì)IO進(jìn)行了操作,再進(jìn)睡眠沒(méi)有把IO改回來(lái),這時(shí)問(wèn)題就可能出現(xiàn)了。而要是執(zhí)行C,D……等程序再睡眠都不會(huì)出IO的隱患。
 
案例:產(chǎn)品在客戶那里發(fā)現(xiàn)有50%左右放了一段時(shí)間后電池耗光。研發(fā)百思不得其姐,多次查看代碼沒(méi)發(fā)現(xiàn)問(wèn)題,之前也沒(méi)出現(xiàn)死機(jī)的問(wèn)題(死機(jī)后會(huì)導(dǎo)致不能進(jìn)低功耗,功耗超高)。派人去現(xiàn)場(chǎng)測(cè)試,進(jìn)過(guò)大量測(cè)試后發(fā)現(xiàn)一個(gè)IO部分產(chǎn)品輸出高,導(dǎo)致電流多了1mA左右。原因是客戶上電做了秒脈沖輸出,下電后產(chǎn)品就用電池供電了??蛻粝码娗皼](méi)有配置關(guān)閉秒脈沖輸出,程序下電后也沒(méi)有把IO配置回來(lái),導(dǎo)致有50%的概率IO輸出高電平。
 
2、一個(gè)產(chǎn)品已經(jīng)生產(chǎn)了幾萬(wàn)臺(tái),一直沒(méi)發(fā)現(xiàn)問(wèn)題。后來(lái)?yè)Q了一家PCB廠家后,生產(chǎn)發(fā)現(xiàn)功耗個(gè)別產(chǎn)品偏高個(gè)10uA左右,研發(fā)拿回來(lái)分析,發(fā)現(xiàn)換了芯片就好了。但是,生產(chǎn)出現(xiàn)百分之幾的功耗不好的情況,芯片不可能出現(xiàn)這么大概率的損壞。430芯片,走正規(guī)供應(yīng)商的。再一個(gè)IO一個(gè)IO的查找,通過(guò)手摸IO最終發(fā)現(xiàn)一個(gè)連光耦輸入端的IO配置的是輸入模式。
 
換了芯片好了是因?yàn)楹附舆^(guò),板子變臟,電阻變小,IO有一個(gè)比較固定的偏向與GND的電壓,因而沒(méi)問(wèn)題。之前沒(méi)問(wèn)題可能是板子的阻值比現(xiàn)在的這家小了點(diǎn),或當(dāng)時(shí)生產(chǎn)的時(shí)候濕度大點(diǎn),或光耦的反向漏電流大些,也是各種可能了。軟件發(fā)現(xiàn)這個(gè)IO本來(lái)是配置沒(méi)問(wèn)題的,中間不知道哪里配置過(guò)或配置別的IO時(shí)不小心連這個(gè)IO也配置了。
 
總之,當(dāng)時(shí)沒(méi)搜到這個(gè)IO的配置哪里改動(dòng)了,只是在進(jìn)低功耗前重新配置了下這個(gè)IO。
 
3、產(chǎn)品上使用的一個(gè)外購(gòu)低功耗RF模塊的IO問(wèn)題。使用CC1101和430F2132。都算低功耗的芯片吧。前后找了2家開(kāi)發(fā)模塊,第一家2132一個(gè)IO沒(méi)配置好,生產(chǎn)階段發(fā)現(xiàn)部分產(chǎn)品功耗偏高。后來(lái)是因?yàn)轭I(lǐng)導(dǎo)的原因換了家做無(wú)線的廠家來(lái)做這個(gè),還是CC1101+2132方案。
 
照理來(lái)說(shuō),之前犯過(guò)錯(cuò)誤應(yīng)該吸取經(jīng)驗(yàn)教訓(xùn)了吧。并且軟件人員也是老手了。結(jié)果生產(chǎn)是沒(méi)問(wèn)題,發(fā)貨到客戶那里還是發(fā)現(xiàn)了個(gè)別產(chǎn)品出問(wèn)題,最后還是發(fā)現(xiàn)一個(gè)IO沒(méi)配置好狀態(tài)。
 
4、以上心得很簡(jiǎn)單,但是付出多次時(shí)間+金錢(qián)得出的慘痛心得。而且這些都是軟件的問(wèn)題,但功耗問(wèn)題往往第一個(gè)找個(gè)是硬件:你設(shè)計(jì)的產(chǎn)品功耗偏高,電池沒(méi)電,你查查看,哪里出問(wèn)題了。
 
做硬件的又開(kāi)不到代碼,軟件人員往往開(kāi)始還不承認(rèn)IO配置上有問(wèn)題,尤其是之前找外面廠家開(kāi)發(fā)的模塊,他們的意思是,我做軟件xx年了。開(kāi)發(fā)了這么多產(chǎn)品,這么簡(jiǎn)單的一個(gè)產(chǎn)品怎么會(huì)出問(wèn)題,是你們自己的產(chǎn)品沒(méi)做好才出的問(wèn)題??啾频挠布こ處煕](méi)辦法,只能自己想各種辦法找到出問(wèn)題的那個(gè)IO。軟件人員經(jīng)過(guò)改代碼對(duì)比測(cè)試才完成,但是軟件最后還是不會(huì)說(shuō)自己的代碼有問(wèn)題。
 
5、關(guān)于IO的問(wèn)題。430單片機(jī)IO設(shè)置是最弱的,大部分沒(méi)有上下拉電阻,默認(rèn)是輸入狀態(tài),沒(méi)配置IO就容易出功耗問(wèn)題,ST的相對(duì)好的多,51的IO默認(rèn)的51狀態(tài)有上拉電阻,沒(méi)用到的腳不去配置也不會(huì)出問(wèn)題??盏腎O我之前喜歡配置成輸出0狀態(tài),最近在用STM8S看了下代碼發(fā)現(xiàn)喜歡配置成上拉輸入狀態(tài),STM8S沒(méi)下拉電阻,STM32有,配置成下拉輸入狀態(tài)更好些,不小心碰到不會(huì)對(duì)外輸出電流。
 
題外話:關(guān)于單片機(jī)的低功耗模式之前沒(méi)深入了解STM32,最近才發(fā)現(xiàn)進(jìn)最低功耗的STANDBAY模式RAM中數(shù)據(jù)對(duì)丟失,這點(diǎn)不如8位機(jī),之前用STC的51和STM8系列從不擔(dān)心ram數(shù)據(jù)丟失的問(wèn)題??碨TM32L系列進(jìn)最低功耗也有這個(gè)問(wèn)題,只是可以掉電保的RAM區(qū)域分的更多、更大。
 

 
分享到:

來(lái)源:芯片之家

相關(guān)新聞: