C8051F020在SD卡主控制器設(shè)計(jì)中的應(yīng)用
3.3V的工作電壓,與SD卡工作電壓兼容。
時(shí)鐘系統(tǒng)更加完善,可以使用內(nèi)部時(shí)鐘,也可以使用外部時(shí)鐘。
可實(shí)現(xiàn)通過(guò)JTAG接口的在系統(tǒng)調(diào)試。
C8051F系列單片機(jī)的SPI串行接口的主要特點(diǎn)如下:全雙工,三線同步傳輸,即在發(fā)送的同時(shí)也能接受;可以工作在主機(jī)方式或從機(jī)方式;主機(jī)最大數(shù)據(jù)傳輸速率(位/秒)是系統(tǒng)時(shí)鐘頻率的1/2.因而最高可達(dá)10Mb/s;SPI位傳輸速率可通過(guò)編程選擇;發(fā)送結(jié)束設(shè)置中斷標(biāo)志。發(fā)送期間不占用CPU時(shí)間;串行時(shí)鐘極性與相位可編程改變;具有寫(xiě)沖突保護(hù)和總線競(jìng)爭(zhēng)保護(hù)。
對(duì)于C8051F020的SPI系統(tǒng)。首先通過(guò)設(shè)置I/O端口功能選擇開(kāi)關(guān)控制寄存器XBR0、XBR1、XBR2.將I/O端口P0.0、P0.1、P0.2、P0.3配置成SPI功能引腳SCK、MISO、MOSI和NSS。此時(shí)I/0端口P0.0、P0.1、P0.2、P0.3就組合成SPI接口了。SPI0CFG是SPI的配置寄存器,用于配置SPI的工作方式。并反映通信過(guò)程中的數(shù)據(jù)發(fā)送狀態(tài)。并反映通信過(guò)程中的一些錯(cuò)誤標(biāo)志,SPI0CKR是SPI的時(shí)鐘速率寄存器,用于選擇SCK輸出的頻率。
主控制器C8051F020與SD卡座的電路連接圖如圖3所示。除了SPI接口的連接外,還有三根控制線,P0.4_SD_INSERT就是I/O端口P0.4,用于檢測(cè)SD卡在卡座上是否插好。完全插入時(shí)該引腳為低電平,否則為高電平。P0.5_SD_WP就是I/O端口P0.5,用于檢測(cè)SD卡當(dāng)前是否設(shè)置寫(xiě)保護(hù)。寫(xiě)保護(hù)時(shí)該引腳為高電平,否則為低電平。P0.6_SD_POWER就是I/O端口P0.6,用于SD卡的供電控制,這是為了在SD卡進(jìn)入不確定狀態(tài)時(shí),可以通過(guò)對(duì)卡重新上電復(fù)位而無(wú)需拔出卡。
3 軟件設(shè)計(jì)
硬件抽象層包括訪問(wèn)SD卡的硬件環(huán)境配置、SPI接口實(shí)現(xiàn)通訊的基本函數(shù)以及SPI中斷的處理。硬件環(huán)境配置包括硬件初始化、以及內(nèi)存變量初始化等。SPI接口實(shí)現(xiàn)通訊的基本函數(shù),包括主控制器向SD卡發(fā)送一字節(jié)和從SD卡讀取一字節(jié)的基本函數(shù),這是所有SPI通訊的基礎(chǔ)。SPI中斷處理是SPI接口產(chǎn)生中斷時(shí)。中斷服務(wù)程序被自動(dòng)調(diào)用,在中斷服務(wù)程序中,讀取SPI控制寄存器。這里存放著產(chǎn)生中斷的各種狀態(tài)標(biāo)志,根據(jù)不同的狀態(tài)標(biāo)志,調(diào)用不同的函數(shù)處理。
命令層,就是調(diào)用硬件抽象層的基本發(fā)送接收字節(jié)函數(shù),實(shí)現(xiàn)SD卡所有SPI協(xié)議規(guī)定的命令。根據(jù)SD卡協(xié)議,訪問(wèn)SD卡的不同功能,由不同的命令實(shí)現(xiàn)。這些命令分成0—9個(gè)不同的類(lèi)別。每種類(lèi)別包括幾個(gè)具體的命令,對(duì)于SPI協(xié)議,每個(gè)命令都由主機(jī)主動(dòng)發(fā)送。高位在前低位在后,SD卡收到命令后。根據(jù)不同的命令做出不同的響應(yīng)。主機(jī)發(fā)送的命令長(zhǎng)度總是6個(gè)字節(jié)。命令的格式如表2所示,Command表示命令號(hào),占用6位,Parameter表示命令參數(shù),長(zhǎng)度為4字節(jié),不同的命令對(duì)應(yīng)不同的命令參數(shù)值。SD卡的響應(yīng)有4種格式,分別為R1、R1B、R2和R3格式。
表2 SPI模式命令格式
字節(jié)6 字節(jié)2~5 字節(jié)1
0 1 Command Parameter(高位在前) CRC 1
應(yīng)用層函數(shù)提供客戶(hù)程序訪問(wèn)SD卡的高級(jí)接口函數(shù)。使客戶(hù)不需要知道SD卡的內(nèi)部結(jié)構(gòu)和命令內(nèi)容、不需要知道SPI的接口協(xié)議等基本內(nèi)容,客戶(hù)程序只需要簡(jiǎn)單地調(diào)用接口函數(shù)了解SD卡的當(dāng)前狀態(tài)、讀取自己需要的內(nèi)容或?qū)懭胱约旱膬?nèi)容。應(yīng)用層程序是在命令層基礎(chǔ)上的更高抽象,調(diào)用命令層函數(shù)實(shí)現(xiàn)
4 結(jié)論
本文將SD卡存儲(chǔ)方式運(yùn)用到飛機(jī)飛行數(shù)據(jù)采集系統(tǒng),簡(jiǎn)化了采集系統(tǒng)的設(shè)計(jì),減小了系統(tǒng)尺寸,提高了系統(tǒng)的可靠性,使采集數(shù)據(jù)的讀出變得簡(jiǎn)單易行。由于原有數(shù)據(jù)采集系統(tǒng),采用8051單片機(jī)作主控制器,本次設(shè)計(jì)選用與8051完全兼容的高性能單片機(jī)C8051F020。既繼承了原有采集系統(tǒng)的設(shè)計(jì),又滿(mǎn)足了訪問(wèn)SD卡的功能要求,加快了整個(gè)系統(tǒng)的設(shè)計(jì)進(jìn)程。
評(píng)論