實(shí)驗(yàn)操作步驟說明siga-s16開發(fā)板之bootloader_第1頁
實(shí)驗(yàn)操作步驟說明siga-s16開發(fā)板之bootloader_第2頁
實(shí)驗(yàn)操作步驟說明siga-s16開發(fā)板之bootloader_第3頁
實(shí)驗(yàn)操作步驟說明siga-s16開發(fā)板之bootloader_第4頁
實(shí)驗(yàn)操作步驟說明siga-s16開發(fā)板之bootloader_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Siga-S16 FPGA 開發(fā)板之 Bootloader 實(shí)驗(yàn)Rev. 1.00Rev1.001版本Rev1.002版本時(shí)間作者描述Rev0.012012-7-31LuoVer通過本篇,您可以了解如何編寫B(tài)ootloader程序,了解PROM文件的生成及FPGA的SPI FLASH復(fù)用配置的方法。本文檔分為以下幾個(gè)部分:一、Bootloader 的原理二、Bootloader 引導(dǎo)程序的設(shè)計(jì)三、SPI FLASH 的 PROM 文件生成和Rev1.003一、Bootloader的原理先來說明一下Bootloader。 簡(jiǎn)單地說,BootLoader就是在應(yīng)用程序運(yùn)行之前運(yùn)行的一段小程序。系統(tǒng)

2、在上電或復(fù)位時(shí)通常都從地址0 x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。通過這段小程序,可以初始化硬件設(shè)備,建立內(nèi)存空間的圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為調(diào)用應(yīng)用程序準(zhǔn)備好正確的環(huán)境,并同時(shí)提供基本輸入、輸出系統(tǒng)功能和程序調(diào)試功能。在Siga-S16的FPGA開發(fā)板上,SPI Flash既用來保存硬件配置文件及Bootloader引導(dǎo)程序還需要用來保存用戶的應(yīng)用程序。在加載階段,F(xiàn)PGA自動(dòng)從SPI Flash中硬件配置bit文件及Bootloader程序進(jìn)行配置到片內(nèi)BRAM中運(yùn)行。當(dāng)完成加載后,F(xiàn)PGA邏輯啟動(dòng),通過運(yùn)行B

3、ootloader程序SPI Flash中的用戶應(yīng)用程序,并寫到外部DDR2的相應(yīng)位置,最后Bootloader程序切換指令指針到應(yīng)用程序開始運(yùn)行的指定位置,在外部的DDR2中開始執(zhí)行應(yīng)用程序。下圖給出了本系統(tǒng)中復(fù)用SPI Flash系統(tǒng)結(jié)構(gòu)圖,Bootloader程序?qū)崿F(xiàn)從SPI Flash中用戶應(yīng)用程序到DDR2中,然后在DDR2中運(yùn)行。Rev1.004二、Bootloader引導(dǎo)程序的設(shè)計(jì)工程代碼編寫之前要求對(duì)硬件器件有所了解,主要需要了解FPGA所需要的配置文件空間,還有Flash到0 x結(jié)構(gòu)。在本Siga-S16開發(fā)板中,SPI FF。其中Spartan6的配置文件大小為3FLASH

4、的容量為1Mbit,空間為從0 x00000714 312位,所以配置文件占用SPI FLASH的存空間用來存放應(yīng)用程序代碼。為了簡(jiǎn)單起見,儲(chǔ)空間為從0 x00000到0 x715a1。剩余的FLASH在本實(shí)驗(yàn)中可以把應(yīng)用程序的代碼放置在0 x80000到0 xFF的SPI FLASH空間里。因?yàn)樵诒緦?shí)驗(yàn)里bootloader的主要功能是從SPI FLASH中拷貝應(yīng)用程序的代碼到DDR2 SDRAM中,再將地址指針指向內(nèi)存的應(yīng)用程序址,使其從此處開始運(yùn)行程序。應(yīng)用程序是以SREC文件首先需要了解一下SREC文件格式。格式在SPI FLASH中的,在這里SREC文件格式SREC格式是一種FLAS

5、H格式的編程文件,全稱Srecord,SREC格式是Motorola公司制定的一種燒寫格式標(biāo)準(zhǔn)。SREC文件是描述地址與數(shù)據(jù)的文件,以下給出了SREC文件的具體格式.一個(gè)完整的MOTOROLA S-Record格式數(shù)據(jù)包含如下區(qū)域: 各字段的意思分別如下:標(biāo)示的類型,該字段占據(jù)1-byte。它可以有如下數(shù)值:“S0”,“S1”,“S2”,“S3”,“S5”,“S7”,“S8”,“S9”。描述信息“S0”-“S1”,“S2”,“S3” -的數(shù)據(jù)。這三者的區(qū)別在于地址(address)的長度不同,S1為2-byte,S2為3-byte,以及S3為4-byte。 “S5”- 包含了“S1”, “S2

6、”, “S3”的信息?!癝7”,“S8”,“S9” - 確定程序的開始地址。這三者的區(qū)別也在于(address)的長度不同,S9為2-byte,S8為3-byte,以及S7為4-byte。:標(biāo)示了數(shù)據(jù)的長度,確切地說,是 , 和這三個(gè)字段的byte的個(gè)數(shù)。該字段占據(jù)1-byte。:標(biāo)示了數(shù)據(jù)寫入的起始地址。該字段的長度取決于的取值。:標(biāo)示了的數(shù)據(jù)。該字段占據(jù)的byte個(gè)數(shù)可以這樣計(jì)算:的值字段的長度(取值為2、3、4) - 1(字段的長度)。:標(biāo)示校驗(yàn)位,占據(jù)1-byte。該數(shù)據(jù)可以由和的數(shù)據(jù)累加然后每 bit取反獲得。以一條數(shù)據(jù)S30A格式作為例子:CFS3是的格式()。Rev1.0050A

7、是長度(),為十六進(jìn)制,標(biāo)識(shí)有10個(gè)byte。因?yàn)閮蓚€(gè)十六進(jìn)制才是1-byte,所以 CF的長度為10而不是20.換句話說,這數(shù)據(jù)列應(yīng)該如此表示:80 10 00 9303 00 00 00 00 CF。因?yàn)閠ype是S3,所以地址()占4-byte,因此需要寫入的地址為:0 x80100093。既然已經(jīng)知道了地址,那么數(shù)據(jù)()很顯然就是0 x0300000000了。最后的1-byte就是校驗(yàn)位()。例子數(shù)值由此得來:0 xFF - (0 x0A + 0 x80 + 0 x10 + 0 x00 + 0 x93 + 0 x03 + 0 x00 + 0 x00 + 0 x00 + 0 x00) &

8、 0 xFF)Bootloader程序編寫在SDK的開發(fā)環(huán)境里在這里為Bootloader新建一個(gè)工程,操作方式如下圖所示,菜單FileNewXilinx C Project在工程向?qū)Ы缑?,紅圈處輸入項(xiàng)目名稱,我將其修改為 Bootloader 工程模版。bootloader,紅圈 2 處選擇 SRECRev1.006選擇an existing Board Support Package,如下圖的紅色圈圈部分。Rev1.007完成工程向?qū)?。回到開發(fā)環(huán)境后在工程窗口會(huì)出現(xiàn)bootloader的工程目錄:因?yàn)橐帉懙氖荢PI FLASH的bootloader引導(dǎo)程序,跟用SDK的bootloade

9、r模版生成的有些不同。所以需要在工程里添加SPI FLASH相關(guān)的.c程序和.h頭文件,并刪除一些不需要的程序文件。添加和刪除后的程序文件如下:下面對(duì)這些程序作簡(jiǎn)單的說明;三個(gè).c的程序文件:Bootloader.cmand.c Srec.c-為bootloader主程序。 SPI FLASH的讀驅(qū)動(dòng)程序。SREC文件格式的程序。三個(gè).h的頭文件:mand.h Srec.h Xps_spi_drives.h-定義mand.c中使用的宏。定義bootloader.c 和srec.c中使用的宏和類型。定義SPI接口的函數(shù)和宏。一個(gè).ld的連接文件: Lscript.ld-此文件不用修改,模版已經(jīng)定

10、義bootloader的代碼及數(shù)據(jù)都在FPGA的BRAM中運(yùn)行。Rev1.008接下來,來編寫修改程序,在每個(gè)程序的代碼中我已經(jīng)添加了中文說明,大家很容易了解每部分程序的功能。我在這里不再對(duì)代碼作詳細(xì)介紹。先來修改bootloader.c文件,此程序?qū)崿F(xiàn)從SPI FLASH中拷貝應(yīng)用程序代碼到DDR2 SDRAM中,再開始運(yùn)行應(yīng)用程序。修改后的程序如下:Rev1.009Rev1.0010接下去編寫mand.c文件,在這程序中主要實(shí)現(xiàn)SPI接口的初始化及FLASH的讀操作。編寫好后的程序如下:Rev1.0011接下去修改srec.c文件,此程序?qū)腟PI FLASH讀出的srec格式的一行數(shù)據(jù)進(jìn)

11、行到地址,數(shù)據(jù),長度等信息。修改好后的程序如下:,得Rev1.0012Rev1.0013Rev1.0014再來編寫下:mands.h頭文件,此文件中定義了SPI FLASH的相關(guān)信息。編寫后的文件如Rev1.0015再修改srec.h頭文件,此頭文件中定義了srec.c和bootloader中所需要用到的常量和數(shù)據(jù)類型的相關(guān)信息。修改后的文件如下:Rev1.0016最后編寫xps_spi_drives.h頭文件,此頭文件中定義了對(duì)SPI接口的操作函數(shù)和一些常量定義。修改后的文件如下:Rev1.0017到這里所有的程序都編寫完成了,先保存工程再編譯一下。沒有問題就可以進(jìn)入下一步FLASH的配置和

12、程序的調(diào)試了。三、SPI FLASH的PROM文件生成和在這一節(jié),需要把FPGA的硬件比特流配置文件和應(yīng)用程序的代碼合并成一個(gè)SPI Flash的文件。在這里需要做以下幾個(gè)步驟來實(shí)現(xiàn):1.2.把應(yīng)用程序轉(zhuǎn)換為srec代碼格式文件。把bootloader程序初始化到Microblaze系統(tǒng)的BRAM中,再生成FPGA最終的比特流配置文件 download.bit。3.4.合并這兩個(gè)文件(download.bit和應(yīng)用程序的srec文件)為一個(gè)SPI FLASH MCS文件到SPI FLASH中。的MCS文件。下面我對(duì)上面的這四個(gè)步驟逐一做一個(gè)講解:把應(yīng)用程序轉(zhuǎn)換為srec代碼格式Rev1.001

13、8這里選用在“Siga-S16 開發(fā)板之LED實(shí)驗(yàn)”一文中的LED測(cè)試程序o_led作為本次實(shí)驗(yàn)的應(yīng)用程序。把LED測(cè)試程序轉(zhuǎn)換成Srec格式的方法如下:在SDK開發(fā)環(huán)境選擇菜單Xilinx Tools - Program Flash在彈出的Program Flash Memory框的ImageFile一欄中選擇o_ledDebug目錄下的o_led.elf文件,再選中”ConverFtobootloadableSRECformatandprogram”。在Console窗口會(huì)顯示生成srec文件的信息及其放置的目錄。Rev1.0019把bootloader程序初始化到Microblaze系統(tǒng)

14、的BRAM中,再生成FPGA最終的比特流配置文件。在EDK開發(fā)環(huán)境選擇菜單Project - Selecf File.。在彈出的Selecf file框的Choose Implemenion ElfFile一欄中選擇bootloaderDebug目錄下的bootloader.elf文件, 再選OK完成。這時(shí)bootloader程序已經(jīng)加到BRAM中,需要在EDK重新生成硬件比特流文件。選擇EDK菜單的Device Cinfiguration - Update Bitstream 開始生成download.bit后的信息在Console窗口顯示如下:文件。生成完成Rev1.0020其中這個(gè)生成的

15、download.bit文件是存放在EDK工作目錄的implemenion的文件夾里。合并這兩個(gè)文件(硬件比特流文件和應(yīng)用程序的srec文件)為一個(gè)SPI FLASH的文件。打開Xilinx ISE界面:DesignSuite13.1ISEDesignToolsTools下的iMPACT,打開后顯示如下選擇Preparea PROMFile這一項(xiàng)后點(diǎn)擊OK。再在下圖彈出的PROMFile Formatter界面中的三個(gè)Step依次選擇如下:圖中的為輸入將要生成PROM的文件名,我這里已經(jīng)把它改名為Boot_Led_Test。上圖的處Rev1.0021要選Yes,因?yàn)槌擞布渲梦募猓€要添加

16、LED測(cè)試的應(yīng)用程序代碼。點(diǎn)擊OK后彈出AddDevice文件的消息窗口,直接點(diǎn)擊OK。在之后彈出的Add “打開”按鈕。Device文件的窗口選擇前面在EDK中生成的download.bit文件,再點(diǎn)擊在之后彈出的AddDevice文件的消息窗口,直接No。在之后彈出的AddData文件的消息窗口,選擇Yes。Rev1.0022在之后彈出的Revi窗口輸入需要放置Data文件的起始地址,因?yàn)橛布渲帽忍亓魑募加?0 x715A0,所以把應(yīng)用程序的代碼放置在起始地址為0 x80000的地方。在之后彈出的Add Data文件的窗口選擇擊“打開”按鈕。前面在SDK中生成的應(yīng)用程序的srec格式文

17、件,點(diǎn)在之后彈出的Add Data文件的消息窗口,選擇No。程序會(huì)彈出FLASH ROM的地址分配列表,這里不需要修改,點(diǎn)擊OK完成。Rev1.0023ISE iMPACT界面顯示如下SPI FLASH配置完成后的空間分配示意圖。因?yàn)閛_led的應(yīng)用程序很小,它只占用了很小的FLASH空間。雙擊ISE iMPACT左邊iMPACT Proses界面的“Generate File.”,生成MCS文件。MCS文件生成成功后在界面會(huì)顯示“Generate Succeeded” 的信息。Rev1.0024編程MCS文件到SPI FLASH中對(duì)SPI FLASH進(jìn)行編程時(shí),首先要把開發(fā)板上的撥碼開關(guān)設(shè)置

18、為M0:ON, M1:Off,MASTER SPI MODE。如果你已經(jīng)連接了器。可以使用 ISE iMPACT 來檢測(cè)一下 JTAG 的連接,雙擊 iMPACTFlows 界面下的 Boundary Scan 選項(xiàng):再在 Boundary Scan 界面上右擊鼠標(biāo),選取 InitializeChain 選項(xiàng):如果出現(xiàn)以下的界面說明已經(jīng)檢測(cè)到 JTAG 鏈的 FPGA。選擇框的 No 按鈕:Rev1.0025雙擊下圖紅圈處的 SPI/BPI 接口,添加 SPI FLASH 的編程文件,在彈出的 Add PROM File 窗口選中剛剛生成的 Boot_Led_Test.mcs 文件,.然后點(diǎn)擊打開:Rev1.0026在彈出的 Selectached SPI/BPI 界面中選擇正確的 SPIFLASH 型號(hào) M25P80,然后點(diǎn)擊 OK.現(xiàn)在界面上 FPGA 的 SPI 接口上會(huì)出現(xiàn) FLASH 的圖示:只要選中 FLASH 圖標(biāo),然后右擊選擇 ProgramRev1.0027在接下來彈出的 Device FLASH 進(jìn)行編程了。ProgrammingP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論