《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > DSP外部Flash存儲器在線編程的軟硬件設(shè)計
DSP外部Flash存儲器在線編程的軟硬件設(shè)計
單片機(jī)與嵌入式系統(tǒng)
夏 爽
摘要: 詳細(xì)介紹DSP與Flash存儲器的兩種硬件接口方式及在線編程,分析了兩種硬件接口方式下在線編程的區(qū)別,給出了相應(yīng)的在線編程核心代碼并在實際電路上測試通過,可作為DSP嵌入式系統(tǒng)設(shè)計的參考。關(guān)鍵詞:在線編程
關(guān)鍵詞: DSP Flash TMS320C6711D TI
Abstract:
Key words :

摘要:詳細(xì)介紹title="DSP">DSP與Flash存儲器的兩種硬件接口方式及在線編程,分析了兩種硬件接口方式下在線編程的區(qū)別,給出了相應(yīng)的在線編程核心代碼并在實際電路上測試通過,可作為DSP嵌入式系統(tǒng)設(shè)計的參考。
關(guān)鍵詞:在線編程;Flash存儲器;硬件握手;軟件握手

    隨著嵌入式系統(tǒng)向體積更小、性能更高的方向發(fā)展,傳統(tǒng)的DIP(雙列直插)集成電路因體積龐大、元器件I/O引腳數(shù)量受封裝限制等缺陷,已逐漸淡出人們的視線。在嵌入式產(chǎn)品設(shè)計中,大量采用SMT貼片元器件,既提高了性能,又節(jié)省了寶貴的空間。由于采用貼片元器件,無法將Flash存儲器等元器件從電路板上取下來單獨進(jìn)行編程。專用編程器的方式已經(jīng)很少采用,取而代之的是采用基于仿真器連接的JTAG接口的在線編程方式。這種在系統(tǒng)帶電編程的方式不受時間和空間的限制,隨時隨地都可進(jìn)行,且產(chǎn)品軟件版本升級容易。
    在嵌入式系統(tǒng)中,為了實現(xiàn)程序的脫機(jī)自動運行,程序往往固化在電可擦除的Flash存儲器中。要實現(xiàn)一個嵌入式系統(tǒng)的帶電脫機(jī)運行,在線編程就成為嵌入式系統(tǒng)開發(fā)過程的必經(jīng)之路。由于在線編程涉及到硬件和軟件方面的內(nèi)容,因此要從頂層設(shè)計和系統(tǒng)的角度來考慮在線編程。硬件設(shè)計要為軟件設(shè)計作鋪墊,盡可能簡化軟件設(shè)計。
    本文以TI公司的DSP芯片TMS320C6711D和AMD公司的4 Mb Flash存儲器AM29LV400B為例來介紹兩種在線編程方式。

1 DSP與Flash存儲器的兩種硬件連接關(guān)系
1.1 以Ready信號作為硬件握手

    帶有Ready信號的TMS320C6711D的EMIF(Exterhal Memory Interface)接口與Flash存儲器AM29LV400B的硬件連接如圖1所示。由于AM29LV-400B輸出的就緒信號/忙信號()為OD(漏極開路)輸出,需要在該信號上加上拉電阻并連接到VCC。


1.2 采用無Ready硬件連接的軟件握手
    不帶Ready信號的TMS320C6711D與Flash存儲器AM29LV400B的硬件連接如圖2所示。

2 軟件設(shè)計
2.1 帶有硬件握手的軟件設(shè)計

    帶有Ready信號連接的Flash存儲器編程時序如圖3所示。Flash的就緒信號/忙信號()輸出為低電平時,表明Flash正忙,處于編程或擦除狀態(tài)。由于DSP與Flash存儲器采用Ready/Busy信號作為硬件握手信號,當(dāng)Ready/Busy信號為低電平時,CPU在總線時序上插入等待周期,直到Ready/Busy信號解除(為高電平)。在Ready信號為低電平期間,由于CPU處于等待狀態(tài),程序被暫停執(zhí)行,因此不需要通過軟件來判斷Flash存儲器的編程或擦除狀態(tài)。


   
2.2 帶有軟件握手的軟件設(shè)計
    Flash的就緒信號/忙信號()輸出為低電平時,表明Flash正忙,處于編程或擦除狀態(tài),此時寫入或讀出的數(shù)據(jù)是無效的,不是程序員需要的數(shù)據(jù);當(dāng)該信號輸出為高電平時,表明Flash已處于就緒狀態(tài),可對其進(jìn)行寫入或讀出數(shù)據(jù)的操作。
    由于DSP與Flash存儲器的接口采用軟件握手,在對Flash存儲器進(jìn)行編程或擦除時,DSP的總線周期中不會由硬件自動插入等待周期,如果此時仍采用2.1節(jié)的Flash編程函數(shù)對Flash存儲器進(jìn)行編程,則會得到錯誤的編程結(jié)果。編程結(jié)束后會發(fā)現(xiàn)Flash存儲器中有一部分內(nèi)容仍然是0xFFFF,處于編程前的狀態(tài)。雖然對Flash存儲器進(jìn)行了編程操作,但由于Flash存儲器上一次編程操作還未完成,本次的編程操作無效,數(shù)據(jù)根本寫不進(jìn)Flash存儲器。在CCS3.1中用“View/Memery”功能查看Flash存儲器,就會發(fā)現(xiàn)Flash存儲器中的數(shù)據(jù)等間隔地出現(xiàn)編程正確和編程不正確的現(xiàn)象。筆者在自己設(shè)計的TMS320C6711D-250嵌入式模塊(帶有AM29LV400B Flash存儲器)上,通過斷開DSP與Flash存儲器的硬件Ready信號進(jìn)行編程測試,無等待狀態(tài)的測試結(jié)果見表1,有等待狀態(tài)的測試結(jié)果見表2。

    可見,在沒有硬件握手的情況下,需要通過軟件來判斷當(dāng)前Flash存儲器編程或擦除的狀態(tài)來進(jìn)行編程操作。如果Flash存儲器正處于編程或擦除過程中,則無法繼續(xù)對Flash存儲器進(jìn)行編程,需等到Flash存儲器上一次數(shù)據(jù)編程(寫入)完成時才能進(jìn)行下一次數(shù)據(jù)編程(寫入)。否則,會得到錯誤的編程結(jié)果,造成編程后數(shù)據(jù)校驗失敗。
    大多數(shù)Flash存儲器都提供了一個或幾個狀態(tài)位來表示當(dāng)前Flash存儲器編程或擦除的狀態(tài),大多支持通過其數(shù)據(jù)總線D7數(shù)據(jù)位的狀態(tài)來判斷Flash存儲器當(dāng)前編程或擦除的狀態(tài)。這是大多數(shù)Flash存儲器數(shù)據(jù)手冊推薦的編程輪詢算法,但經(jīng)過筆者測試,這種算法比較繁瑣,會造成部分編程內(nèi)容不正確,可采用將編程數(shù)據(jù)讀出、與寫入數(shù)據(jù)進(jìn)行比較的簡單方法,實現(xiàn)軟件等待狀態(tài)的插入。
    說明:TMS320C6711D與AM29LV400B Flash存儲器采用16位數(shù)據(jù)連接,DSP EMIF CEl存儲器空間初始化為32位總線寬度(CEl端口連接16位Flash存儲器),讀取/寫入Flash存儲器的32位數(shù)據(jù)中高16位無效。
    帶有軟握手的Flash存儲器編程函數(shù)如下:

   

3 兩種在線編程方式的區(qū)別
    在硬件上加入硬件握手的Flash存儲器在線編程方式設(shè)計簡單,在應(yīng)用中只須考慮擦除和編程,而無須考慮Flash存儲器的當(dāng)前狀態(tài)。當(dāng)Flash存儲器正處于擦除和編程狀態(tài)而未完成時,F(xiàn)lash存儲器產(chǎn)生的忙信號通過Flash存儲器與DSP之間的硬件連接直接送入DSP,由DSP硬件在其總線訪問周期中自動插入等待周期,暫停DSP處理器的執(zhí)行;當(dāng)Flash擦除和編程狀態(tài)完成時,由Flash存儲器產(chǎn)生的就緒信號通過Flash存儲器與DSP之間的直接硬件連接將就緒信號送入DSP,解除DSP的等待狀態(tài),繼續(xù)程序的執(zhí)行。而采用軟件握手的Flash在線編程方式需要程序員在軟件中判斷Flash存儲器的當(dāng)前狀態(tài)。只有當(dāng)Flash存儲器擦除過程完成時,才能對其進(jìn)行編程;當(dāng)Flash存儲器的一次編程(數(shù)據(jù)寫入)過程完成時,才能進(jìn)行下一次的編程(數(shù)據(jù)寫入)。軟件設(shè)計繁瑣,且要經(jīng)過多次調(diào)試。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。