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