《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于SoPC的SD卡控制器IP核的設計
基于SoPC的SD卡控制器IP核的設計
來源:電子技術應用2011年第3期
何 偉, 余征華, 張 玲, 劉平凈
重慶大學 通信工程學院, 重慶 400044)
摘要: 針對目前在嵌入式平臺中使用SD卡控制器專用芯片價格昂貴、軟件模擬SPI時序控制讀寫速度較慢的問題,提出了一種基于SoPC技術的SD卡控制器IP核設計的架構方案。采用VHDL語言設計SD卡控制器IP核,利用自定義模塊技術將其添加到SoPC中,利用Nios II IDE編寫SD卡的基礎讀寫驅動軟件并移植μC/FS文件系統,實現對SD卡的文件操作。該設計具有使用方便、集成度高、數據傳輸可靠、文件格式通用等特點,在基于SoPC架構的多用途無線防盜監控系統中得到良好的應用。
中圖分類號: TP333
文獻標識碼: A
文章編號: 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


 隨著電子產品的音頻、視頻等多媒體功能的不斷增強,嵌入式系統對存儲介質的容量、安全、性能、價格等提出了更高的要求,而SD卡因其價格低廉、速度快、容量大和兼容性好(兼容MMC卡協議)等特點在嵌入式平臺中得到了廣泛的使用。目前在嵌入式平臺中使用SD卡的方式主要有:(1)系統中使用帶SD卡控制器的電路模塊或芯片。(2)將I/O口與SD卡接口連接以軟件模擬SPI時序控制其讀寫。方式(1)使用方便、控制簡單,但是增加了硬件電路復雜度和成本;方式(2)電路雖然結構簡單,但是讀寫速度慢。
 針對上述缺陷,本文提出了基于SoPC技術的SD卡控制器的架構方案,即在Altera公司提供的Quartus II軟件中開發SD卡控制器并在SoPC Builder中將其作為一個獨立的IP核集成到SoPC中,通過軟件驅動控制器以實現SD卡讀寫及文件操作,使其系統設計靈活、集成度高、讀寫速度快,為SOPC設計中使用非易失性存儲提供了新的方案。
1 SD卡協議規范
    SD聯盟在2000年和2006年分別發布了SD卡規范1.0和2.0版本,SD卡規范主要包括物理層規范[1]、文件系統規范和安全規范三部分內容,最大支持容量為32 GB,支持的文件系統為FAT16和FAT32。
 SD卡內部不僅有大量的存儲單元,還有卡接口控制器、寄存器等,外部控制器不能直接訪問存儲器,所有對SD卡的操作如讀/寫、設置塊長度、擦除等都是由卡接口控制器根據收到的命令自動完成,減少了外部控制器對存儲器操作的負擔[2]。SD卡支持SD和SPI兩種工作模式,兩種模式下SD卡的管腳意義如表1所示。SD模式下數據采用4線并行傳輸,速度較快。而SPI模式接口協議簡單,在各嵌入式平臺中的通用性好,故本設計中采用SPI模式。 
2 SD卡控制器IP核設計
 SD卡工作在SPI模式下,其總線主要有時鐘線CLK、命令線CMD、數據線DAT和片選線CS。SD卡控制器主要實現三大功能:
 (1)復位和初始化SD卡。控制器按照SD卡總線協議產生控制時序對其進行復位和初始化。
 (2)讀寫SD卡。控制器首先通過CMD線發送讀或寫命令和扇區地址,等收到正確的命令回執后,將DAT線上傳輸的串行數據進行串/并轉換,然后存儲在控制器內部緩存中(寫數據則將控制器內部緩存中的數據并/串轉換后從DAT線發送到SD卡),一個扇區數據(512 B)傳輸完畢后將就緒信號置為有效。
 (3)設置SD卡。設置操作與讀寫操作相同,都是發送命令和參數,只是不接收和發送數據。
 需要特別指出的是:CLK信號由控制器產生,對SD卡的命令或數據傳輸等一系列操作均要與該時鐘同步(SD卡的最大工作時鐘為25 MHz)。
 SD控制器的功能模塊劃分如圖1所示。

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

4.2 文件系統實現
 在完成SD卡控制器及其軟件驅動并實現SD卡基礎讀寫的基礎上,按照&mu;C/FS文件系統的接口函數編寫設備驅動程序并對系統參數做相應設置即可實現SD卡文件操作。&mu;C/FS文件系統的接口函數主要通過一個結構體(FS__device_type)進行描述,該結構體包含了驅動設備的名稱以及4個基本的驅動設備掛接函數的函數指針:
    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()函數主要實現FAT表狀態信息的讀取,并表明該SD設備可以使用;dev_read()函數實現對SD卡進行文件系統塊數據的讀取;dev_write()函數實現對SD卡進行文件系統塊數據的寫入;dev_ioctl()函數則主要實現文件操作的相關指令,包括文件格式化、數據cache回寫等操作。
5 仿真與驗證
 對SD卡控制器的仿真驗證工作主要從時序仿真和軟件驅動控制器讀寫SD卡進行文件操作驗證兩方面進行。
5.1 SD卡控制器的時序仿真
 在Quartus II中創建波形激勵文件后,得到的時序仿真結果如圖3所示。在仿真圖中可以看出,控制器在初始化過程中,首先將CMD0(0x40)、參數(0x00000000)和命令校驗位(0x95)通過SPITrans模塊進行并/串轉后發送到SD卡的CMD線進行復位,等收到SD卡DAT線上發送回來的回執(0x01)后,接著發送CMD1(0x41)、參數(0x00000000)和命令校驗位(0xFF)到SD卡進行初始化。由此可見,SD卡控制器設計符合SD卡協議標準。

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

    通過對SD卡物理層協議和&mu;C/FS 文件系統的研究,成功設計了具有Avalon總線接口的SD卡控制器,并通過時序仿真、軟件驅動的方式進行仿真和調試,驗證了SD卡控制器的工作情況,在此基礎上實現了SD卡中的文件操作,使SOPC設計能與PC機或各種電子產品方便地進行數據交換。本設計已成功應用在基于SOPC架構的多用途無線防盜監控系統中。
參考文獻
[1] SD Group. SD specifications part 1: physical layer simplified specification version 2.0,september 25, 2006.
[2] 李錦,呂柏權. 基于AT91RM9200的SD卡主控制器的設計[J]. 微計算機應用,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] 鄭千洪, 王黎, 高曉蓉. 嵌入式平臺上NAND Flash的驅動實現[J]. 微計算機信息, 2009,25(4-2):102-105.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久五月天婷婷| 亚洲欧美日韩精品在线| 国产日韩高清一区二区三区在线| 香蕉尹人综合在线观看| 欧美伊人久久| 91久久精品国产91性色tv| 欧美日韩亚洲激情| 午夜精品在线看| 久久国产综合精品| 亚洲人成网在线播放| 欧美亚洲不卡| 久久精品国产99国产精品| 亚洲激情欧美激情| 亚洲午夜电影网| 又紧又大又爽精品一区二区| 欧美日韩精品二区| 欧美专区在线| 亚洲美女中出| 亚洲——在线| 在线免费高清一区二区三区| 欧美日韩国产成人| 欧美资源在线观看| 99视频精品在线| 亚洲欧美网站| 亚洲精品日韩综合观看成人91| 国产精品夜夜夜一区二区三区尤| 免费成人黄色| 亚洲欧美日韩一区二区在线| 最近中文字幕日韩精品 | 久久一区二区三区四区| 亚洲视频免费观看| 久久国产加勒比精品无码| 99国产精品久久久| 韩国一区二区在线观看| 国产精品xnxxcom| 欧美不卡福利| 欧美一区二区三区在线观看视频 | 今天的高清视频免费播放成人| 欧美日韩免费一区二区三区视频| 久久精品30| 一区二区高清在线| 久久精品国产91精品亚洲| 中日韩美女免费视频网址在线观看| 激情六月综合| 国产精品日韩精品欧美精品| 欧美日韩国产成人| 麻豆成人在线观看| 久久精品二区| 性欧美超级视频| 9i看片成人免费高清| 久久精品国产视频| 亚洲女ⅴideoshd黑人| 一区二区激情| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲人体影院| 精品不卡视频| 国产一区二区三区精品久久久 | 国产精品乱人伦中文| 欧美日韩福利在线观看| 欧美成人一区二免费视频软件| 久久精品72免费观看| 午夜精品久久久久| 亚洲欧美亚洲| 亚洲欧美激情精品一区二区| 一区二区精品| 亚洲美女毛片| 日韩一级不卡| 亚洲精品看片| 亚洲日本欧美天堂| 亚洲精品免费在线播放| 亚洲精品在线观| 亚洲精品一二| 99视频+国产日韩欧美| 亚洲精品日韩在线观看| 亚洲欧洲一区二区在线观看 | 91久久精品日日躁夜夜躁欧美| 久久国产精品一区二区| 欧美一区二区性| 欧美综合国产精品久久丁香| 午夜久久久久| 欧美一区二区视频网站| 欧美一级专区| 久久精品国产91精品亚洲| 亚洲国产精品高清久久久| 亚洲大片在线观看| 亚洲高清视频的网址| 亚洲国产高清高潮精品美女| 久久成人免费网| 亚洲国产视频直播| 亚洲美女在线观看| 一区二区三区色| 亚洲香蕉网站| 亚洲欧美国内爽妇网| 香蕉成人伊视频在线观看| 欧美一级久久久久久久大片| 欧美在线播放一区| 久久婷婷激情| 欧美国产三级| 国产精品www| 国产伦精品一区二区三区在线观看 | 亚洲线精品一区二区三区八戒| 亚洲桃色在线一区| 午夜精品剧场| 亚洲国产高清在线| 亚洲美女视频网| 亚洲专区一二三| 欧美一区二区三区四区在线| 久久久亚洲高清| 欧美11—12娇小xxxx| 欧美日韩xxxxx| 国产精品久久二区二区| 国产免费成人在线视频| 激情小说另类小说亚洲欧美| 亚洲激情视频| 亚洲视频综合在线| 久久国产精品亚洲va麻豆| 亚洲理论在线观看| 亚洲欧美激情诱惑| 久久婷婷国产综合精品青草 | 欧美日韩播放| 国产免费成人| 在线精品观看| 一本一本久久| 久久精品二区亚洲w码| 一区二区三区回区在观看免费视频| 亚洲欧美中文另类| 免费看精品久久片| 欧美午夜免费| 激情视频一区| 一区二区三区国产在线| 久久黄色影院| 亚洲素人一区二区| 玖玖精品视频| 国产精品草莓在线免费观看| 激情欧美一区二区| 亚洲天堂成人| 亚洲精品男同| 欧美在线播放高清精品| 欧美精品一卡二卡| 国产一区三区三区| 99精品欧美一区| 久久精品免费播放| 亚洲伊人一本大道中文字幕| 巨胸喷奶水www久久久免费动漫| 欧美日韩中文精品| 韩国精品主播一区二区在线观看| av成人手机在线| 亚洲国产你懂的| 小处雏高清一区二区三区| 欧美成在线观看| 国产欧美日韩激情| 亚洲免费不卡| 91久久综合亚洲鲁鲁五月天| 欧美一区二区免费| 欧美日韩亚洲一区二区三区在线| 国产在线日韩| 亚洲伊人第一页| 一区二区三区国产盗摄| 久久综合网络一区二区| 国产欧美短视频| 一区二区三区www| 亚洲全部视频| 久久看片网站| 国产区在线观看成人精品| avtt综合网| 亚洲精品国产精品国自产观看 | 欧美激情视频一区二区三区在线播放 | 欧美日韩精品在线观看| 黄色欧美日韩| 午夜精品免费在线| 亚洲欧美日韩一区二区三区在线观看| 欧美成人一区二区| 激情91久久| 欧美在线免费观看亚洲| 欧美一区二区三区在线视频| 欧美小视频在线观看| 亚洲精品极品| 亚洲精品欧美日韩| 久久阴道视频| 狠狠色狠狠色综合日日91app| 午夜免费电影一区在线观看| 亚洲欧美国产精品专区久久| 欧美日韩一区二区三区在线观看免| 亚洲国产欧洲综合997久久| 亚洲高清在线观看| 久久久久久亚洲精品杨幂换脸 | 午夜精品一区二区在线观看| 亚洲欧美日韩在线不卡| 欧美体内谢she精2性欧美| 99视频有精品| 一区二区三区不卡视频在线观看| 欧美精品首页| 亚洲免费成人| 中文成人激情娱乐网| 欧美日韩国产首页在线观看| 亚洲免费av网站| 亚洲伊人久久综合| 国产精品手机在线| 午夜精品电影| 久久精品国产v日韩v亚洲|