基于16位控制器的汽車車身電子控制系統(tǒng)解決方案(二)
嵌入式仿真器
專門設(shè)計(jì)用于復(fù)雜的汽車電子應(yīng)用的MC33993、MC33887和MC33888器件提供了具有先進(jìn)性能和診斷功能的解決方案。
復(fù)雜的多引腳MCU常會(huì)引起開發(fā)問題。MC9S12DP256提供了一個(gè)單線的后臺(tái)調(diào)試接口,可以方便地在汽車環(huán)境中實(shí)現(xiàn)廣泛的調(diào)試工作,并且不會(huì)遇到使用傳統(tǒng)電路嵌入式仿真器時(shí)常見的困難。這一接口還能用來在生產(chǎn)線末端進(jìn)行主要閃存的編程,甚至可以用來在車內(nèi)執(zhí)行再編程操作。
現(xiàn)代的汽車微控制器常采用閃存來存儲(chǔ)主操作程序。編程閃存的最佳方法是在最終組裝后把主程序編程進(jìn)完整的電子控制模塊中,與在模塊組裝前通過第三方把主程序編程進(jìn)MCU相比,這種方法能有效地避免風(fēng)險(xiǎn)和延時(shí)。通過簡單的串行接口將主程序編程進(jìn)MCU是在模塊組裝后完成的,一般是在最終測(cè)試過程中執(zhí)行的。一些制造商采用便宜的獨(dú)立編程器完成這一操作,而另外一些廠商則將編程操作集成在生產(chǎn)線末端的測(cè)試設(shè)備中。
摩托羅拉的相關(guān)器件則提供一個(gè)單線的后臺(tái)調(diào)試接口用來實(shí)現(xiàn)閃存編程、檢驗(yàn)和一般的調(diào)試操作。在設(shè)備正常工作時(shí),串行通信引腳在復(fù)位時(shí)是被拉高的,因此后臺(tái)系統(tǒng)不被激活。當(dāng)有編程器或調(diào)試系統(tǒng)連接到這個(gè)引腳時(shí),該引腳在復(fù)位時(shí)會(huì)被拉到低電平,從而迫使MCU進(jìn)入激活的后臺(tái)模式,而不是去啟動(dòng)應(yīng)用程序。為了方便調(diào)試,可以在設(shè)備正常工作時(shí)將一個(gè)主機(jī)系統(tǒng)連接到目標(biāo)MCU系統(tǒng),從而在不干擾設(shè)備運(yùn)行的條件下實(shí)現(xiàn)對(duì)閃存或寄存器內(nèi)容的監(jiān)測(cè)。所連接的調(diào)試系統(tǒng)也能取代MCU的控制來讀寫CPU寄存器、設(shè)置硬件斷點(diǎn)或跟蹤單條指令。
傳統(tǒng)的電路嵌入式仿真器與目標(biāo)系統(tǒng)之間通常需要30到40個(gè)連接,而上述后臺(tái)調(diào)試接口只需要2到4個(gè)連接。單根BKGD通信信號(hào)和公共地是必須的。增加復(fù)位信號(hào)能使主機(jī)更容易地強(qiáng)迫和控制系統(tǒng)復(fù)位,在某些情況下增加VDD能允許調(diào)試夾具從目標(biāo)系統(tǒng)中“竊取”電源。這種簡單的接口為汽車電子設(shè)計(jì)師提供了對(duì)安裝在運(yùn)動(dòng)汽車電子控制模塊中的MCU的調(diào)試訪問能力。當(dāng)汽車在正常路況下行進(jìn)時(shí)許多問題只能經(jīng)過調(diào)試才能發(fā)現(xiàn)。
內(nèi)存編程
與閃存編程相關(guān)的最重要因素是速度與方便性。編程速度取決于閃存單元的編程時(shí)間以及從編程器到目標(biāo)MCU的數(shù)據(jù)傳輸速度,當(dāng)然還有一些其它因素,如編程前擦除陣列的時(shí)間,用于驗(yàn)證編程操作成功與否的時(shí)間。MC9S12DP256編程任意16位字的時(shí)間是45ms,但一個(gè)突發(fā)編程操作允許對(duì)同一排32字閃存中的任意附加字以20ms的速度編程。理論上采用單線后臺(tái)調(diào)試接口可以在27ms內(nèi)傳送一個(gè)字的信息,這要比閃存的實(shí)際編程時(shí)間稍微慢一些。實(shí)際編程還需要額外的任務(wù)開銷,如驗(yàn)證開銷。獨(dú)立編程器工具SCBDMPGMR12能在稍少于10s的時(shí)間內(nèi)完成256KB閃存的擦除、編程和驗(yàn)證操作。
驗(yàn)證是產(chǎn)生開銷的重要因素之一。重傳所有的數(shù)據(jù)以實(shí)現(xiàn)字對(duì)字的驗(yàn)證將使編程時(shí)間加倍。一個(gè)快速的辦法是在數(shù)據(jù)編程進(jìn)閃存時(shí)進(jìn)行CRC計(jì)算,然后在整個(gè)閃存編程完成后重讀閃存內(nèi)容來驗(yàn)證CRC值。這一操作完全能以總線速度進(jìn)行,而且無需重傳數(shù)據(jù)。
將數(shù)據(jù)到目標(biāo)的傳送分離出來,使它在數(shù)據(jù)編程進(jìn)閃存前完成也會(huì)使編程時(shí)間加倍。較好的方法是數(shù)據(jù)傳送與編程操作并行展開。一般來說,要先把編程算法發(fā)送到目標(biāo)MCU,從而便于管理收到的數(shù)據(jù)并把數(shù)據(jù)送入RAM緩沖器,然后控制擦除與編程操作。該編程算法利用二個(gè)數(shù)據(jù)緩沖器來接收將被編程進(jìn)閃存的數(shù)據(jù)。當(dāng)?shù)谝粋€(gè)緩沖器裝滿數(shù)據(jù)后,編程算法就開始把這些數(shù)據(jù)編程進(jìn)閃存,同時(shí)新的數(shù)據(jù)被裝載到第二個(gè)緩沖器。后臺(tái)接口可以用來接收數(shù)據(jù)并把它們寫入RAM,這一操作不會(huì)干擾目標(biāo)CPU的工作,因?yàn)镃PU是從另外一個(gè)緩沖器讀取數(shù)據(jù)并編程進(jìn)閃存的。
MC9S12DP256中的閃存被分成4個(gè)獨(dú)立的64KB塊,因此可以獨(dú)立地對(duì)這4個(gè)塊執(zhí)行擦除與編程操作。在基于后臺(tái)調(diào)試的閃存編程情況下,由于數(shù)據(jù)傳送速度要稍慢于閃存的平均字編程速度,因此試圖交織進(jìn)行獨(dú)立陣列的編程操作是不切實(shí)際的,不過對(duì)所有4個(gè)塊并行執(zhí)行批量擦除操作則是可行的。
后臺(tái)訪問給首次閃存編程提供了極其便利的途徑,但一些用戶仍希望采用其它系統(tǒng)總線如CAN總線、J1850總線或串行接口總線來完成所有的現(xiàn)場再編程操作。在主應(yīng)用程序中包含合適的啟動(dòng)裝載(boot loader)程序能方便地做到這一點(diǎn)。為了對(duì)來自于成品汽車中某根總線的某些特殊代碼作出響應(yīng),啟動(dòng)裝載程序應(yīng)能擦除閃存并接受新的編程數(shù)據(jù)。