數(shù)據(jù)存儲(chǔ)很重要,這塊把錢省不掉?
艷陽高照,微風(fēng)陣陣,測試車輛內(nèi)熱氣騰騰。我打開車門,斜躺在駕駛座上,把渾然天成的兩個(gè)大腳丫子翹到方向盤上,百無聊賴地拿著遙控鑰匙解鎖、閉鎖、解鎖、閉鎖、咦?怎么沒反應(yīng)了?遙控鑰匙沒電了?
本文引用地址:http://butianyuan.cn/article/201904/399524.htm我盯著手中的鑰匙看了看,每按一下,鑰匙上面那個(gè)小小的指示燈就按部就班地閃一下。甩鍋失敗,一陣涼意從我心底泛起,明兒個(gè)就要回程,千萬別出啥岔子呀!一個(gè)哆嗦,灑家從方向盤和駕駛座上滾了下來。
問題來得無聲無息,bug原因半抱琵琶、朦朦朧朧,于是我架上仿真器,揮舞三板斧,一路跟著遙控接收、解碼代碼探下究竟。
先確認(rèn)能否正常接收到遙控信號,很正常;再看看可否收到完整遙控報(bào)文,能收到;能不能解析出來遙控命令,可以;判斷是不是有效的鑰匙,不是!
納尼,居然不是有效的鑰匙?奇了個(gè)怪了個(gè)了哉!
不知為何,就那么一瞬間,火光電閃,李工那肥油油的嘴唇、猥瑣的小眼睛突然浮現(xiàn)在我面前。于是,我馬上看了看存放鑰匙ID的地址,果不其然,數(shù)據(jù)丟了!
數(shù)據(jù)怎么丟的?
我怔怔地看了看儀表盤,旋即陷入了苦苦的思索:數(shù)據(jù)怎么就丟了呢?究竟發(fā)生什么了?
存放鑰匙的這個(gè)扇區(qū)可以存放128次鑰匙數(shù)據(jù),更新一次數(shù)據(jù),地址就向前累加,扇區(qū)用完后,需要先擦一遍再寫新數(shù)據(jù),然后還能再接著用127次。顯然,這次要么是跑飛了直接跳入了擦除程序,要么是用完128次,擦掉后再寫時(shí)沒寫上。
看了看儀表盤上醒目地顯示著的低電量提示燈,我本能地認(rèn)定了是第二種情況,肯定是電池快沒電了,電壓本來很不穩(wěn)定,再加上程序里是在執(zhí)行閉鎖解鎖動(dòng)作(附帶著還會(huì)展開或收起后視鏡、閃爍轉(zhuǎn)向燈進(jìn)行提示)期間更新鑰匙數(shù)據(jù)的,那么多負(fù)載一起動(dòng)作,肯定會(huì)在電池母線電壓時(shí)造成很大的波動(dòng),于是要么擦除了一半就出錯(cuò)了,要么擦除掉之后沒有寫成功。
我不禁又想起了采用外置EEPROM的方案。如果使用外置EEPROM的話,首先EEPROM根本就不用擦除,其次即便這次沒有寫成功,車身控制器中沒有存儲(chǔ)上鑰匙最新的滾動(dòng)碼信息,但是,根據(jù)鑰匙和車身控制器的交互機(jī)制,這一點(diǎn)都不影響鑰匙的下次使用,下次使用時(shí)再多按一次鑰匙,車身控制器就能和鑰匙匹配起來。
于是,我又想起李工來了!
我左思右想,似乎很難避免因?yàn)殡妷翰环€(wěn)定導(dǎo)致數(shù)據(jù)擦除一半就出錯(cuò)的情形,而且即便擦除成功了,倘若這時(shí)因?yàn)殡妷翰环€(wěn)定MCU復(fù)位了,還是會(huì)造成擦除成功但是寫失敗的問題。
茲事體大,不敢擅專,于是我向經(jīng)理匯報(bào)了這個(gè)故障以及對這個(gè)問題的分析。
好在還處在產(chǎn)品的開發(fā)階段,一切修改都還來得及。經(jīng)理沉吟片刻,思索再三,就把我招了回去。
回到公司,經(jīng)理召集項(xiàng)目組開會(huì)。灑家上下嘴皮子一碰,簡要介紹了故障和原因分析。然后,盯著李工,悠悠地說到:“李工,我早說內(nèi)部數(shù)據(jù)Flash不靠譜吧,你看,馬上得讓車廠技術(shù)確認(rèn)了,現(xiàn)在還得改板子,多耽誤事啊!”
說這話時(shí),我仔細(xì)地看著他的臉,看著那裹在襯衣硬領(lǐng)里的緊繃繃、紅通通的脖子,看著那寬寬的肩膀和重重地放在桌上的兩條胳膊,等待著他的回應(yīng)。
李工臉上紅一陣白一陣,突然把眼皮一抬,對著經(jīng)理說:“以前我在X公司時(shí),做的那款產(chǎn)品就沒用外部EEPROM,只要編程時(shí)加些限制和保護(hù),內(nèi)部數(shù)據(jù)Flash完全沒問題!”
面對這種無法求證的說辭,我?guī)е鴳蚺暗男θ菡f不可能。誰知,李工卻突然爆發(fā)了。他漲紅了臉,眼睛瞪得溜圓,帶節(jié)奏地拍了拍桌子,大聲地說:“我說的是實(shí)話,我可以把那款產(chǎn)品的原理圖調(diào)出來!”
經(jīng)理又被說動(dòng)了,便說起能否通過軟件的方式避免數(shù)據(jù)被誤擦除或?qū)戝e(cuò)的情況。
我拿出早已準(zhǔn)備好的說辭,帶著科普的口吻跟大家講了一通:“代碼可能跑飛到任何一個(gè)位置,一旦跑飛到擦除代碼,數(shù)據(jù)肯定就被擦除了。當(dāng)然了,代碼跑飛的幾率很小,跑飛到擦除代碼的位置就更小了。但是,遙控?cái)?shù)據(jù)更新的代碼運(yùn)行到需要先擦除扇區(qū)再寫新數(shù)據(jù)的那個(gè)分支時(shí),現(xiàn)在發(fā)生的情況是電壓不穩(wěn)定確確實(shí)實(shí)會(huì)導(dǎo)致寫入失敗?!?/p>
看了看大家認(rèn)真聽講的樣子,我清了清嗓子,繼續(xù)說了下去:“貌似可以在執(zhí)行擦除和寫入之前檢測電池母線電壓,電壓不穩(wěn)定時(shí)就不執(zhí)行這些操作,好像這樣就能解決這個(gè)問題了??墒菑睦碚撋戏治?,從電池電壓到MCU供電電壓之間的電源轉(zhuǎn)換芯片可以在電池電壓下探到5.5v時(shí)還能穩(wěn)定地提供5V輸出,而電池電壓又確實(shí)不會(huì)下探到那么低,所以理論上分析,這種電壓不穩(wěn)定本該不會(huì)導(dǎo)致數(shù)據(jù)誤擦除或?qū)戝e(cuò),這就說明不是單單電壓不穩(wěn)定這一個(gè)因素導(dǎo)致的。再說了,如果擦除和寫入之前檢測的電壓穩(wěn)定,在擦除或?qū)懭肫陂g不穩(wěn)定了,還是避免不了這個(gè)問題!”
緊接著,我又給出了貌似反方向的判斷:“不過,現(xiàn)在的程序中,是得操作128次鑰匙才會(huì)觸發(fā)一次擦除Flash扇區(qū)的操作,只有這第128次才會(huì)面臨這種風(fēng)險(xiǎn)。平時(shí)的操作只有寫入數(shù)據(jù),寫入時(shí)間遠(yuǎn)遠(yuǎn)小于擦除時(shí)間,寫入失敗的幾率應(yīng)該很小很小的?!?/p>
經(jīng)理皺著眉頭,向我投來詢問的目光,我目光堅(jiān)定地點(diǎn)了點(diǎn)頭,最終,經(jīng)理拍板,還是決定外加一塊EEPROM。
灑家向不發(fā)一言的李工投去安慰的目光,悠悠地對他說:
數(shù)據(jù)存儲(chǔ)很重要,看來這塊把錢省不掉啊!
*本文為電子產(chǎn)品世界原創(chuàng)文章,轉(zhuǎn)載請注明來源
評論