基于SRAM的FPGA配置數(shù)據(jù)存儲(chǔ)方式解析方案
2.發(fā)送數(shù)據(jù)的函數(shù)SendData_Byte,發(fā)送1 字節(jié)的數(shù)據(jù)。
SendData(uint8 data){
拉低CCLK;
將 D0~D7 電平設(shè)置為與data 對(duì)應(yīng)的狀態(tài);
拉高 CCLK;
}
3.發(fā)送數(shù)據(jù)的函數(shù)SendData_Sector,發(fā)送SD 卡中1 個(gè)扇區(qū)的數(shù)據(jù)。
void SendData_Sector(uint8 * data){
聲明計(jì)數(shù)器,并將初始值設(shè)為0;
調(diào)用 SendData_Byte 發(fā)送1 個(gè)字節(jié)的數(shù)據(jù),計(jì)數(shù)器加1;
檢查 BUSY 管腳的狀態(tài),等待其變?yōu)榈碗娖?
檢查計(jì)數(shù)器是否到達(dá)規(guī)定的數(shù)據(jù)塊大小,達(dá)到時(shí)函數(shù)返回,未到達(dá)時(shí)繼續(xù)發(fā)送數(shù)據(jù);
}
2.3.3 配置文件的格式
FPGA 支持將配置文件生成為幾種不同的格式,但在本方案中不是所有格式都可以使用 的。一般最常用的格式是.BIN 和.BIT 格式。由于.BIT 格式包含頭部開銷,會(huì)增加額外的處 理過程,因此本方案沒有支持.BIT 格式的數(shù)據(jù),僅推薦使用.BIN 格式。
2.4 文件在SD 卡中的存儲(chǔ)
發(fā)送數(shù)據(jù)前,需要先從SD 卡中讀取配置文件。所有文件在SD 卡中都是按照一定的格式來組織的,本方案默認(rèn)文件采用FAT16 格式進(jìn)行存儲(chǔ)。FAT16 格式下,SD 卡的結(jié)構(gòu)如下圖所示[3]。
主引導(dǎo)記錄中最重要的參數(shù)是邏輯扇區(qū)的起始地址。獲得該參數(shù)后即可以讀取BIOS 參 數(shù)數(shù)據(jù)塊(BPB)。BPB 中存儲(chǔ)了扇區(qū)(Sector)、簇(Cluster)、文件分配表(FAT)的 大小,以及分區(qū)總扇區(qū)數(shù)等參數(shù),是文件進(jìn)行操作時(shí)必不可少的。文件分配表則是指明了文 件存儲(chǔ)的位置,這些位置是以簇為單位的。每個(gè)簇包含的扇區(qū)數(shù)目在BPB 中說明。根文件 夾中存儲(chǔ)了各不同文件的文件名和起始簇以及文件大小等信息。
2.5 配置文件的讀取和發(fā)送
根據(jù)上述SD 卡存儲(chǔ)格式的說明,可以對(duì)存儲(chǔ)在其中的配置數(shù)據(jù)進(jìn)行讀取并發(fā)送出去。在本方案中,數(shù)據(jù)的讀取和發(fā)送是同時(shí)進(jìn)行的。
在對(duì) SD 卡進(jìn)行讀取時(shí),首先需要讀取主引導(dǎo)記錄(MBR),獲得邏輯扇區(qū)的位置,然 后根據(jù)該位置讀取BIOS 參數(shù)數(shù)據(jù)塊(BPB),得到文件分配表(FAT)的位置以及扇區(qū)大 小等參數(shù)。在讀取文件分配表之前,需要先讀取根文件夾來獲得文件的起始位置,然后再 通過文件分配表獲得后續(xù)數(shù)據(jù)的位置。
得到文件的起始簇號(hào)之后,在文件分配表中讀取對(duì)應(yīng)該起始簇的字節(jié),獲得文件存儲(chǔ)的 下一個(gè)簇的簇號(hào),這樣可以連續(xù)的進(jìn)行讀取。在讀取一個(gè)簇后,即將整簇的數(shù)據(jù)發(fā)送出去。 如果發(fā)現(xiàn)文件分配表中某一簇對(duì)應(yīng)的數(shù)值是0xFFFF,則說明是文件最后一個(gè)簇,這時(shí)該簇 的數(shù)據(jù)可以不足一個(gè)整簇,需要對(duì)其中的數(shù)據(jù)進(jìn)行取舍,以保證發(fā)送數(shù)據(jù)的正確性。
對(duì)配置文件讀取和發(fā)送的函數(shù)偽碼如下所示。
評(píng)論