《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于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亚洲国产精品_日韩亚洲一区二区
久久久青草青青国产亚洲免观| 欧美午夜视频网站| 夜夜爽www精品| 亚洲国产毛片完整版| 午夜在线一区二区| 亚洲一区国产视频| 一区二区三区回区在观看免费视频| 亚洲激情成人网| 亚洲国产成人91精品| 伊人狠狠色丁香综合尤物| 国产在线拍偷自揄拍精品| 国产欧美日韩在线| 国产区欧美区日韩区| 国产日韩精品综合网站| 国产精品亚洲综合色区韩国| 国产精品每日更新| 欧美在线观看视频| 久久激情中文| 欧美在线免费观看视频| 性久久久久久| 欧美一区二区女人| 久久国产88| 亚洲大胆女人| 亚洲欧洲三级电影| 日韩视频一区二区在线观看 | 一区二区三区国产在线观看| 一区二区三区三区在线| 国产精品99久久久久久有的能看| 一区二区精品在线| 亚洲综合欧美日韩| 欧美一区三区三区高中清蜜桃 | 亚洲欧美日韩精品久久奇米色影视 | 久久电影一区| 亚洲日本va在线观看| 一区二区三欧美| 亚洲欧美日韩国产成人| 国产精品一区二区欧美| 亚洲高清成人| 99热免费精品| 午夜在线成人av| 久久久xxx| 欧美精品一区二区视频| 国产精品福利在线观看| 国产一区二区精品在线观看| 1000部精品久久久久久久久| 日韩午夜高潮| 午夜精品久久久久久久蜜桃app| 久久av资源网站| 日韩视频免费在线观看| 亚洲一区视频在线| 久久嫩草精品久久久久| 欧美精品一区二区三区久久久竹菊| 欧美香蕉视频| 国产一区二区三区日韩| 亚洲国产一区二区三区青草影视| 一区二区三区免费网站| 久久爱91午夜羞羞| 亚洲视频精品在线| 欧美在线免费视屏| 中文日韩欧美| 玖玖玖免费嫩草在线影院一区| 欧美日韩国产区一| 国产亚洲激情| 日韩视频免费观看| 久久99在线观看| 亚洲小说春色综合另类电影| 久久久综合香蕉尹人综合网| 欧美日韩国产三级| 很黄很黄激情成人| 亚洲色图综合久久| 亚洲电影在线播放| 午夜精品久久久99热福利| 免费影视亚洲| 国产欧美一区二区三区沐欲| 亚洲国产精品一区二区久| 亚洲欧洲av一区二区| 日韩亚洲欧美一区| 久久久久久有精品国产| 欧美日韩在线亚洲一区蜜芽| 精品69视频一区二区三区| 亚洲一区999| 日韩视频在线永久播放| 久久久午夜视频| 国产精品国码视频| 亚洲日本免费| 亚洲国产精品va在线观看黑人| 午夜精品久久久久久久99热浪潮 | 亚洲男人的天堂在线aⅴ视频| 99re成人精品视频| 美女日韩在线中文字幕| 国产日韩欧美二区| 在线视频欧美一区| 一本色道综合亚洲| 欧美大片免费观看在线观看网站推荐| 国产欧美日韩在线播放| 亚洲午夜国产一区99re久久| 9色porny自拍视频一区二区| 蜜臀av一级做a爰片久久 | 亚洲福利视频一区二区| 久久国产精品免费一区| 国产精品久久久久久久第一福利| 亚洲精品国产精品国产自| 亚洲国产精品久久久久婷婷老年| 久久精品国产亚洲aⅴ| 国产女人水真多18毛片18精品视频| 亚洲最新在线视频| 一本色道久久综合精品竹菊| 欧美韩日视频| 亚洲激情av在线| 亚洲日本免费| 男同欧美伦乱| 亚洲国产合集| 亚洲精品资源| 欧美—级高清免费播放| 亚洲丰满在线| 亚洲激情综合| 欧美jjzz| 亚洲激情一区二区三区| 亚洲精品国产精品乱码不99按摩| 久久综合久久久久88| 韩国在线一区| 亚洲高清av在线| 欧美不卡高清| 亚洲国产精品999| 99国产精品久久久久久久成人热| 欧美激情久久久| 91久久亚洲| 亚洲图片激情小说| 欧美性久久久| 亚洲一区二区三区在线看| 午夜精品视频在线观看一区二区| 国产精品网红福利| 校园春色国产精品| 久久久午夜精品| 亚洲高清二区| 99av国产精品欲麻豆| 欧美日韩美女一区二区| 一区二区日韩伦理片| 欧美亚洲综合另类| 国产一区二区在线免费观看| 久久精品一本| 欧美国产视频一区二区| 日韩视频一区二区在线观看 | 在线视频精品一区| 欧美一区观看| 狠狠色综合色综合网络| 亚洲日本一区二区| 欧美色精品天天在线观看视频 | 国产日韩欧美视频| 亚洲国产日韩综合一区| 欧美护士18xxxxhd| 一区二区精品国产| 久久精品国产一区二区三| 伊人色综合久久天天| 99国产精品99久久久久久| 国产精品伦一区| 亚洲第一视频| 欧美精品日韩综合在线| 亚洲一区欧美一区| 久久五月婷婷丁香社区| 亚洲国产日韩在线一区模特| 亚洲一级片在线看| 国内揄拍国内精品久久| 一本色道久久99精品综合| 欧美午夜在线观看| 久久本道综合色狠狠五月| 欧美成人在线网站| 国产精品99久久久久久人| 久久精品视频免费| 亚洲黄色性网站| 性色一区二区三区| 亚洲国内在线| 欧美在线观看天堂一区二区三区| 在线电影国产精品| 午夜伦欧美伦电影理论片| 影音先锋久久资源网| 亚洲一区二区视频| 精品av久久久久电影| 亚洲一区二区av电影| 激情自拍一区| 午夜精品国产| 亚洲激情小视频| 久久精品视频在线播放| 亚洲免费观看高清在线观看| 久久久之久亚州精品露出| 夜夜嗨av一区二区三区网页| 久久香蕉国产线看观看av| av成人免费在线| 美女啪啪无遮挡免费久久网站| 亚洲桃色在线一区| 欧美国产日韩xxxxx| 午夜精品一区二区在线观看| 欧美精品亚洲精品| 亚洲大片免费看| 国产精品久久久久9999吃药| 亚洲美女视频| 黄网动漫久久久| 午夜欧美大尺度福利影院在线看| 亚洲高清在线| 久久久国产精品亚洲一区|