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

單片機(jī)實(shí)現(xiàn)對(duì)CF卡的讀寫(xiě)

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


  
1 CF卡簡(jiǎn)介  

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

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

配置選項(xiàng)寄存器格式如下:  

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

例如,要加入Memory mapped模式,只需要在上電時(shí)保證OE為高電平,因?yàn)榕渲眠x項(xiàng)寄存器的conf5~conf0位的初始化值為“00000”;而要進(jìn)入I/O Card模式,除了上電時(shí)保證OE為高電平外,還要進(jìn)一步設(shè)置conf5~conf0,如表1所列。但是對(duì)于具體型號(hào)的CF卡而言,下面三種情況也是被CFA(CF card Association)所允許的:①上電時(shí)進(jìn)入True IDE模式,工作過(guò)程中,只要監(jiān)測(cè)到OE變?yōu)楦撸屯顺鯰rue IDE模式;②允許卡在復(fù)位時(shí)重新配置;③上電時(shí)進(jìn)入PCMCIA模式,允許過(guò)程中,只要監(jiān)測(cè)到OE變?yōu)榈停瓦M(jìn)入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,對(duì)應(yīng)16位系統(tǒng)

0
0
0
0
1
0
I/O,對(duì)應(yīng)1F0h-1F7h/3F6h-3F3h

0
0
0
0
1
1
I/O,對(duì)應(yīng)170h-177h/376h-377h

2 CF卡與51單片機(jī)的接口  

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

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

CE1
0
1
0
1

CE2
1
0
0
1

為了實(shí)現(xiàn)即插即用的功能,CE卡上提供了兩個(gè)用來(lái)檢測(cè)卡是否存在的引腳(CD1、CD2),由卡內(nèi)部接地。當(dāng)主機(jī)檢測(cè)到與其相連的CD1和CD2兩個(gè)引腳同時(shí)為低電平時(shí),可判斷出卡與主機(jī)相連;否則,卡未與主機(jī)相連。  

由于I/O口緊張,RDY/BSY引腳懸空不用,通過(guò)查詢(xún)狀態(tài)寄存器能判斷CF卡是否準(zhǔn)備就緒。在實(shí)際應(yīng)用中,由于一次至少要讀寫(xiě)一個(gè)扇區(qū)512字節(jié),所以要擴(kuò)充一塊RAM。我們選用的是62256,容量為32KB,這樣便可以支持大到2GB的CF卡(參見(jiàn)下文),增加了其擴(kuò)展性。




3 FAT文件系統(tǒng)  

FAT文件系統(tǒng)是基于DOS的文件系統(tǒng)。常說(shuō)的FAT有12位的FAT12和16位的FAT16,另外就是32位的FAT32。考慮到CF卡的容量有限,宜選用FAT16。這里只對(duì)FAT文件系統(tǒng)作一簡(jiǎn)單介紹,更詳細(xì)的內(nèi)容請(qǐng)見(jiàn)參考文獻(xiàn)。  

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

LBA地址=(柱面號(hào)%26;#215;磁頭數(shù)+磁頭號(hào))%26;#215;扇區(qū)數(shù)+扇區(qū)數(shù)-1  

采用LBA尋址方式,沒(méi)有磁頭和磁道的轉(zhuǎn)換操作,在訪問(wèn)連續(xù)的扇區(qū)時(shí),操作速度比物理尋址方式要快,而且也簡(jiǎn)化了對(duì)磁盤(pán)的訪問(wèn)。  
硬盤(pán)的結(jié)構(gòu)布局分為MBR(主引導(dǎo)扇區(qū))和最多4個(gè)邏輯分區(qū)(含DOS分區(qū)或非DOS分區(qū)),而在DOS邏輯分區(qū)中的磁盤(pán)組織如下:  

引導(dǎo)扇區(qū)
FAT1
FAT2
根目標(biāo)區(qū)
數(shù)據(jù)區(qū)

引導(dǎo)扇區(qū)DBR(DOS Boot Record):位于LBA 0扇區(qū),包含跳轉(zhuǎn)指令、廠商標(biāo)識(shí)和DOS版本號(hào)、BPB(BIOS Parameter Block,BIOS參數(shù)塊)、DOS引導(dǎo)程序、結(jié)束標(biāo)志字AA55。其中BPB包含每扇區(qū)字節(jié)數(shù)、每簇扇區(qū)數(shù)、每個(gè)FAT扇區(qū)數(shù)、扇區(qū)總線(xiàn)、根目錄項(xiàng)數(shù)等等參數(shù)。  

FAT是給每個(gè)文件分配磁盤(pán)物理空間的表格。FAT16簇?cái)?shù)的上限是2 16,即65536個(gè),每簇扇區(qū)數(shù)的上限是64個(gè),因此其分區(qū)空間的上限為2G。FAT1位于邏輯1扇區(qū)。FAT簇映射中,0000表示空簇,F(xiàn)FF0~FFF6備用,F(xiàn)FF8~FFFF表示簇鏈結(jié)束,F(xiàn)FF7表示壞簇,其余值表示其后續(xù)簇的簇號(hào)。圖3所示的文件起始簇號(hào)為2,結(jié)束簇號(hào)為4,共占用2、3、4三個(gè)簇。  

簇是存儲(chǔ)文件的最小單位,可以包含多個(gè)扇區(qū)。當(dāng)文件本身或文件的最后一簇哪怕只有1個(gè)字節(jié),也要占去1簇。這樣,當(dāng)這種文件很多時(shí),空間的浪費(fèi)是很可觀的。  

文件目錄表FDT(File Directory Table)是操作系統(tǒng)尋找文件的入口,其內(nèi)容是每一個(gè)文件的目錄。FDT中的每一個(gè)目錄項(xiàng)由32個(gè)字節(jié)組成。前8個(gè)字節(jié)是文件名,不足時(shí)用空格填滿(mǎn)。緊跟著的3個(gè)字節(jié)是文件擴(kuò)展名,接下來(lái)是10個(gè)字節(jié)的系統(tǒng)保留字。然后是文件產(chǎn)生的時(shí)刻和日期占8個(gè)字節(jié),再后的2個(gè)字節(jié)是文件首簇號(hào),最后4個(gè)字節(jié)是文件大小。FDT的起始扇區(qū)可由FAT的大小計(jì)算出,而FAT的大小可在DBR中讀出。




4 軟件實(shí)現(xiàn)  

按照FAT16方式存儲(chǔ)文件,是一個(gè)通用的解決方案。因?yàn)檫@樣可以得到現(xiàn)有的DOS和Windows系統(tǒng)的支持,但是代價(jià)是浪費(fèi)一部分空間,也就是說(shuō)存儲(chǔ)效率下降了。為了改善這一情況,采用了改進(jìn)的存儲(chǔ)方法。就是先創(chuàng)建一個(gè)空文件,并根據(jù)需要為其分配一個(gè)大的存儲(chǔ)空間,寫(xiě)入動(dòng)作只是從尾部追加數(shù)據(jù)。這樣就避免了很多小文件的產(chǎn)生,既可以充分利用存儲(chǔ)空間,又可以使地址連續(xù)。  

CF卡的讀寫(xiě)是通過(guò)卡內(nèi)的緩沖區(qū)進(jìn)行的,不支持直接讀寫(xiě)存儲(chǔ)區(qū)域。緩沖區(qū)為一個(gè)FIFO結(jié)構(gòu),讀寫(xiě)順序進(jìn)行,不支持隨機(jī)存取,系統(tǒng)只能一次性地按順序讀完或?qū)懲晁幸粋(gè)或多個(gè)扇區(qū)。  

設(shè)計(jì)時(shí)使用LBA方式訪問(wèn)CF卡比較方便,讀寫(xiě)時(shí)只需要先在相應(yīng)的寄存器寫(xiě)入LBA地址即可。要設(shè)定LBA方式,需訪問(wèn)驅(qū)動(dòng)器/磁頭寄存器。內(nèi)存模式下部分寄存器譯碼如表3所列。

表3 內(nèi)存模式下部分寄存器譯碼  

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

1
0
X
0000
0
偶字節(jié)讀
側(cè)字節(jié)寫(xiě)

1
0
X
0001
1
錯(cuò)誤寄存器
特性寄存器

1
0
X
0010
2
扇區(qū)數(shù)
扇區(qū)數(shù)

1
0
X
0011
3
扇區(qū)號(hào)(LBA7~0)
扇區(qū)號(hào)(LBA7~0)

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

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

1
0
X
0110
6
驅(qū)動(dòng)器/磁頭(LBA27~24)
驅(qū)動(dòng)器/磁頭(LBA27~24)

1
0
X
0111
7
狀態(tài)寄存器
命令寄存器
驅(qū)動(dòng)器/磁頭寄存器結(jié)構(gòu)如下:  



1
LBA
1
DRV
HS3
HS2
HS1
HS0

LBA—1為L(zhǎng)BA方式,0為C/H/S(柱面/磁頭/扇區(qū))方式;DRV—選擇驅(qū)動(dòng)器0或驅(qū)動(dòng)器1;HS3~HS0—LBA27~24,或?yàn)镃/H/S方式的磁頭號(hào)。  

文件創(chuàng)建過(guò)程也就是針對(duì)FAT和FDT的讀寫(xiě)過(guò)程。首先在FDT中申請(qǐng)表項(xiàng),創(chuàng)建文件名稱(chēng)、屬性、起始簇號(hào)、文件大小等,然后修改FAT,分配數(shù)據(jù)空間,備份FAT。文件存儲(chǔ)就是要先從FDT和FAT中獲得文件的起始簇號(hào)和簇號(hào)鏈,即LBA地址。然后,將此地址送給寄存器3、4、5、6(表3中的offset3、4、5、6),向扇區(qū)數(shù)寄存器填寫(xiě)讀寫(xiě)數(shù)據(jù)所占的扇區(qū)個(gè)數(shù),再向CF卡的命令寄存器寫(xiě)入操作的命令字,寫(xiě)操作30H,讀操作20H。當(dāng)寫(xiě)入命令或?qū)懭霐?shù)據(jù)后要查詢(xún)狀態(tài)寄存器的狀態(tài),以判定CF卡是否準(zhǔn)備就緒或?qū)懭氤晒Α顟B(tài)寄存器結(jié)構(gòu)如下:  

BUSY
RDY
DWF
DSC
DRQ
CORR
0
ERR
各位的值為1時(shí)含義如下:  
BUSY—CF卡記,此時(shí)不能接受其它命令;  
RDY—卡可以接受命令;  
DWF—寫(xiě)錯(cuò)誤;  
DSC—卡準(zhǔn)備就緒;  
DRQ—CF卡請(qǐng)求數(shù)據(jù)傳送;  
CORR—數(shù)據(jù)錯(cuò)誤但被修正,不會(huì)終止多扇區(qū)讀操作;  
ERR—在上一命令以某種錯(cuò)誤結(jié)束,可以在錯(cuò)誤寄存器中查看錯(cuò)誤類(lèi)型。  

下面以向CF卡寫(xiě)一個(gè)扇區(qū)數(shù)據(jù)為例,給出圖4所示流程和C程序代碼。  

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



5 結(jié)論  

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

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 不卡在线一区 | 中文字幕在线视频一区 | 亚洲三级视频 | 精品欧美一区二区三区在线观看 | 国产麻豆va精品视频 | 亚洲高清免费 | 日本一区二区三区在线网 | 香蕉草莓丝瓜茄子番茄绿巨人 | 国模肉肉大尺度啪啪人体150p | 99热这里只有免费国产精品 | 毛片在线免费观看网站 | 麻豆91在线视频 | 国产日韩精品视频一区二区三区 | 在线不欧美 | 欧美 日韩 国产 在线 | 国产亚洲一区二区三区在线观看 | 日日操天天操 | www.夜夜骑.com | 亚洲女人与黑人 | 亚洲欧美一区二区三区麻豆 | 粉嫩极品国产 | 欧美成年视频 | 99热碰| 日本www黄 | 成视频年人黄网站免费视频 | 韩国理论片妈妈的朋友 | 好男人影视官网在线www | dy888午夜国产午夜精品 | 国产精品亚洲片在线观看麻豆 | 国产欧美日韩在线视频 | 午夜色大片在线观看 | 蜜柚视频最新下载 | 国产深夜福利19禁在线播放 | 国产片免费观看 | 欧美日韩一区二区高清视 | 国产成人精品2021欧美日韩 | 国产99视频精品一区 | 国产91小视频 | 婷婷色在线 | 最新亚洲人成网站在线影院 | 国产欧美国产精品第二区 |