<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 牛人業(yè)話 > 盡信書不如無(wú)書,芯片手冊(cè)也會(huì)讓你哭

          盡信書不如無(wú)書,芯片手冊(cè)也會(huì)讓你哭

          作者:天雷君 時(shí)間:2019-06-10 來(lái)源:電子產(chǎn)品世界 收藏

          四十年波瀾壯闊的改革開(kāi)放,無(wú)數(shù)中華兒女披星戴月,艱苦奮斗,不忘初心,砥礪前行,終于,中國(guó)這條古老的東方巨龍?jiān)俣柔绕穑柡鴼v史文明的古韻和現(xiàn)代科技的自信,熠熠地閃耀在世界舞臺(tái)的中央。

          本文引用地址:http://www.ex-cimer.com/article/201906/401364.htm

          眼睜睜地看著民窮國(guó)弱的中華民族帶著不可阻擋的豪情和碾壓一切的豪邁沖出亞洲,走向世界,美國(guó)佬終于按捺不住了。

          山姆大叔揮舞著大棒,伸著長(zhǎng)長(zhǎng)的臂膀,把屠刀伸到華為、??低暋⒋蠼@些中國(guó)頂尖的科技公司頭上。

          盡管任正非先生氣度非凡,在這種至暗時(shí)刻依然力挺美國(guó)公司,呼吁廣大國(guó)人把“有良心的”美國(guó)公司和無(wú)良的美國(guó)政客分開(kāi)看待,但是,當(dāng)我被來(lái)自美帝的耽誤了好長(zhǎng)一段時(shí)間時(shí),我依然克制不住壓在嗓子眼中的那三個(gè)字:耍我呢!

          1

          這顆芯片上面的,我熟悉地不能再熟悉了,可是現(xiàn)在,它竟然像薛定諤先生的貓那樣——測(cè)不準(zhǔn)了!

          1560135895946459.jpg

          我怔怔地盯著測(cè)試工裝電路板上這顆芯片——飛思卡爾的MPC5604B,這顆在過(guò)去的兩年中我無(wú)數(shù)次在它編碼、調(diào)試,與之建立了深厚的革命友誼的芯片,在我眼前輕輕拉起了朦朧的面紗。

          一切都來(lái)得猝不及防,恍惚間,時(shí)間倒轉(zhuǎn),我仿佛回到了兩年前。

          當(dāng)時(shí),用過(guò)一年微芯的芯片后,新產(chǎn)品上終于又用回了飛思卡爾的MCU。

          當(dāng)飛思卡爾的斜三角標(biāo)識(shí)和‘MPC’的字眼剛剛映入眼簾時(shí),一種自然而然的親近感淺淺地在我心底漾起。

          你好,飛思卡爾!再見(jiàn),微芯!

          每家公司的產(chǎn)品都有自己特殊的基因,、技術(shù)資料、例程源碼也各有一套體系,帶有濃濃的個(gè)體色彩。

          所以,盡管之前用過(guò)的飛思卡爾MCU都是16位,這個(gè)MPC是32位,但是讀起來(lái),看起來(lái)技術(shù)資料,還是有一種久違的熟悉感。

          就這樣,我和MPC的磨合開(kāi)始了。

          在芯片手冊(cè)和例程的幫助下,我慢慢地熟悉了這顆芯片的CLK、SWT、STM、IO、PIT、ADC、FlexCAN、LINFlex、eMIOS、Data Flash等模塊,按部就班地在它上面編程、調(diào)試,耐心地找bug,不厭其煩地清理、重構(gòu)代碼,優(yōu)化產(chǎn)品性能。

          一兩年下來(lái),產(chǎn)品開(kāi)發(fā)結(jié)束,順利量產(chǎn)供貨。

          我看著MPC5604B這顆芯片,一種感激之情油然而生。

          這芯片性能不錯(cuò),價(jià)格不貴,開(kāi)發(fā)趁手,實(shí)在應(yīng)該給它“打電話”!

          本著這種好感,在做另一款產(chǎn)品的測(cè)試工裝時(shí),我很自然地就向硬件工程師推薦了這顆芯片。

          2

          一張一弛,文武之道,亦是工程師之道。

          前期緊張而忙碌的PEPS產(chǎn)品開(kāi)發(fā)工作結(jié)束了,隨后開(kāi)啟的測(cè)試工裝開(kāi)發(fā),正是松弛下來(lái)休養(yǎng)生息的好時(shí)候。

          測(cè)試工裝用于對(duì)產(chǎn)品的功能進(jìn)行測(cè)試,主要是驗(yàn)證生產(chǎn)下線后的產(chǎn)品的有效性。既不用考慮性能,也不用考慮效率,所以開(kāi)發(fā)難度不高。

          再加上我們特意選用了之前產(chǎn)品上用過(guò)的MCU,正好可以移花接木。

          把上面的代碼照搬過(guò)來(lái),根據(jù)測(cè)試工裝的功能需求稍加修改,調(diào)試運(yùn)行一番,能實(shí)現(xiàn)對(duì)產(chǎn)品的測(cè)試功能,就到此結(jié)束了。

          抱著這種拿來(lái)主義的放松心態(tài),我一邊玩一邊寫測(cè)試工裝的代碼,直到有一天......

          那一天,正進(jìn)行到對(duì)PEPS的ACC/IGN1/IGN2繼電器輸出電路的測(cè)試上。拿ACC為例,測(cè)試邏輯如下:

          ?通過(guò)ISO14229診斷協(xié)議中的IO輸入輸出控制服務(wù),令PEPS輸出有效的ACC;

          ?在測(cè)試工裝上用ADC檢測(cè)ACC繼電器輸出的電壓水平。

          這里有兩個(gè)問(wèn)題需要跟大家說(shuō)明。

          第一,之所以通過(guò)診斷協(xié)議的IO控制這種貌似復(fù)雜的方式令待測(cè)產(chǎn)品在指定的IO端口上輸出,而不是根據(jù)待測(cè)產(chǎn)品的某項(xiàng)功能讓該IO端口在執(zhí)行這項(xiàng)功能時(shí)輸出,是因?yàn)檫@種方式可以“消解”掉待測(cè)產(chǎn)品的功能。

          換句話說(shuō),“功能”輸出的方式取決于待測(cè)產(chǎn)品,當(dāng)測(cè)試另一種功能的待測(cè)產(chǎn)品時(shí),需要修改測(cè)試邏輯中令I(lǐng)O輸出有效的實(shí)現(xiàn)方式。

          “診斷”輸出則不然,即使更換了待測(cè)產(chǎn)品的功能,也可以通過(guò)同樣的“診斷-IO控制”方式令I(lǐng)O輸出。

          第二,之所以使用ADC檢測(cè)模擬電壓,而不是以“IO”的方式檢測(cè)數(shù)字電壓,是因?yàn)檫@里的ACC輸出電壓和被測(cè)產(chǎn)品PEPS的輸入電壓相關(guān)。

          PEPS供電輸入電壓范圍介于8-16v之間,相應(yīng)地ACC輸出電壓介于7.7-15.7v之間(兩者相差了一個(gè)二極管的壓降)。ADC模擬電壓方式顯然可以更好地應(yīng)對(duì)被測(cè)產(chǎn)品輸入電壓變化時(shí)指定IO口電壓隨之變化的情況。

          聰明的讀者可能想到了,假設(shè)被測(cè)產(chǎn)品的供電輸入電壓為16v時(shí),假設(shè)經(jīng)過(guò)分壓后,接入MCU的ACC端口上電平為4V,當(dāng)輸入電壓為8v時(shí),MCU ACC端口上的電平便下降到了2v。

          一個(gè)5V的MCU,數(shù)字IO上輸入4V可以讀取為‘1’,當(dāng)數(shù)字IO上輸入2v時(shí),你說(shuō),MCU會(huì)讀取出‘0’來(lái)還是‘1’來(lái)?

          3

          那一天,風(fēng)平浪靜,萬(wàn)里無(wú)云,我按部就班地碼字,敲代碼,不疾不徐。

          在時(shí)間的長(zhǎng)河中,未來(lái)早已存在,而過(guò)去永不消逝。所以,著急什么呢?

          帶著時(shí)間虛無(wú)主義,我漫不經(jīng)心地看了看采集上來(lái)的ACC端口電壓,一種不安的直覺(jué)從心底漫起。

          征戰(zhàn)多年,灑家的直覺(jué)一直很準(zhǔn)的。

          我的目光久久地停在ADC采集ACC端口電壓的那條語(yǔ)句上:

          if(1 == ADC0.adc_tagp->CDR[ACC_HS_AD].B.VALID){

          ACC_relay_AD = ADC0.adc_tagp->CDR[ACC_HS_AD].B.CDATA;

          }

          PEPS的供電電壓為12v,ACC進(jìn)入到ADC的端口電壓大概在3v左右,在5V MCU的10位ADC下,對(duì)應(yīng)的ADC值應(yīng)該是:

          搜狗截圖20190610094723.jpg

          這里的1023是端口電壓為5V時(shí)滿量程數(shù)值。

          結(jié)果,我得到的數(shù)字僅為460!

          當(dāng)時(shí),對(duì)于美帝芯片的一絲不恭敬之心,我都是不敢生起的。于是,我自然而然地懷疑到測(cè)試工裝的采集電路和自己的程序問(wèn)題。

          順著這種思路,我反復(fù)試驗(yàn)了好幾種供電電壓,用示波器測(cè)量了ACC進(jìn)入測(cè)試工裝入口處的電壓,以及ACC進(jìn)入MCU ADC端口處的電壓。

          結(jié)果,我更加疑惑了——ADC測(cè)不準(zhǔn)了!

          日出扶桑一丈高,人間萬(wàn)事細(xì)如毛。面對(duì)著半路殺出的程咬金,想著剩下的并不寬裕的時(shí)間,我突然發(fā)現(xiàn),

          未來(lái)已來(lái),而過(guò)去揮霍掉的時(shí)間,永不再來(lái)。

          4

          看著這個(gè)無(wú)比熟悉的MCU,看著這個(gè)剛剛在測(cè)試工裝其它功能上用過(guò)的ADC,我依然不敢相信自己的眼睛。

          于是,我再一次對(duì)IGN1和IGN2這兩個(gè)端口展開(kāi)了測(cè)試,出乎我意料的是,結(jié)果竟然是一樣的。

          看得到,或者看不到,bug都在那里,不來(lái)也不去。

          調(diào)皮的風(fēng)兒在房間里跑過(guò)來(lái)又跑過(guò)去,懷疑和篤定的思緒在我腦袋里轉(zhuǎn)過(guò)來(lái)又轉(zhuǎn)過(guò)去,悠悠蕩蕩,跌跌撞撞。

          看來(lái),這幾個(gè)ADC通道(6/7/8/9)真的是“與眾不同”?

          #define ACC_HS_AD                   PADC_9

          #define IGN1_HS_AD                  PADC_8

          #define IGN2_HS_AD                  PADC_7

          #define START_HS_AD                PADC_6

          一念至此,我立馬打開(kāi)了之前產(chǎn)品的原理圖,果然,那個(gè)產(chǎn)品里“恰好”沒(méi)有用到這幾個(gè)ADC通道。

          真是奇了怪了,當(dāng)時(shí)的產(chǎn)品上恰恰沒(méi)有用到這幾個(gè)ADC通道上的ADC功能,這里的PEPS測(cè)試工裝原本也可以不用這幾個(gè)ADC通道的(ADC有40個(gè)通道)。

          真是巧了,但是,人生的際遇不就是一個(gè)又一個(gè)巧合嗎?

          既然如此,對(duì)美帝芯片手冊(cè)的心理障礙就可以放下了。我用多次采集確認(rèn)了這幾個(gè)通道,最終發(fā)現(xiàn),它們采集到的值正好是“預(yù)計(jì)值”的75%左右。

          好吧,事已至此,姑且只能認(rèn)為,對(duì)同一顆MCU,不同ADC通道的參考電壓不一樣吧。

          本著這種思路,我修改了程序里對(duì)這幾路ADC通道采集值的判定。

          #if 0

          #define RELAY_ON_THREHOLD_8V     400

          #define RELAY_ON_THREHOLD_12V   600

          #define RELAY_ON_THREHOLD_16V   800

          #endif

          #define RELAY_ON_THREHOLD_8V     300

          #define RELAY_ON_THREHOLD_12V   450

          #define RELAY_ON_THREHOLD_16V   600

          改完之后,在各種電壓水平下,測(cè)試通過(guò),一切又回到了正軌。我也果斷地把這種“靈異”事件拋到了腦后。

          既然想不通,那就不想了吧。

          5

          魯迅先生說(shuō),“我向來(lái)是不憚以最壞的惡意,來(lái)推測(cè)人心的。”

          魯迅先生是世間少有的“鋼鐵直男”,灑家自然學(xué)不來(lái)。事實(shí)上,出了問(wèn)題,我都會(huì)自覺(jué)不自覺(jué)地把錯(cuò)誤向自己身上攬。推功攬過(guò),這也頗合修行之義。

          至于飛思卡爾MPC5604B的中居然有幾路通道的采集不以VCC-5V為供電電壓,灑家也總覺(jué)得是我司買物料時(shí)出了什么問(wèn)題,不愿意把這鍋甩到芯片公司頭上。

          不過(guò),吃一塹,總會(huì)長(zhǎng)一智。經(jīng)此教訓(xùn),我也算是有了一定的收獲,至少現(xiàn)在,我認(rèn)為:盡信書不如無(wú)書,芯片手冊(cè)有時(shí)也會(huì)讓你哭!



          關(guān)鍵詞: 芯片手冊(cè) ADC模塊

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();