《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于SoPC的SD卡控制器IP核的設(shè)計(jì)
基于SoPC的SD卡控制器IP核的設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2011年第3期
何 偉, 余征華, 張 玲, 劉平凈
重慶大學(xué) 通信工程學(xué)院, 重慶 400044)
摘要: 針對(duì)目前在嵌入式平臺(tái)中使用SD卡控制器專用芯片價(jià)格昂貴、軟件模擬SPI時(shí)序控制讀寫(xiě)速度較慢的問(wèn)題,提出了一種基于SoPC技術(shù)的SD卡控制器IP核設(shè)計(jì)的架構(gòu)方案。采用VHDL語(yǔ)言設(shè)計(jì)SD卡控制器IP核,利用自定義模塊技術(shù)將其添加到SoPC中,利用Nios II IDE編寫(xiě)SD卡的基礎(chǔ)讀寫(xiě)驅(qū)動(dòng)軟件并移植μC/FS文件系統(tǒng),實(shí)現(xiàn)對(duì)SD卡的文件操作。該設(shè)計(jì)具有使用方便、集成度高、數(shù)據(jù)傳輸可靠、文件格式通用等特點(diǎn),在基于SoPC架構(gòu)的多用途無(wú)線防盜監(jiān)控系統(tǒng)中得到良好的應(yīng)用。
中圖分類號(hào): TP333
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)03-0137-04
Design of SD card controller IP core based on SoPC
Hei Wei, Yu Zhenghua, Zhang Ling, Liu Pingjing
College of Communication Engineering, Chongqing University, Chongqing 400044, China
Abstract: Architecture program of SD card controller IP core based on SoPC technology is proposed to solve the problems such as higher price of SD card controller ASICs applied into embedded platform and lower speed of SPI read-write timing by using software simulation. Firstly, SD Card Controller IP Core is designed with VHDL and integrated into SoPC by using custom module technology. Then, to realize the file operation, basic read-write driver is programmed and μC/FS file system is ported by C running on Nios II processor. The design is with the properties of convenience, high integration, realiable data transmission and universal file format and gains better application in multi-purpose wireless security monitoring system based on SoPC architecture.
Key words : SoPC; SD card;μC/FS file system; controller; IP core


 隨著電子產(chǎn)品的音頻、視頻等多媒體功能的不斷增強(qiáng),嵌入式系統(tǒng)對(duì)存儲(chǔ)介質(zhì)的容量、安全、性能、價(jià)格等提出了更高的要求,而SD卡因其價(jià)格低廉、速度快、容量大和兼容性好(兼容MMC卡協(xié)議)等特點(diǎn)在嵌入式平臺(tái)中得到了廣泛的使用。目前在嵌入式平臺(tái)中使用SD卡的方式主要有:(1)系統(tǒng)中使用帶SD卡控制器的電路模塊或芯片。(2)將I/O口與SD卡接口連接以軟件模擬SPI時(shí)序控制其讀寫(xiě)。方式(1)使用方便、控制簡(jiǎn)單,但是增加了硬件電路復(fù)雜度和成本;方式(2)電路雖然結(jié)構(gòu)簡(jiǎn)單,但是讀寫(xiě)速度慢。
 針對(duì)上述缺陷,本文提出了基于SoPC技術(shù)的SD卡控制器的架構(gòu)方案,即在Altera公司提供的Quartus II軟件中開(kāi)發(fā)SD卡控制器并在SoPC Builder中將其作為一個(gè)獨(dú)立的IP核集成到SoPC中,通過(guò)軟件驅(qū)動(dòng)控制器以實(shí)現(xiàn)SD卡讀寫(xiě)及文件操作,使其系統(tǒng)設(shè)計(jì)靈活、集成度高、讀寫(xiě)速度快,為SOPC設(shè)計(jì)中使用非易失性存儲(chǔ)提供了新的方案。
1 SD卡協(xié)議規(guī)范
    SD聯(lián)盟在2000年和2006年分別發(fā)布了SD卡規(guī)范1.0和2.0版本,SD卡規(guī)范主要包括物理層規(guī)范[1]、文件系統(tǒng)規(guī)范和安全規(guī)范三部分內(nèi)容,最大支持容量為32 GB,支持的文件系統(tǒng)為FAT16和FAT32。
 SD卡內(nèi)部不僅有大量的存儲(chǔ)單元,還有卡接口控制器、寄存器等,外部控制器不能直接訪問(wèn)存儲(chǔ)器,所有對(duì)SD卡的操作如讀/寫(xiě)、設(shè)置塊長(zhǎng)度、擦除等都是由卡接口控制器根據(jù)收到的命令自動(dòng)完成,減少了外部控制器對(duì)存儲(chǔ)器操作的負(fù)擔(dān)[2]。SD卡支持SD和SPI兩種工作模式,兩種模式下SD卡的管腳意義如表1所示。SD模式下數(shù)據(jù)采用4線并行傳輸,速度較快。而SPI模式接口協(xié)議簡(jiǎn)單,在各嵌入式平臺(tái)中的通用性好,故本設(shè)計(jì)中采用SPI模式。 
2 SD卡控制器IP核設(shè)計(jì)
 SD卡工作在SPI模式下,其總線主要有時(shí)鐘線CLK、命令線CMD、數(shù)據(jù)線DAT和片選線CS。SD卡控制器主要實(shí)現(xiàn)三大功能:
 (1)復(fù)位和初始化SD卡??刂破靼凑誗D卡總線協(xié)議產(chǎn)生控制時(shí)序?qū)ζ溥M(jìn)行復(fù)位和初始化。
 (2)讀寫(xiě)SD卡??刂破魇紫韧ㄟ^(guò)CMD線發(fā)送讀或?qū)懨詈蜕葏^(qū)地址,等收到正確的命令回執(zhí)后,將DAT線上傳輸?shù)拇袛?shù)據(jù)進(jìn)行串/并轉(zhuǎn)換,然后存儲(chǔ)在控制器內(nèi)部緩存中(寫(xiě)數(shù)據(jù)則將控制器內(nèi)部緩存中的數(shù)據(jù)并/串轉(zhuǎn)換后從DAT線發(fā)送到SD卡),一個(gè)扇區(qū)數(shù)據(jù)(512 B)傳輸完畢后將就緒信號(hào)置為有效。
 (3)設(shè)置SD卡。設(shè)置操作與讀寫(xiě)操作相同,都是發(fā)送命令和參數(shù),只是不接收和發(fā)送數(shù)據(jù)。
 需要特別指出的是:CLK信號(hào)由控制器產(chǎn)生,對(duì)SD卡的命令或數(shù)據(jù)傳輸?shù)纫幌盗胁僮骶c該時(shí)鐘同步(SD卡的最大工作時(shí)鐘為25 MHz)。
 SD控制器的功能模塊劃分如圖1所示。

2.1 總線接口模塊
    總線接口模塊SDInterface是整個(gè)SD卡控制器的核心,其端口信號(hào)遵循Avalon協(xié)議規(guī)范[3],主要負(fù)責(zé)連接Avalon總線、緩存SD卡命令、緩存扇區(qū)地址、將要發(fā)送的數(shù)據(jù)送至緩存(雙口RAM)以及從緩存中讀取數(shù)據(jù)等。
 當(dāng)處理器要對(duì)SD卡進(jìn)行初始化時(shí),需要寫(xiě)SDInterface模塊的特定地址,之后SDInterface選擇啟動(dòng)復(fù)位/初始化模塊(SDInit),由SDInit完成SD卡的初始化工作。
 向SD卡寫(xiě)數(shù)據(jù)時(shí),需要先通過(guò)SDInterface模塊將要寫(xiě)的數(shù)據(jù)緩存到雙口RAM中,然后將扇區(qū)地址和寫(xiě)命令(CMD24)發(fā)送到SDInterface模塊的特定地址,之后SDInterface會(huì)啟動(dòng)命令控制(SDcmd)模塊并將命令和地址傳遞給后者,最后由SDcmd模塊完成一次寫(xiě)操作。
    從SD卡中讀數(shù)據(jù)或?qū)D卡進(jìn)行其他操作與向SD卡寫(xiě)數(shù)據(jù)過(guò)程基本一致,處理器首先向SDInterface發(fā)送命令和參數(shù)(如果是讀寫(xiě)操作,則參數(shù)即為扇區(qū)地址),之后SDInterface啟動(dòng)SDCmd模塊并由SDCmd模塊完成后續(xù)操作(如果是讀操作則將讀得的數(shù)據(jù)緩存到雙口RAM中)。
2.2 初始化模塊
     對(duì)SD卡進(jìn)行讀寫(xiě)或其他操作前首先應(yīng)將其初始化。初始化模塊SDInit主要負(fù)責(zé)完成SD卡的初始化工作,主要工作流程如下:
 (1)當(dāng)總線接口模塊使能SDInit后,SDInit通過(guò)SPITrans模塊向SD卡發(fā)送復(fù)位命令(CMD40)。
 (2)等待復(fù)位命令的回執(zhí),如果復(fù)位成功(返回值為0x01),則轉(zhuǎn)向步驟(3),否則繼續(xù)等待。
 (3)向SD卡發(fā)送初始化命令(CMD41),等待初始化命令的回執(zhí)并將執(zhí)行結(jié)果返回給SDInterface以便通知處理器。
2.3 命令控制模塊
 命令控制模塊SDCmd主要完成SD卡命令、參數(shù)、命令校驗(yàn)值的發(fā)送和命令回執(zhí)的讀取(如果是讀寫(xiě)操作,則還要進(jìn)行數(shù)據(jù)的發(fā)送和接收)。
 SDInterface模塊使能SDCmd前會(huì)將SD命令、參數(shù)傳遞給SDCmd,這樣SDCmd使能后,首先通過(guò)SPITrans模塊將得到的命令、參數(shù)發(fā)送到SD卡,然后等待命令回執(zhí),如果當(dāng)前命令是讀、寫(xiě)之外的其他命令,則將執(zhí)行結(jié)果返回給SDInterface模塊即可;如果是讀、寫(xiě)命令則收到正確的命令回執(zhí)后,則還要將數(shù)據(jù)接收并存到緩存或發(fā)送到SD卡。
2.4 選擇器和雙口RAM
 選擇器模塊Mux主要用來(lái)根據(jù)當(dāng)前操作從SDInit模塊和SDCmd模塊的輸出信號(hào)中選擇一路送至SPITrans模塊。雙口RAM是SD控制器的緩存,用來(lái)存儲(chǔ)發(fā)送到SD卡和從SD卡上讀取的數(shù)據(jù)。
2.5 串/并、并/串轉(zhuǎn)換及時(shí)鐘產(chǎn)生模塊
 SPITrans模塊主要負(fù)責(zé)串/并轉(zhuǎn)換、并/串轉(zhuǎn)換和SD卡時(shí)鐘產(chǎn)生。當(dāng)SPITrans模塊使能后,它通過(guò)對(duì)輸入時(shí)鐘進(jìn)行分頻產(chǎn)生SD卡時(shí)鐘,并在8個(gè)SD卡時(shí)鐘周期內(nèi)將選擇器輸出的8位并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送到SD卡,同時(shí)將SD卡DAT線上的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)返回給SDInit模塊和SDCmd模塊。
3 基礎(chǔ)讀寫(xiě)設(shè)計(jì)
 SD卡控制器軟件的編寫(xiě)在Altera公司的Quartus II中完成,使用SOPC Builder工具將具有Avalon總線接口的SD卡控制器封裝成IP 核并集成到SOPC中,利用Nios II IDE編寫(xiě)軟件驅(qū)動(dòng)實(shí)現(xiàn)SD卡的基礎(chǔ)讀寫(xiě)(以扇區(qū)為單位進(jìn)行讀寫(xiě))。寫(xiě)數(shù)據(jù)到SD卡扇區(qū)操作函數(shù)如下:
    int sd_write(UINT8 *data, UINT32 addr)
        {
         int ret, i=0, j=0;
            if(sd_type == 1) addr = addr << 9;
            /*判斷地址偏移*/
         for(i=0; i<512; i++) 
         IOWR(SD_CARD_BASE, i, data[i]);
         /*寫(xiě)數(shù)據(jù)*/
         IOWR(SD_CARD_BASE, 517, CMD24);   
         /*寫(xiě)入地址*/
         IOWR(SD_CARD_BASE, 518, addr);
         /*開(kāi)始運(yùn)行*/
         IOWR(SD_CARD_BASE, 519, 0);
         /*讀命令回執(zhí)*/
         ret = IORD(SD_CARD_BASE, 519); 
         &hellip;
        }
4 文件系統(tǒng)移植
 讀寫(xiě)操作均以扇區(qū)為單位,SD卡僅相當(dāng)于一塊容量較大的Flash,移植文件系統(tǒng)可方便地與PC機(jī)或其他電子產(chǎn)品數(shù)據(jù)交換以及后期分析處理。&mu;C/FS是一種為其提供基本的硬件訪問(wèn)功能即可應(yīng)用于任何存儲(chǔ)介質(zhì)的FAT文件系統(tǒng),其使用標(biāo)準(zhǔn)ANSI C編寫(xiě)可應(yīng)用于幾乎任何CPU。&mu;C/FS具有以下特點(diǎn)[4]:(1)支持DOS/Windows環(huán)境下的FAT12,F(xiàn)AT16 和FAT32。(2)支持多個(gè)存儲(chǔ)器共同工作,可以同時(shí)訪問(wèn)多個(gè)存儲(chǔ)器。(3)多操作系統(tǒng)支持,可以很方便地移植到幾乎任何操作系統(tǒng)。(4)可以很容易地集成使用SPI模式的MMC/SD卡通用設(shè)備驅(qū)動(dòng)等?;谝陨系奶攸c(diǎn),&mu;C/FS 非常適用于嵌入式系統(tǒng)。
4.1 &mu;C/FS文件系統(tǒng)結(jié)構(gòu)分析
 &mu;C/FS 采取分層工作方式,每一層負(fù)責(zé)不同的功能,由高層的數(shù)據(jù)抽象到底層的硬件實(shí)體分工明確,其系統(tǒng)結(jié)構(gòu)層次劃分如圖2所示。

4.2 文件系統(tǒng)實(shí)現(xiàn)
 在完成SD卡控制器及其軟件驅(qū)動(dòng)并實(shí)現(xiàn)SD卡基礎(chǔ)讀寫(xiě)的基礎(chǔ)上,按照&mu;C/FS文件系統(tǒng)的接口函數(shù)編寫(xiě)設(shè)備驅(qū)動(dòng)程序并對(duì)系統(tǒng)參數(shù)做相應(yīng)設(shè)置即可實(shí)現(xiàn)SD卡文件操作。&mu;C/FS文件系統(tǒng)的接口函數(shù)主要通過(guò)一個(gè)結(jié)構(gòu)體(FS__device_type)進(jìn)行描述,該結(jié)構(gòu)體包含了驅(qū)動(dòng)設(shè)備的名稱以及4個(gè)基本的驅(qū)動(dòng)設(shè)備掛接函數(shù)的函數(shù)指針:
    typedef struct {
    FS_FARCHARPTR  name;
    int (*dev_status)(FS_u32 Unit);
    int(*dev_read)(FS_u32 Unit, FS_u32 Sector, void *pBuffer);
    int(*dev_write)(FS_u32 Unit,FS_u32 Sector,void *pBuffer);
    int(*dev_ioctl)( FS_u32 Unit,  FS_i32 Cmd,  FS_i32 Aux,
        void *pBuffer);
    } FS__device_type;
其中,dev_status()函數(shù)主要實(shí)現(xiàn)FAT表狀態(tài)信息的讀取,并表明該SD設(shè)備可以使用;dev_read()函數(shù)實(shí)現(xiàn)對(duì)SD卡進(jìn)行文件系統(tǒng)塊數(shù)據(jù)的讀??;dev_write()函數(shù)實(shí)現(xiàn)對(duì)SD卡進(jìn)行文件系統(tǒng)塊數(shù)據(jù)的寫(xiě)入;dev_ioctl()函數(shù)則主要實(shí)現(xiàn)文件操作的相關(guān)指令,包括文件格式化、數(shù)據(jù)cache回寫(xiě)等操作。
5 仿真與驗(yàn)證
 對(duì)SD卡控制器的仿真驗(yàn)證工作主要從時(shí)序仿真和軟件驅(qū)動(dòng)控制器讀寫(xiě)SD卡進(jìn)行文件操作驗(yàn)證兩方面進(jìn)行。
5.1 SD卡控制器的時(shí)序仿真
 在Quartus II中創(chuàng)建波形激勵(lì)文件后,得到的時(shí)序仿真結(jié)果如圖3所示。在仿真圖中可以看出,控制器在初始化過(guò)程中,首先將CMD0(0x40)、參數(shù)(0x00000000)和命令校驗(yàn)位(0x95)通過(guò)SPITrans模塊進(jìn)行并/串轉(zhuǎn)后發(fā)送到SD卡的CMD線進(jìn)行復(fù)位,等收到SD卡DAT線上發(fā)送回來(lái)的回執(zhí)(0x01)后,接著發(fā)送CMD1(0x41)、參數(shù)(0x00000000)和命令校驗(yàn)位(0xFF)到SD卡進(jìn)行初始化。由此可見(jiàn),SD卡控制器設(shè)計(jì)符合SD卡協(xié)議標(biāo)準(zhǔn)。

5.2文件操作驗(yàn)證
    通過(guò)調(diào)用&mu;C/FS 文件系統(tǒng)提供的API函數(shù),如:FS_Fopen()打開(kāi)文件、FS_FRead()讀文件、FS_FWrite()寫(xiě)文件等編寫(xiě)測(cè)試程序如下:
    void main(void)
    {
        char *device="sd:"
        const char *WriteMsg="test sd card write\n";
         FS_Init();                           /*初始化文件系統(tǒng)*/
         show_free(device);          /*顯示SD卡空間信息*/
         write_file("test.txt",WriteMsg); /*寫(xiě)入文件test.txt*/
         show_directory(device);   /*顯示根目錄文件信息*/
         dump_file("test.txt");        /*讀test.txt文件內(nèi)容*/
        &hellip;
    }
 選用4 GB容量的SDHC卡,在PC機(jī)上將其格式化為FAT文件系統(tǒng)并創(chuàng)建文件夾HELLO和文件WORD.DOC。SD卡在線運(yùn)行調(diào)試結(jié)果如圖4所示。由運(yùn)行結(jié)果可知,初始化成功并識(shí)別此SD卡為SDHC (Secure Digital High Capacity)卡,卡容量為964 256(總簇?cái)?shù))&times;8(每簇扇區(qū)數(shù))&times;512(每扇區(qū)字節(jié)數(shù))&asymp;3.7 GB。創(chuàng)建test.txt文件成功后讀取根目錄(有文件目錄hello、文件word.doc和文件test.txt),讀取文件test.txt內(nèi)容為test sd card write與寫(xiě)入一致。運(yùn)行結(jié)果表明文件操作正確可靠。

    通過(guò)對(duì)SD卡物理層協(xié)議和&mu;C/FS 文件系統(tǒng)的研究,成功設(shè)計(jì)了具有Avalon總線接口的SD卡控制器,并通過(guò)時(shí)序仿真、軟件驅(qū)動(dòng)的方式進(jìn)行仿真和調(diào)試,驗(yàn)證了SD卡控制器的工作情況,在此基礎(chǔ)上實(shí)現(xiàn)了SD卡中的文件操作,使SOPC設(shè)計(jì)能與PC機(jī)或各種電子產(chǎn)品方便地進(jìn)行數(shù)據(jù)交換。本設(shè)計(jì)已成功應(yīng)用在基于SOPC架構(gòu)的多用途無(wú)線防盜監(jiān)控系統(tǒng)中。
參考文獻(xiàn)
[1] SD Group. SD specifications part 1: physical layer simplified specification version 2.0,september 25, 2006.
[2] 李錦,呂柏權(quán). 基于AT91RM9200的SD卡主控制器的設(shè)計(jì)[J]. 微計(jì)算機(jī)應(yīng)用,2009,30(1):64-67.
[3] Altera.Avalon bus specificational reference manual[EB/OL].  http://www.altera.com, 2002.
[4] User&prime;s & reference manual for &mu;C/FS V1-34a. Micri&mu;m  Technologies Corporation. 2003.
[5] 鄭千洪, 王黎, 高曉蓉. 嵌入式平臺(tái)上NAND Flash的驅(qū)動(dòng)實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息, 2009,25(4-2):102-105.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。