基于SPI復(fù)用配置的FPGA編程方法
1.2 SPI Flash存儲(chǔ)器的復(fù)用
復(fù)用SPI Flash是指既用它來(lái)保存硬件配置文件、Bootloader引導(dǎo)程序還用來(lái)保存用戶應(yīng)用程序。在加載階段,FPGA自動(dòng)從SPI Flash中讀取硬件配置bit文件及Bootloader程序進(jìn)行配置到片內(nèi)BRAM中運(yùn)行。當(dāng)完成加載后,FPGA內(nèi)部邏輯啟動(dòng),通過(guò)運(yùn)行的Bootloader程序讀取SPI Flash中的用戶應(yīng)用程序,并寫(xiě)到外部SDRAM的相應(yīng)位置,最后Bootloader程序切換指令指針到SDRAM指定位置,在外部的SDRAM中開(kāi)始執(zhí)行應(yīng)用程序。
圖3給出了本系統(tǒng)中復(fù)用SPI Flash嵌入式系統(tǒng)結(jié)構(gòu)圖,用EDK中的opb_sdram連接外部SDRAM,用opb_spi連接SPI Flash(AT45DB161D),通過(guò)Bootloader軟件程序?qū)崿F(xiàn)從SPI Flash中復(fù)制用戶應(yīng)用程序到SDRAM中,然后在SDRAM中運(yùn)行。但是,Boot-loader在系統(tǒng)上電時(shí)會(huì)通過(guò)FP-GA芯片的配置引腳首先加載到BRAM中運(yùn)行,這樣就可以實(shí)現(xiàn)上電自動(dòng)加載啟動(dòng)程序。
2 Bootloader引導(dǎo)程序的設(shè)計(jì)
在工程代碼編寫(xiě)之前要求對(duì)硬件器件有所了解,主要需要了解FPGA所需要的配置文件空間,還有Flash存儲(chǔ)結(jié)構(gòu)。例如:XC3S500E配置文件空間為2 270 208位,所以要根據(jù)它計(jì)算存儲(chǔ)應(yīng)用程序的基地址。AT45DB161D是串行接口的閃存芯片,它包含有17 301 504位,被組織為4 096頁(yè),每頁(yè)512/528字節(jié)。除了主存儲(chǔ)器,AT45DB161D還包括2個(gè)SRAM數(shù)據(jù)緩沖區(qū),每個(gè)緩沖區(qū)512/528字節(jié)。在主存儲(chǔ)器正在編程時(shí),緩沖區(qū)是允許接收數(shù)據(jù)的,并且支持?jǐn)?shù)據(jù)流式寫(xiě)入。(此處為528字節(jié)/頁(yè))
AT45DB161D的存儲(chǔ)器陣列分為3個(gè)級(jí)別的粒度,分別為扇區(qū)、塊與頁(yè)。圖4對(duì)各個(gè)級(jí)別進(jìn)行了分析,詳細(xì)說(shuō)明了每個(gè)扇區(qū)與塊的頁(yè)數(shù)。所有的編程操作都是針對(duì)頁(yè)的。擦除操作可以作用于芯片、扇區(qū)、塊或頁(yè)。
最后利用定義的空函數(shù)int(*boot_app_jump) (void);”將地址指針指向內(nèi)存的應(yīng)用程序基地址,使其從此處開(kāi)始運(yùn)行程序。
//將目的地址賦給跳轉(zhuǎn)函數(shù)
boot_app_jump=(int(*)(void))DESTINATION_AD-DR;
//運(yùn)行跳轉(zhuǎn)函數(shù),使其在該函數(shù)地址開(kāi)始運(yùn)行程序boot_app_jump();
評(píng)論