Slave SelectMap 模式下提供時鐘的是外部器件,本方案中的時鐘信號是CCLK 使用 ARM 芯片的通用IO 進行模擬。同時,該模式下數據管腳有8 個,因此在每個CCLK 的上 升沿,FPGA 可以讀入1 個字節的數據。需要注意的是這1 字節的最高位是D0,而不是一 般微處理器默認的D7,在電路板布線和編寫配置程序時應給予相應改變。
配置過程的具體流程如圖2 所示。

?
接收完配置數據后,DONE 管腳會被拉高。但這并不是表示配置過程已經結束,系統仍 需要時鐘來進行后續的上電啟動工作。為保證上電配置過程的正確進行,最好的辦法是將配 置文件中的所有數據寫入FPGA 中之后,然后繼續輸出CCLK 信號,直到DONE 管腳被拉 高。之后,再輸出8 個周期的CCLK,保證配置能正常完成。
根據上述流程,配置程序的主要函數的偽碼如下。
1.初始化函數SelectMAP_Init,在其它函數之前運行。
SelectMAP_Init(){
將ARM 通用IO 設置為對應的SelectMap 管腳信號;
設置 PROGRAM#,CS#和WRITE#管腳為低電平;
延時至少300ns;
設置 PROGRAM#為高電平;
循環檢查INIT#是否變為高電平;
}
2.發送數據的函數SendData_Byte,發送1 字節的數據。
SendData(uint8 data){
拉低CCLK;
將 D0~D7 電平設置為與data 對應的狀態;
拉高 CCLK;
}
3.發送數據的函數SendData_Sector,發送SD 卡中1 個扇區的數據。
void SendData_Sector(uint8 * data){
聲明計數器,并將初始值設為0;
調用 SendData_Byte 發送1 個字節的數據,計數器加1;
檢查 BUSY 管腳的狀態,等待其變為低電平;
檢查計數器是否到達規定的數據塊大小,達到時函數返回,未到達時繼續發送數據;
}
2.3.3 配置文件的格式
FPGA 支持將配置文件生成為幾種不同的格式,但在本方案中不是所有格式都可以使用 的。一般最常用的格式是.BIN 和.BIT 格式。由于.BIT 格式包含頭部開銷,會增加額外的處 理過程,因此本方案沒有支持.BIT 格式的數據,僅推薦使用.BIN 格式。
2.4 文件在SD 卡中的存儲
發送數據前,需要先從SD 卡中讀取配置文件。所有文件在SD 卡中都是按照一定的格式來組織的,本方案默認文件采用FAT16 格式進行存儲。FAT16 格式下,SD 卡的結構如下圖所示[3]。

?
主引導記錄中最重要的參數是邏輯扇區的起始地址。獲得該參數后即可以讀取BIOS 參 數數據塊(BPB)。BPB 中存儲了扇區(Sector)、簇(Cluster)、文件分配表(FAT)的 大小,以及分區總扇區數等參數,是文件進行操作時必不可少的。文件分配表則是指明了文 件存儲的位置,這些位置是以簇為單位的。每個簇包含的扇區數目在BPB 中說明。根文件 夾中存儲了各不同文件的文件名和起始簇以及文件大小等信息。
評論