CF卡在DM642基便攜式數字視頻系統中的應用
寄存器0用于讀寫數據,寄存器1在讀操作時是錯誤寄存器,存放錯誤信息,寫的時候是特征寄存器。寄存器2用于存放讀寫扇區的數目。寄存器3~6用于存放讀寫扇區的地址。CF卡的扇區尋址有兩種方式:物理尋址方式(Cylinder/Head/Sector,CHS)和邏輯尋址方式(Logical Block Addressing,LBA)。CHS是扇區對應的具體的柱面、磁頭和扇區的地址,LBA的地址則在邏輯上是連續的,兩種尋址方式的轉換關系為:LBA地址=(柱面號×磁頭數+磁頭號)×扇區數+扇區號一1。本文選擇LBA的線性尋址方式。
寄存器7在讀和寫時具有不同的意義。讀操作時是狀態寄存器,存放CF卡的狀態信息,寫的時候是命令寄存器,用于設置命令,完成相應的操作。
CF卡讀寫程序之前要初始化DSP和CF卡,初始化GPIO,將DM642的CE2空間設置為8位異步接口,將/REG配置為高電平,同時設置CF卡為8位數據接口。
在讀寫扇區時,首先要設置好起始扇區的LBA地址和要讀寫的扇區數目,然后再設置命令寄存器,讀取數據設置為20H,寫入數據設置為30H,寫完后讀取狀態寄存器,只有當狀態寄存器為“58H”時才能開始讀寫操作,否則繼續查詢狀態。由于數據接口為8位,這樣對一個扇區就需要讀或寫512次數據寄存器即可。之后還要讀取狀態寄存器看是否為“50H”,判斷CF卡的操作是否完成,若完成,則退出本次操作,否則繼續查詢直至完成。
CF卡寫一個扇區函數部分源碼如下:
讀寫多個扇區的方法與此類似,設置好扇區的數目和相應的讀寫命令即可,一般說來直接設置循環讀寫比調用子程序的運行效率要高,因為它只需要讀寫一次扇區的起始地址即可。
2.3 CF卡的內存空間管理
本系統中CF卡上存儲的是mpeg2格式的視頻數據,雖然視頻的長度不確定,但是扇區地址用LBA尋址的話都是4字節。在本設計中CF卡的存儲空間可如下進行分配:第一個扇區存放視頻的索引信息;從第二個扇區開始存放圖像數據。
其中第一個扇區512個字節存放的數據格式如下:
評論