
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于jtag的dsp外部flash在線編程與引導技術在以為核心的數(shù)字信號處理系統(tǒng)中,通常將可執(zhí)行代碼存放在非易失性存儲器,在系統(tǒng)加電或復位時通過dsp的引導加載(boot loader)機制將該轉換到高速存儲器中執(zhí)行。ad公司出品的adsp sharc系列dsp內部的非易失性存儲器因其資源有限,必需在外部加以擴展。flash存儲器具有容量大、單電源供電和可在線編程的特點,是一種十分抱負的存儲器。若采納燒錄器對flash存儲器舉行編程,則在修改程序時必需拔插器件,而某些表貼封裝(如c封裝和tsop封裝)的器件又需要專用的轉接插座,這使得程序的調試和參數(shù)的修改十分繁瑣,而且簡單對器件造成物理損傷。
2、采納在線編程的方式對flash存儲器舉行操作,可以克服上述問題,為調試者提供了極大的便利。本文以adsp-21065l外部擴展的flash存儲器at29lv020為對象,在visual dsp+3.5環(huán)境中通過jtag器運行一段程序,將可引導代碼在線燒錄到flash中,并實現(xiàn)系統(tǒng)的引導。1 在線編程與引導系統(tǒng)本系統(tǒng)以adsp-21065l及外部的flash存儲器at29lv020為核心,由dsp控制flash存儲器的擦除和讀寫。at29lv020是用單電源3.3v供電的低功耗flash存儲器,容量是mb(256k8),8位數(shù)據(jù),18位地址總線。該芯片以扇區(qū)(sector)為基本的編程單元,共有
3、1024個扇區(qū),每個扇區(qū)包含256個字節(jié)。芯片的存儲空間中包含兩個引導區(qū),分離是最低8k(0x000000x01fff)和最高8位(0x3e0000x3ffff)的引導區(qū)。系統(tǒng)引導時,dsp將flash作為一般的外部數(shù)據(jù)存儲器,通過dma方式拜訪。adsp-21065l的外部地址空間為0x000200000x03ffffff。flash的物理地址(add)對于dsp來說就是(0x0002000+add)。整片at239lv020占領adsp-21065l的外部地址空間范圍為0x000200000x0005ffff,這段空間屬于bank0。拜訪該段空間時,dsp引腳ms0有效。引導時,dsp引腳
4、bms有效。所以,用法ms0和bms的組合作為flash的片選信號。dsp與flash的銜接1所示。2 dsp可引導文件的創(chuàng)建在線編程的過程如下:(1) 創(chuàng)建一個適合flash存儲器的引導程序文件a;(2) 在visual dsp+3.5環(huán)境中編寫一個flash的操作程序,創(chuàng)建一個可執(zhí)行的“.dxe”文件b;(3) 通過基于jtag的emulator將b下載到dsp中執(zhí)行,將a文件寫入flash中。下面介紹如何在visual dsp+3.5的開發(fā)環(huán)境中有建一個可以引導的文件。該文件就是通過jtag寫入flash中的目標文件。詳細步驟如下:(1) 創(chuàng)建一個將要寫入flash的源程序,在visua
5、l dsp+環(huán)境中挺直通過emulator下載到dsp中執(zhí)行,驗證程序的正確性。(2) 打開菜單drojectproject ontions, 在project標簽的頁面里,挑選type為loader file;在load標簽的頁面里,挑選boot mode為prom,挑選boot format為ascii, 并為將要創(chuàng)建的.ldr文件指定名稱。(3) 重新編譯工程,在工程名目中得 到一個載入文件*.ldr。至此,一個可引導的文件就創(chuàng)建勝利了。文件文件的格式如下:該文件有n行,每行為一個雙字節(jié)的16進制數(shù)??紤]到flash的數(shù)據(jù)總線是8位,在寫入之前,必需將每行分成兩個單字節(jié)的16進制數(shù)。3
6、flash在線編程的實現(xiàn)31 flash扇區(qū)編程的實現(xiàn)at29lv020的操作包括扇區(qū)編程、整片擦除、讀芯片id、退出讀芯片id、引導區(qū)加鎖等,這里關懷的主要是扇區(qū)編程。扇區(qū)是at29lv020編程的最小操作單位,每次編程操作時,目標扇區(qū)的256個字節(jié)同時舉行。在dsp的寫命令字序列的作用下,同一個扇區(qū)的256個字節(jié)被寫入flash內部的緩沖區(qū),然后flash自動啟動編程操作。dsp向緩沖區(qū)寫入同一個扇區(qū)的數(shù)據(jù)時,數(shù)據(jù)的寫入挨次是隨意的,但是相鄰的寫信號間隔不能大于150s,否則將被視為寫入操作完成,編程過程立即啟動,而扇區(qū)內沒有寫入內容的地址將所有編程的為ff。完成一個扇區(qū)的編程最多只需要2
7、0ms。編程過程啟動后首先會自動擦除需要編程的扇區(qū),所以在編程前并不需要對扇區(qū)舉行單獨的擦除操作。為了防止flash中的內容被誤操作或者其它操作修改,flash默認為寫庇護狀態(tài)。每次對扇區(qū)舉行編程前必需寫入一個指令序列,才可以向flash的緩沖區(qū)寫入數(shù)據(jù),進而啟動編程。編程結束后,flash自動復原到寫庇護狀態(tài)。一個扇區(qū)編程是否結束,可以通過以下三種辦法推斷:(1) 反復讀最后寫入的地址的內容,假如編程沒有結束,讀到數(shù)據(jù)的最高位與最后寫入的數(shù)據(jù)的最高位始終互為補碼;編程結束后,讀取的數(shù)據(jù)與最后寫入的數(shù)據(jù)的最高位始終互為補碼;編程結束后,讀到的數(shù)據(jù)與最后寫入的數(shù)據(jù)相等。(2) 反復讀隨意某個地址
8、的內容,假如編程沒有結束, 每次讀操作都會導致次高位發(fā)生跳變;編程結束后,讀到的結果就是寫入該地址的實際數(shù)據(jù)。(3) 寫完一個扇區(qū)后延時20ms,作為扇區(qū)編程結束的依據(jù)。3.2 flash文件在線編程的實現(xiàn)考慮到at29lv020的最小編程單位為一個扇區(qū),首先應當將待編程的文件分割為若干個256字節(jié)的編程單元,對于最后的一個單元,無論是否夠256字節(jié),都無需理睬,照舊根據(jù)一個扇區(qū)處理。假設待編程的文件名為filename.ldr,采納編程語言編寫軟件時,用法變量定義:.var f_data=”filename.ldr”;緩沖區(qū)f_data的首址指向filename.ldr的首行,f_data的
9、每個元素都對應文件的一行。因為創(chuàng)建的引導程序文件每行數(shù)據(jù)都是16位的,包含兩個8位字節(jié),所以必需將其分解為兩部分后分離寫入flash。軟件的流程3所示。4 測試實現(xiàn)下面是將文件寫入flash的完整程序,在實際中已經調試勝利。通過該程序將一段閃燈代碼blink.ldr寫入flash中,復位后,被寫入的代碼自動加載到dsp中執(zhí)行。在編程過程中,adsp-21065l的flag10引腳輸出周期為40ms的方波;編程結束后,flag8輸出周期為40ms的方波。/宏定義與變量初始化define f_size 1572 /文件的行數(shù)define mem_offset 0x020000 /flash的地址偏
10、移define u_mem1_a 0x025 /指令字寫入地址1define u_mem2_a 0x022aaa /指令字寫入地址2includedef21065l.h.section/dm seg_fout;.var f_data=”blink,ldr” /待寫入的代碼文件.section/dm seg_dmda;.var d_byte;.var addr;.var line_num=0; /當前扇區(qū)已寫入行數(shù).var byte_size; /待寫入代碼字節(jié)數(shù)-1.var counter=0; /延時的計數(shù)值/復位中斷.section/pm pm_rsti;nop;jump start;no
11、p;/以下是主程序.section/pm seg_pmco;start:nop;bit clr mode1 0x00001000; /屏蔽全部中斷irptl=0x0; /清除未響應中斷r0=0x0050; /設置flag10和dm(ioctl)=r0; /flag8為輸出引腳program:i0=f_data;r2=0x0; /已經寫入的字節(jié)數(shù)-1r3=f_size;r4=r3+r3;r4=r4-1;dm(byte_size)=r4;r6=dm(line_num);r7=0;comp(r6,r7); /推斷是否為新的扇區(qū)if ne jump sect_load; /不是,則挺直向flash緩沖
12、區(qū)寫入字節(jié)sect_ulock: /是,首先寫指令字序列r12=0xaa;dm(u_mem1_a)=r12;r12=0x55;dm(u_mem2_a)=r12;r12=0xa0;dm(u_mem1_a)=r12;sect_load:r0=dm(i0,1); /讀取一行數(shù)據(jù)r1=fext r0 by 0:8; /獲得低字節(jié)dm(d_byte)=r1;dm(addr)=r2;call load_byte; /向flash寫入低字節(jié)r2=r2+1;r1=fext r0 by 8:8; /獲得高字節(jié)dm(d_byte)=r1;dm(addr)=r2;call loade_byte; /向flash寫入
13、高字節(jié)r8=dm(byte_size);comp(r2,r8); /推斷文件是否所有寫完if eq jump done; /是,則結束r6=dm(line_num); /否,推斷扇區(qū)是否結束r6=r6+1;dm(line_num)=r6;r7=128;comp(r6,r7);if lt jump prog_loop; 否,繼續(xù)向該扇區(qū)寫數(shù)據(jù)sect_done: /是,等待20msnop;call wait_dq7;ustat2=dm(iostat);bit tg1 ustat2 flg10o;dm(iostat)=ustat2; /翻轉flag10r6=0;dm(line_num)=r6;r2=r2+1;jump sect_ulock; /開頭向新扇區(qū)寫數(shù)據(jù)prog_loop:r2=r2+1;jump sect_load;done: /編程結束nop;call wait_dq7;ustat2=dm(iostat);bit tg1 ustat2 flg8o; /翻轉flag8dm(iostat)=ustat2;jump done;load_byte: /寫字節(jié)子程序i4=dm(addr);m4=mem_offset;r12=dm(d_byte);dm(m4,i4)=r12;rts;nopwait_dq7: /20ms延時子程序r0=dm(co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論