1000部丰满熟女富婆视频,托着奶头喂男人吃奶,厨房挺进朋友人妻,成 人 免费 黄 色 网站无毒下载

首頁 > 文章中心 > 正文

網絡接口實現DSP片外Flash線系統編程

前言:本站為你精心整理了網絡接口實現DSP片外Flash線系統編程范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

網絡接口實現DSP片外Flash線系統編程

摘要:文章針對傳統設計采用RS232作為數據傳輸手段而造成的速度過慢的問題,設計了一種通過網絡接口,使用一種特殊的UDP包對BF531片外Flash在線系統編程的方案,并給出了在系統編程的具體步驟和實現結果。實踐證明該方法無須實現TCP/IP協議棧,速度快,體積很小,很好地解決了以dsp為核心的應用系統軟件的維護和升級問題。

關鍵詞:BF531;flash;網絡接口;ISP;UDP

在以DSP為核心的現代電子設備中,通常將可執行代碼存放在Flash中,設備啟動的時候,DSP通過引導加載機制將Flash中的代碼轉移到高速存儲器中運行。Flash在系統編程(ISP)是指以在不改變硬件環境的條件下,在線將程序代碼(固件)下載到Flash中,從而方便地實現系統軟件的調試和升級。BF531是ADI公司生產的一款高性能DSP。ADI公司在其軟件VDSP下提供了通用的在系統編程工具“FlashProgrammer”,但是該工具需要使用JTAG接口,并且需要專用仿真器。另外一種方法是采用RS232作為通信接口,通過一段引導程序來進行Flash的在系統編程,缺點是速度很慢。由于目前大多數電子儀器都已經具有網絡接口,本文設計了一種通過網絡接口進行Flash在系統編程的方案。采用的網絡接口芯片為常見的DM9000a,由于網絡通信中常見的TCP/IP協議棧過于龐大,本文中未使用協議棧,而是設計了一種簡單的實現方法:直接構建含特殊標記頭的UDP廣播包來代替。

一、BF531的Flash啟動加載過程

LDR文件是最終燒寫到FLASH上面的程序文件,可以有多種格式。這里,我們生成的LDR文件是二進制格式,LDR文件分為多個塊,每個塊都分為一個“BLOCK”和一個10字節的“HEAD”。在“HEAD”中,頭四個字節表示塊應加載在BF531地址空間的地址,后四個字節表示“BLOCK”的大小,最后兩個字節表示塊的屬性。

BF531芯片本身已經提供了4種啟動代碼加載方式,通過啟動模式引腳BMODE來選擇,本設計中將該引腳設置為最常見的“01”模式,即“從8/16位的FLASH/PROM啟動”模式。

BF531內部有一個BOOTROM區,用以存放“引導核”,BF531啟動的時候會先運行該引導核,自動將從Flash起始地址0x2000000開始的LDR文件分塊按照用戶的要求分別加載到片內RAM和SDRAM中。加載完畢后,引導核會修改程序指針PC,使之為片內RAM的啟動地址0xFFA08000,啟動用戶自己的應用程序。

二、總體設計

需要設計一個Bootloader程序和一個與之配合的上位機程序,并將Bootloader燒在地址0x20000000處。DSP啟動后,“引導核”會自動啟動該程序,Bootloader程序延時判斷上位機是否發出了連接命令。如果有,進入更新固件模式,可以進行Flash的燒寫;否則,則進入正常啟動模式,用以加載并執行用戶程序。

(一)Bootloader與用戶程序

根據上面所述,啟動的順序是:“引導核”自動啟動Bootloader,運行完成后再加載運行用戶程序。所以Bootloader程序應該獨立于用戶程序,因為Bootloader一般不需要更新,而且,在系統編程出現意外的時候,不會導致Bootloader被破壞。由于Bootloader需要在啟動的時候就運行,所以應該事先通過JTAG使用仿真器將其燒寫到地址0x20000000處。而對于常用的NorFlash,編程的時候會先把相應的整個扇區擦除,所以為了方便編程,應該使用戶程序的LDR文件的起始燒寫地址固定,并且為一個扇區的起始地址,本設計中固定為0x20004000。

(二)網絡通信協議設計

嵌入式儀器一般資源都比較少,所以Bootloader體積應該設計的盡量的小。最常用的網絡通信協議為TCP/IP協議棧,雖然功能強大,但是體積過于龐大。考慮Bootloader只需要網絡接口完成最簡單的通訊功能,而且通信量很小,本文設計了一種簡單的方法:直接構建含特殊標記頭的UDP廣播包。

詳細的實現方法:上位機端發送數據的時候,在普通的UDP包的“payload”區加上一個自定義字符串的“標記頭”,并定義為廣播包,發送。Bootloader端接受時采用“雜散模式”接受,直接分析網絡芯片DM9000A接受到的數據,如果發現是UDP包并且具有自定義字符串的“標記頭”,則接受,否則,拋棄。相反,Bootloader端發送數據的時候,按照UDP包標準格式直接手動填充一個完整的UDP廣播包,并加上“標記頭”,上位機接受的時候,按正常接收方式,即可根據“標記頭”判斷是否是Bootloader傳出來的包。

三、Bootloader設計

如圖1所示,Bootloader功能上可以分為4個模塊,主控制模塊,數據通信訊模塊,Flash操作模塊,用戶程序加載啟動模塊。Bootloader運行的時候,先向上位機發出握手請求,等待1秒,如果有握手回應信號則證明有上位機相連,Bootloader進入命令等待狀態,如果沒有,則直接進入用戶程序加載啟動模塊。當一個完整的上位機命令被接收到后,Bootloader解析命令,并執行相應的功能。執行完相應的功能后會再發出握手請求(除非命令為退出命令),等待上位機握手,周而復始。

(一)主控制模塊

實現功能:實現Bootloader與上位機的握手,解析并執行上位機發出的命令,并總體控制各個模塊。

(二)數據通信模塊

實現功能:控制網絡控制芯片DM9000A進行數據輸入和輸出。主要需要實現數據接收功能,數據發送功能,DM9000A芯片的初始化和復位功能。本設計中采用了上文中已經敘述的特殊的網絡通信方式。設計數據發送函數時,先定義一個UDP的標準廣播包的模版,在UDP包的“payload”區開始的地方添加好自定義的“標記頭”,發送的時候直接在該模版的“payload”區后上加入準備傳送的數據,通知DM9000A發送即可,為了避免計算校驗位造成速度減慢,本設計中將UDP頭的校驗位設置為0,即不校驗。設計數據接收函數時,只需要先讀取“payload”的頭幾個字節,判斷是否為定義的“標記頭”,如果是,則去掉該“標記頭”和UDP包的頭,獲得真正需要的數據,如果不是,則拋棄。

(三)Flash操作模塊

實現功能:實現一些常用的操作Flash功能接口函數,供主控制模塊使用。主要需要實現的功能函數有:Flash寫函數,Flash讀函數,Flash塊擦除函數,Flash解鎖函數,Flash校驗函數。

普通的norFlash編程前需要將相應的扇區解鎖并擦除,所以如果該扇區有別的數據,會被一并擦除。為了能自由地編程任意地址的數據,本設計中特別定義了一個1個塊大小的緩沖區,暫存原Flash塊里面的數據,編程的時候將更新數據和原數據進行合并再后在一起編程進入Flash,解決了該問題。

(四)用戶程序加載啟動模塊

實現功能:完成類似BOOTROM區“引導核”的工作,即加載起始地址為0x20004000的用戶程序LDR文件到片內RAM或SDRAM,然后清空所有相關堆棧和寄存器,最后修改PC指針為0xFFA08000,開始執行用戶程序,所以該程序應該使用匯編編寫。ADI在VDSP下提供“引導核”的示例程序,可以參考該程序設計本模塊。需要注意的是本模塊絕對不能被加載的用戶程序覆蓋掉,所以不能把這段程序放到片內RAM,而應該把這段程序放在SDRAM的最后,保護起來。

四、上位機設計

本設計中上位機在WindowsXP操作系統下采用NI公司的Labwindows/CVI8.0開發設計,如圖2所示。需要實現通過UDP包與Bootloader的通信和程控面板的顯示。由于CVI8.0自身沒有帶UDP相關驅動,需要加入Windows的API庫wsock32.lib進行開發。調用該庫進行SOCKET編程,設計好UDP的讀、寫、打開、關閉函數。在設計發送/接收函數的時候應該加上或去掉定義的“標記頭”。五、實現結果

本設計已經在使用DSP芯片BF531和網絡控制芯片DM9000A的目標板上成功實現。完整的實現步驟如下:先將Bootloader生成LDR文件,再將其通過仿真器燒寫到0x20000000,使用交叉雙絞線將目標板與電腦相連接,在電腦上打開上位機,給目標板上電,此時上位機與目標板進行握手,如果成功,面板會顯示“已經成功連接目標板”,選擇需要燒寫的用戶程序的LDR文件和燒寫地址,點擊開始燒寫即可。

六、結語

本文提出了一種通過特殊的UDP廣播包進行Flash的在系統編程的方法,并成功實現。該方法拋棄了TCP/IP協議棧,因而大大的減小了自身的體積,而且采用網絡接口,使系統編程的速度得到了極大的提升。很好地解決了目標系統的系統程序升級和調試的問題。

參考文獻

[1]AnalogDevices,Inc.ADSP-BF533BlackfinProcessorHardwareReference,2007.

[2]AnalogDevices,Inc.VisualDSP++4.5LoaderandUtilitiesManual,2006.

[3]AnalogDevices,Inc.ADSP-BF533BlackfinBootingProcess,2006.

[4]Lvzhiyong.Auto-loadandauto-updatetheDSO’ssoftware,2007。

主站蜘蛛池模板: 郁南县| 南城县| 浑源县| 霍州市| 溧水县| 肇州县| 肃北| 浙江省| 云龙县| 上杭县| 宁夏| 新龙县| 扶绥县| 临沭县| 延庆县| 曲阜市| 玉树县| 仲巴县| 韶山市| 遂平县| 黄陵县| 望都县| 鄂尔多斯市| 樟树市| 枝江市| 清丰县| 广南县| 陆河县| 宜良县| 温宿县| 玉林市| 博爱县| 晋城| 邹城市| 抚松县| 吐鲁番市| 白河县| 太仓市| 甘德县| 利津县| 高密市|