TMS320C54x DSP在線燒寫FLASH存儲器并實現(xiàn)自舉引導(dǎo)的方法
摘要:通過一個完整的實例,詳細闡述了tms320c54x系列dsp芯片在線燒寫flash存儲器。并實現(xiàn)自舉引導(dǎo)的方法。給出了硬件連接方案和完整的c語言燒寫程序。 關(guān)鍵詞:tms320c54x flash 燒寫 自舉引導(dǎo)在dsp系統(tǒng)中通常貼片式flash存儲器保存程序,并且在上電或復(fù)位時再將存儲在flash中的程序搬移到dsp片內(nèi)或者片外的ram中全速運行。這個“程序搬移”的過程叫做自舉加載。本文以tms320c5416 dsp對mbm29lv400bc存儲器的操作為例,詳細闡述了在線燒寫flash并實現(xiàn)自舉加載的方法。該方法適合于大多數(shù)c54x系列dsp對符合jedec標(biāo)準(zhǔn)的flash的操作。為便于讀者使用,本文的程序全部采用c語言編寫。
1 tms320c5416與mbm29lv400bc的硬件接口mbm29lv400bc與tms320c5416的接口很方便,前者只需作為后者的外部數(shù)據(jù)存儲器與其進行連接,而中間的邏輯電路采用cpld實現(xiàn)即可。這里使用16位數(shù)據(jù)寬度,所以byte引腳通過一個上拉電阻接到3.3v電源。連接電路原理如圖1所示。相應(yīng)的vhdl語言程序為:flash_ce<=dsp_ds;flash_oe<=(not dsp_r_w)or dsp_mstrb;flash_we<=dsp_r_w or dsp_mstrb;2 tms320c5416自舉引導(dǎo)過程當(dāng)mp/mc=0時,tms320c5416被置于微計算機模式。上電或復(fù)位時,程序指針指向片內(nèi)rom區(qū)的ff80h單元,該單元放置了一條跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到f800h單元。而f800h就是自舉加載器(bootloader)引導(dǎo)程序的起始單元。bootloader的任務(wù)就是將存放在外部flash中的程序“搬運”到dsp內(nèi)部或外部的ram區(qū),“搬運”完后跳轉(zhuǎn)到程序入口處執(zhí)行。存放在外部flash中的用戶程序與一些必要的引導(dǎo)信息組合在一起,稱為boot表示(自舉表)。16位模式下通用的boot表結(jié)構(gòu)如表1所示。
表1 16位模式下通用boot表結(jié)構(gòu)序 號內(nèi)容及意義110aa(16位存儲格式)2swwsr值3bscr值4boot之后程序執(zhí)行入口偏移地址xpc5boot之后程序執(zhí)行入口地址pc6第一個程序段的長度7第一個程序段要裝入的內(nèi)部ram區(qū)域移地址8第一個程序段要裝入的內(nèi)部ram區(qū)地址9第一個程序段代碼…10第二個程序段的長度11第二個程序段要裝入的內(nèi)部ram區(qū)偏移地址12第二個程序段要裝入的內(nèi)部ram區(qū)地址13第二個程序段代碼…14boot表結(jié)構(gòu)標(biāo)志:0x0000tms320c5416提供了多種自舉加載的方法。在此使用并行加載模式,因此令int2=1和int3=1。在并行模式下,自舉表放在外部數(shù)據(jù)存儲器的32k高端地址區(qū)間:8000h~0fffh。自舉表首地址放在數(shù)據(jù)空間的0ffffh單元。加載時,bootloader讀取數(shù)據(jù)空間的0ffffh單元中的內(nèi)容,將其作為首地址,從該地址開始復(fù)制數(shù)據(jù)到內(nèi)部的程序空間。復(fù)制完畢后,bootloader便跳轉(zhuǎn)到指定的程序入口地址,開始執(zhí)行用戶程序。