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