国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

單片機實現對CF卡的讀寫

發布時間:2010-11-1 21:54    發布者:eetech
關鍵詞: CF卡 , 單片機 , 讀寫
由于CF卡(Compact Flash Card)具有容量大、體積小、高性能、攜帶方便等優點,而且讀寫速度快,可與多種電腦操作系統平臺兼容,因此在數據采集系統中的數據記錄或與PC機之間的數據轉存多采用CF卡。為了在PC機中能方便地進行數據處理,在下位機端必須采用一種標準的格式組織數據,即將數據按照Windows標準文件格式寫入,在PC機端通過讀卡器將寫入CF的內容以標準文件形式讀出。Windows標準文件格式有FAT、FAT32和NTFS。考慮到廣泛使用的Windows 98系統的CF卡的容量等因素,通常采用FAT(File Allocation Table)文件系統。單片機系統對CF卡的讀寫,就是從底層對它進行直接操作,包括尋址、創建文件和讀寫等。


  
1 CF卡簡介  

CF卡內集成了控制器、Flash Memory陣列和讀寫緩沖區,如圖1所示。內置的智能控制器,使外圍電路設計大大簡化,而且完全符合PC機內存卡的國際聯合會PCMCIA(Personal Computer Memory Card International Association)和ATA(Advanced Technology Attachment)接口規范。實際上,控制器起到了一種協議轉換的作用,即將對Flash Memory的讀寫轉化成了對控制器的訪問,這樣不同的CF卡都可以用單一的機構來讀寫,而不用擔心兼容性問題。CF卡的緩沖區結構,使得外部設備與CF卡通信的同時,CF卡的片內控制器可以對Flash進行讀寫。這種設計可以增加CF卡數據讀寫的可靠性,同時提高數據傳輸速率。  

CF卡支持多種接口訪問模式,有符合PCMCIA規范的Memory Mapped模式、I/O Card模式和符合ATA規范的True IDE模式。上電時,OE(9腳)為低電平,CF卡進入True IDE模式,此時引腳OE也叫ATA SEL;上電時,OE(9腳)為高電平,CF卡進入PCMCIA模式,即Memory Mapped模式或I/O Card模式,此時可通過修改配置選項寄存器進入相應的模式。  

配置選項寄存器格式如下:  

SRESET
LevelREQ
conf5
conf4
conf3
conf2
conf1
conf0
SRESET—軟復位信號;  
Level REQ—中斷模式選擇(電平或邊沿觸發)。  

例如,要加入Memory mapped模式,只需要在上電時保證OE為高電平,因為配置選項寄存器的conf5~conf0位的初始化值為“00000”;而要進入I/O Card模式,除了上電時保證OE為高電平外,還要進一步設置conf5~conf0,如表1所列。但是對于具體型號的CF卡而言,下面三種情況也是被CFA(CF card Association)所允許的:①上電時進入True IDE模式,工作過程中,只要監測到OE變為高,就退出True IDE模式;②允許卡在復位時重新配置;③上電時進入PCMCIA模式,允許過程中,只要監測到OE變為低,就進入True IDE模式。

表1 模式選擇  

conf5
conf4
conf3
conf2
conf1
conf0
模  式

0
0
0
0
0
0
Memory map

0
0
0
0
0
1
I/O Mapped,對應16位系統

0
0
0
0
1
0
I/O,對應1F0h-1F7h/3F6h-3F3h

0
0
0
0
1
1
I/O,對應170h-177h/376h-377h

2 CF卡與51單片機的接口  

CF卡在PC Memory方式與51芯片的接口電路如圖2所示。由于采用CF卡上電后自動進入的Memory模式,而且不存在對特性寄存器的讀寫,故可將REG接高電平。片選信號CE1和CE2組合可選擇數據位寬度,如表2所列。圖2中CE2接VCC,選用的是8位(D7~D0)數據寬度。

表2 數據寬度選擇  
 
8位(D7~D0)
8位(D15~D8)
16位
高  阻

CE1
0
1
0
1

CE2
1
0
0
1

為了實現即插即用的功能,CE卡上提供了兩個用來檢測卡是否存在的引腳(CD1、CD2),由卡內部接地。當主機檢測到與其相連的CD1和CD2兩個引腳同時為低電平時,可判斷出卡與主機相連;否則,卡未與主機相連。  

由于I/O口緊張,RDY/BSY引腳懸空不用,通過查詢狀態寄存器能判斷CF卡是否準備就緒。在實際應用中,由于一次至少要讀寫一個扇區512字節,所以要擴充一塊RAM。我們選用的是62256,容量為32KB,這樣便可以支持大到2GB的CF卡(參見下文),增加了其擴展性。




3 FAT文件系統  

FAT文件系統是基于DOS的文件系統。常說的FAT有12位的FAT12和16位的FAT16,另外就是32位的FAT32。考慮到CF卡的容量有限,宜選用FAT16。這里只對FAT文件系統作一簡單介紹,更詳細的內容請見參考文獻。  

磁盤的尋址方式有兩種:物理尋址C/H/S(柱面/磁頭/扇區)方式和邏輯塊LBA(Logical Block Addressing)尋址方式。二者之間的轉換關系為:  

LBA地址=(柱面號%26;#215;磁頭數+磁頭號)%26;#215;扇區數+扇區數-1  

采用LBA尋址方式,沒有磁頭和磁道的轉換操作,在訪問連續的扇區時,操作速度比物理尋址方式要快,而且也簡化了對磁盤的訪問。  
硬盤的結構布局分為MBR(主引導扇區)和最多4個邏輯分區(含DOS分區或非DOS分區),而在DOS邏輯分區中的磁盤組織如下:  

引導扇區
FAT1
FAT2
根目標區
數據區

引導扇區DBR(DOS Boot Record):位于LBA 0扇區,包含跳轉指令、廠商標識和DOS版本號、BPB(BIOS Parameter Block,BIOS參數塊)、DOS引導程序、結束標志字AA55。其中BPB包含每扇區字節數、每簇扇區數、每個FAT扇區數、扇區總線、根目錄項數等等參數。  

FAT是給每個文件分配磁盤物理空間的表格。FAT16簇數的上限是2 16,即65536個,每簇扇區數的上限是64個,因此其分區空間的上限為2G。FAT1位于邏輯1扇區。FAT簇映射中,0000表示空簇,FFF0~FFF6備用,FFF8~FFFF表示簇鏈結束,FFF7表示壞簇,其余值表示其后續簇的簇號。圖3所示的文件起始簇號為2,結束簇號為4,共占用2、3、4三個簇。  

簇是存儲文件的最小單位,可以包含多個扇區。當文件本身或文件的最后一簇哪怕只有1個字節,也要占去1簇。這樣,當這種文件很多時,空間的浪費是很可觀的。  

文件目錄表FDT(File Directory Table)是操作系統尋找文件的入口,其內容是每一個文件的目錄。FDT中的每一個目錄項由32個字節組成。前8個字節是文件名,不足時用空格填滿。緊跟著的3個字節是文件擴展名,接下來是10個字節的系統保留字。然后是文件產生的時刻和日期占8個字節,再后的2個字節是文件首簇號,最后4個字節是文件大小。FDT的起始扇區可由FAT的大小計算出,而FAT的大小可在DBR中讀出。




4 軟件實現  

按照FAT16方式存儲文件,是一個通用的解決方案。因為這樣可以得到現有的DOS和Windows系統的支持,但是代價是浪費一部分空間,也就是說存儲效率下降了。為了改善這一情況,采用了改進的存儲方法。就是先創建一個空文件,并根據需要為其分配一個大的存儲空間,寫入動作只是從尾部追加數據。這樣就避免了很多小文件的產生,既可以充分利用存儲空間,又可以使地址連續。  

CF卡的讀寫是通過卡內的緩沖區進行的,不支持直接讀寫存儲區域。緩沖區為一個FIFO結構,讀寫順序進行,不支持隨機存取,系統只能一次性地按順序讀完或寫完所有一個或多個扇區。  

設計時使用LBA方式訪問CF卡比較方便,讀寫時只需要先在相應的寄存器寫入LBA地址即可。要設定LBA方式,需訪問驅動器/磁頭寄存器。內存模式下部分寄存器譯碼如表3所列。

表3 內存模式下部分寄存器譯碼  

REG
A10
A9~A4
A3~A0
offset
OE=0
WE=0

1
0
X
0000
0
偶字節讀
側字節寫

1
0
X
0001
1
錯誤寄存器
特性寄存器

1
0
X
0010
2
扇區數
扇區數

1
0
X
0011
3
扇區號(LBA7~0)
扇區號(LBA7~0)

1
0
X
0100
4
低柱面號(LBA15~8)
低柱面號(LBA15~8)

1
0
X
0101
5
高柱面號(LBA23~16
高柱面號(LBA23~16)

1
0
X
0110
6
驅動器/磁頭(LBA27~24)
驅動器/磁頭(LBA27~24)

1
0
X
0111
7
狀態寄存器
命令寄存器
驅動器/磁頭寄存器結構如下:  



1
LBA
1
DRV
HS3
HS2
HS1
HS0

LBA—1為LBA方式,0為C/H/S(柱面/磁頭/扇區)方式;DRV—選擇驅動器0或驅動器1;HS3~HS0—LBA27~24,或為C/H/S方式的磁頭號。  

文件創建過程也就是針對FAT和FDT的讀寫過程。首先在FDT中申請表項,創建文件名稱、屬性、起始簇號、文件大小等,然后修改FAT,分配數據空間,備份FAT。文件存儲就是要先從FDT和FAT中獲得文件的起始簇號和簇號鏈,即LBA地址。然后,將此地址送給寄存器3、4、5、6(表3中的offset3、4、5、6),向扇區數寄存器填寫讀寫數據所占的扇區個數,再向CF卡的命令寄存器寫入操作的命令字,寫操作30H,讀操作20H。當寫入命令或寫入數據后要查詢狀態寄存器的狀態,以判定CF卡是否準備就緒或寫入成功。狀態寄存器結構如下:  

BUSY
RDY
DWF
DSC
DRQ
CORR
0
ERR
各位的值為1時含義如下:  
BUSY—CF卡記,此時不能接受其它命令;  
RDY—卡可以接受命令;  
DWF—寫錯誤;  
DSC—卡準備就緒;  
DRQ—CF卡請求數據傳送;  
CORR—數據錯誤但被修正,不會終止多扇區讀操作;  
ERR—在上一命令以某種錯誤結束,可以在錯誤寄存器中查看錯誤類型。  

下面以向CF卡寫一個扇區數據為例,給出圖4所示流程和C程序代碼。  

bit flag_1,flag_2;  
void cfwr()  
{  
unsigned char status;  
cfwr_comm(0xe0,0x00,0x00,0x6c);  
//寫參數命令,指向邏輯6c扇區  
do{status=PBYTE[0x07]; //讀狀態寄存器  
if((status %26;amp; 0x01)==0x01)  
flag_1=1; //若ERR=1,置出錯標志,做相應處理  
while(status!=0x58);  
cfwr_dat(); //寫入數據  
do{status=PBYTE[0x07]; //讀狀態寄存器  
if((status %26;amp; 0x20)==0x20)  
flag_2=1; //若DWF=1時,置出錯標志,做相應處理  
while(status!=0x50);  
}  
void cfwr_comm(unsigned char lba27,lba23,la15,lba7) //寫參數命令函數  
{PBYTE[0x02] 扇區數為1  
PBYTE[0x03]=lba7;
PBYTE[0x04]=la15;  
PBYTE[0x05]=lba23;  
PBYTE[0x06]=lba27; //設定LBA方式  
PBYTE[0x07]=0x30; //送寫入命令30H  
}  
void cfwr_dat() //寫數據函數  
{unsigned int i,temp;  
unsigned char xdata dat[512]; //dat[]存放一個扇區的數據  
for (i=0;i<512;i++) //連續寫512字節  
{P1=P1 %26;amp; 0xf8; //選中外部RAM  
temp=dat[ i ];  
P1++; //根據實際電路選擇中CF卡  
PBYTE[0x00]=temp;}  
}  



5 結論  

筆者在濕度檢測儀中,根據本文所介紹的方法,用CF卡向計算機轉存數據,可以非常方便地對數據進行維護。
本文地址:http://m.qingdxww.cn/thread-35779-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久热精品视频在线观看99小说 | 正在播放一区 | 国产三级福利 | 欧美在线免费观看视频 | 国产精品亚洲精品青青青 | 精品欧美一区视频在线观看 | 91最新网站| 欧美一区2区三区4区公司二百 | 国产手机看片 | 韩国一区 | 色丁香综合| 国产免费啪视频观看网站 | 欧美视频一区二区三区在线观看 | 日韩欧美一区二区在线观看 | 天天综合五月天 | 正在播放一区二区 | h0930五十路在线播放 | 黄色国产在线观看 | 青青草原国产在线 | 国产人成午夜免费噼啪视频 | 国产日韩精品欧美一区 | 四虎永久影院永久影库 | 97在线成人免费视频观看 | 特级无码a级毛片特黄 | 99国产精品 | 亚洲欧美日韩国产 | 久草免费新视频 | 沈樵数学老师hd在线观看 | 91精品国产一区二区三区左线 | 99影视网 | www日本高清| 日韩福利在线观看 | 亚洲综合网在线 | 一本毛片| 免费一区在线观看 | 久久免费观看视频 | www.haole018| 日韩国产精品欧美一区二区 | 免费观看日韩大尺码观看 | 97视频在线观看免费 | 免费在线观看一区二区 |