通信領域采用FPGA芯片嵌入式系統分析方案
2.5 配置文件的讀取和發(fā)送
根據上述SD卡存儲格式的說明,可以對存儲在其中的配置數據進行讀取并發(fā)送出去。在本方案中,數據的讀取和發(fā)送是同時進行的。
在對SD卡進行讀取時,首先需要讀取主引導記錄(MBR),獲得邏輯扇區(qū)的位置,然后根據該位置讀取BIOS參數數據塊(BPB),得到文件分配表(FAT)的位置以及扇區(qū)大 小等參數。在讀取文件分配表之前,需要先讀取根文件夾來獲得文件的起始位置,然后再 通過文件分配表獲得后續(xù)數據的位置。
得到文件的起始簇號之后,在文件分配表中讀取對應該起始簇的字節(jié),獲得文件存儲的下一個簇的簇號,這樣可以連續(xù)的進行讀取。在讀取一個簇后,即將整簇的數據發(fā)送出去。如果發(fā)現文件分配表中某一簇對應的數值是0xFFFF,則說明是文件最后一個簇,這時該簇的數據可以不足一個整簇,需要對其中的數據進行取舍,以保證發(fā)送數據的正確性。
對配置文件讀取和發(fā)送的函數偽碼如下所示。
ReadSD_FAT16(){
讀取物理第0 扇區(qū)內容,即MBR,獲取邏輯0 扇區(qū)的位置;
讀取邏輯0 扇區(qū)的內容,獲取每扇區(qū)字節(jié)數,每簇扇區(qū)數,FAT 表占據的扇區(qū)數等參數;
讀取根文件夾的內容,根據配置文件的文件名獲取其起始簇號和文件長度;
將當前簇設置為起始簇;
While(1){
讀取FAT 中對應當前簇的內容,獲得下一個簇的簇號;
FAT 表中對應當前簇的內容為0xFFFF 時,即說明當前簇是最后一個簇,計算該簇內的有效數據,并進行發(fā)送;
讀取當前簇內容,進行發(fā)送;
當前簇指向下一個簇;
3 結束語
在當前FPGA使用領域日趨廣泛的情況下,對現有的液晶拼接屏幕含有FPGA 的嵌入式產品進行升級更新成為了一項比較繁瑣的工作,特別是在產品數量較多的情況下。本方案提出了采用SD卡存儲配置數據的配置方案,使用了目前嵌入式系統中常見的ARM 微處理器和SD卡,不僅降低了成本,而且利用了現有資源,節(jié)省了電路板布線布局的空間。最重要的是使升級 過程更加簡潔,在進行調試時也可以靈活使用。本文只給出了對Virtex FPGA 進行配置的情況,該方案也可以適用于液晶拼接屏幕Spartan 系列FPGA。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論