欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

單片機實現對CF卡的讀寫

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2011-5-14

簡述:CF卡是一種包含了控制和大容量Flash存儲器的標準器件,具有容量大、體積小、高性能、攜帶方便等優點,已廣泛應用在數據采集系統和許多消息類電子產品中。本文詳細介紹CF卡在單片機系統中的硬件接口電路,以及單片機對CF卡進行標準文件讀寫的實現,且寫入的文件能被Windo

引言

         由于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卡結構圖

        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)數據寬度。
CF卡與51單片機的接口

表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地址=(柱面號×磁頭數+磁頭號)×扇區數+扇區數-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三個簇。
FAT表

     簇是存儲文件的最小單位,可以包含多個扇區。當文件本身或文件的最后一簇哪怕只有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 & 0x01)==0x01)

flag_1=1; //若ERR=1,置出錯標志,做相應處理

while(status!=0x58);

cfwr_dat(); //寫入數據

do{status=PBYTE[0x07]; //讀狀態寄存器

if((status & 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 & 0xf8; //選中外部RAM

temp=dat[i];

P1++; //根據實際電路選擇中CF卡

PBYTE[0x00]=temp;}

}

5 結論

筆者在濕度檢測儀中,根據本文所介紹的方法,用CF卡向計算機轉存數據,可以非常方便地對數據進行維護。

Tags:單片機,CF卡的讀寫  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人
欧美日韩视频在线第一区| 91丨porny丨首页| 亚洲视频一二区| 久久久国产午夜精品| 久久天天做天天爱综合色| 欧美va亚洲va在线观看蝴蝶网| 在线成人高清不卡| 911国产精品| 日韩午夜激情视频| 精品国产露脸精彩对白| 久久久久国产精品厨房| 久久精品视频在线免费观看| 久久九九99视频| 中文字幕av资源一区| 国产精品福利电影一区二区三区四区 | 看片的网站亚洲| 美女mm1313爽爽久久久蜜臀| 男女激情视频一区| 极品少妇xxxx精品少妇偷拍| 国产在线不卡视频| 成人网在线播放| 色94色欧美sute亚洲线路一久| 欧美日韩在线电影| 日韩美一区二区三区| 精品国产1区2区3区| 欧美激情一区二区三区不卡| 综合av第一页| 日日夜夜精品免费视频| 国产一区欧美二区| 99久久99久久综合| 欧美日本免费一区二区三区| 精品美女一区二区三区| 日本一区二区成人在线| 亚洲精选免费视频| 五月天一区二区| 国产一区二区三区免费播放| 99精品国产99久久久久久白柏| 欧美午夜精品电影| 亚洲精品在线观看网站| 亚洲日本中文字幕区| 日韩不卡一二三区| 国产精品123| 欧美色图天堂网| 久久婷婷一区二区三区| 一区二区三区精品视频在线| 久久国产婷婷国产香蕉| 99精品久久99久久久久| 欧美一级高清片| 亚洲欧洲日产国码二区| 人禽交欧美网站| av资源站一区| 欧美精品一二三四| 国产精品伦一区| 日本欧美在线看| 91热门视频在线观看| 精品国产sm最大网站免费看| 亚洲免费在线观看| 久久99精品久久久久久| 在线欧美日韩国产| 国产欧美综合在线| 亚洲超碰97人人做人人爱| 狠狠色丁香久久婷婷综| 欧美午夜理伦三级在线观看| 国产精品丝袜一区| 久久精品99国产精品日本| 日本韩国欧美一区二区三区| 国产香蕉久久精品综合网| 青娱乐精品在线视频| gogo大胆日本视频一区| 91精品国产高清一区二区三区蜜臀| 中文字幕成人在线观看| 久久99精品久久久久久| 欧美乱妇20p| 亚洲三级电影网站| 丁香婷婷深情五月亚洲| 2023国产精品| 免费在线观看视频一区| 欧美午夜影院一区| 亚洲免费观看高清完整版在线| 韩国成人精品a∨在线观看| 欧美精品久久天天躁| 一区二区三区四区激情| 99久久99久久久精品齐齐| 国产亚洲综合性久久久影院| 美女尤物国产一区| 欧美精品第一页| 亚洲成人高清在线| 粉嫩aⅴ一区二区三区四区| 精品国产一二三区| 久久99国产精品免费网站| 91麻豆精品国产综合久久久久久 | 老汉av免费一区二区三区| 欧美日韩卡一卡二| 亚洲黄网站在线观看| 一本久久a久久精品亚洲| 国产精品国产自产拍在线| 福利电影一区二区| 亚洲国产成人午夜在线一区| 国产又粗又猛又爽又黄91精品| 日韩三级电影网址| 午夜精品免费在线| 日本韩国精品在线| 亚洲一区av在线| 91在线观看污| 尤物在线观看一区| 欧美午夜精品一区二区蜜桃| 午夜av电影一区| 在线不卡a资源高清| 天堂va蜜桃一区二区三区| 欧美欧美欧美欧美| 毛片不卡一区二区| 日韩欧美国产电影| 精品中文字幕一区二区| 精品va天堂亚洲国产| 韩国av一区二区三区四区| 久久伊99综合婷婷久久伊| 国产美女一区二区三区| 国产香蕉久久精品综合网| av激情亚洲男人天堂| 亚洲精品乱码久久久久久久久| 欧美三级电影在线看| 全国精品久久少妇| 欧美哺乳videos| 粉嫩绯色av一区二区在线观看| 18欧美亚洲精品| 欧美自拍偷拍午夜视频| 天堂蜜桃一区二区三区 | 日韩av一区二区三区四区| 日韩三级精品电影久久久 | 欧美日韩电影在线| 麻豆91免费观看| 国产精品网站导航| 欧美色区777第一页| 另类小说欧美激情| 中文字幕精品在线不卡| 欧美性受极品xxxx喷水| 精品一区二区三区香蕉蜜桃| 国产精品国产成人国产三级| 欧美美女一区二区三区| 日韩成人伦理电影在线观看| 亚洲国产成人午夜在线一区| 91久久香蕉国产日韩欧美9色| 日本不卡中文字幕| 国产精品欧美经典| 制服丝袜亚洲精品中文字幕| 国产成人av一区二区三区在线| 亚洲免费观看在线视频| 欧美精品1区2区3区| 国产精品538一区二区在线| 一区av在线播放| 久久久久久久综合日本| 欧美影视一区在线| 国产不卡视频在线播放| 亚洲影视在线播放| 国产女人18水真多18精品一级做| 欧美视频在线播放| 成人毛片视频在线观看| 日韩高清一区二区| 亚洲少妇最新在线视频| wwwwxxxxx欧美| 欧美日韩国产影片| 国模套图日韩精品一区二区| 亚洲国产日韩a在线播放性色| 日韩精品一区二区三区在线观看| 日本韩国欧美一区二区三区| 国产精品18久久久久| 日韩电影网1区2区| 中文字幕在线观看不卡| 久久日韩粉嫩一区二区三区| 欧美日韩中文另类| 开心九九激情九九欧美日韩精美视频电影 | 在线观看91精品国产麻豆| 成人午夜私人影院| 老汉av免费一区二区三区| 亚洲一二三区视频在线观看| 国产精品毛片久久久久久久| 精品国产电影一区二区 | 免费看日韩a级影片| 亚洲精品乱码久久久久久黑人| 国产欧美综合在线观看第十页| 欧美电影免费观看高清完整版在| 欧美撒尿777hd撒尿| 91久久一区二区| 91尤物视频在线观看| 国产黄色成人av| 精品一区二区在线免费观看| 日韩电影一区二区三区四区| 亚洲成人中文在线| 一个色妞综合视频在线观看| 国产精品美女久久久久aⅴ| 久久综合久久综合亚洲| 欧美不卡一二三| 日韩午夜精品视频| 欧美丰满嫩嫩电影| 欧美又粗又大又爽| 日本韩国欧美一区二区三区| 在线免费观看成人短视频| 一本到一区二区三区| 91丝袜美女网| 99国产精品视频免费观看|