微波EDA网,见证研发工程师的成长! 2025婵犵數濮烽弫鍛婃叏閹绢喗鍎夊鑸靛姇缁狙囧箹鐎涙ɑ灏ù婊呭亾娣囧﹪濡堕崟顓炲闂佸憡鐟ョ换姗€寮婚敐澶婄闁挎繂妫Λ鍕磼閻愵剙鍔ゆ繛纭风節瀵鎮㈤崨濠勭Ф闂佸憡鎸嗛崨顔筋啅缂傚倸鍊烽懗鑸靛垔椤撱垹鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷04闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鈩冩珕闂佽姤锚椤︻喚绱旈弴銏♀拻濞达綀娅g敮娑㈡煕閺冣偓濞茬喖鐛弽顓ф晝闁靛牆娲g粭澶婎渻閵堝棛澧遍柛瀣仱閹繝濡烽埡鍌滃幗闂佸搫娲ㄩ崑娑㈠焵椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹12闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鈩冩珖闂侀€炲苯澧扮紒顕嗙到铻栧ù锝堟椤旀洟姊洪悷鎵憼闁荤喆鍎甸幃姗€鍩¢崘顏嗭紲闂佺粯鐟㈤崑鎾绘煕閵娿儳鍩g€殿喖顭锋俊鎼佸煛閸屾矮绨介梻浣呵归張顒傜矙閹达富鏁傞柨鐕傛嫹 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鐘栄囨煕鐏炲墽鐓瑙勬礀閳规垿顢欑紒鎾剁窗闂佸憡顭嗛崘锝嗙€洪悗骞垮劚濞茬娀宕戦幘鑸靛枂闁告洦鍓涢敍娑㈡⒑閸涘⿴娈曞┑鐐诧躬閹即顢氶埀顒€鐣烽崼鏇ㄦ晢濠㈣泛顑嗗▍灞解攽閻樺灚鏆╁┑顔芥尦楠炲﹥寰勯幇顒傦紱闂佽宕橀褔鏌ㄩ妶鍡曠箚闁靛牆瀚崗宀勬煕濞嗗繑顥㈡慨濠呮缁辨帒螣閼姐値妲梻浣呵归敃銈咃耿闁秴鐒垫い鎺嶈兌閸熸煡鏌熼崙銈嗗闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屻倝宕妷锔芥瘎婵炲濮甸懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸褉鍋撻棃娑欏暈鐎规洖寮堕幈銊ヮ渻鐠囪弓澹曢梻浣虹帛娓氭宕板☉姘变笉婵炴垶菤濡插牊绻涢崱妯哄妞ゅ繒鍠栧缁樻媴閼恒儳銆婇梺闈╃秶缁犳捇鐛箛娑欐櫢闁跨噦鎷�
首页 > 硬件设计 > 嵌入式设计 > 基于ARM含SD控制器的SD卡的SDIO模式驱动解析

基于ARM含SD控制器的SD卡的SDIO模式驱动解析

时间:12-08 来源:互联网 点击:

SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。

SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,因此越来越多的被应用的嵌入式系统中。

SD卡的使用非常方便,常见的有两种工作模式:SPI和SDIO。SPI是串行的工作模式,速度相对较低,但是使用方便,只要MCU含有SPI接口均可使用。SDIO模式,可以最多4线传输,因此速度比较快,由于SD卡的普及,越来越多的MCU内部集成了SDIO控制器,简化了我们的工作。本文以三星s3c2410为例介绍。

  1. SD卡的接口电路

  

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑娑⑺囬悽绋垮瀭濡わ絽鍟粻娑樏归敐鍛础缂佸鑳剁槐鎾诲磼濮橆兘鍋撻悜鑺ュ€块柨鏇氱劍閹冲矂姊绘担鍛婂暈闁荤喆鍎抽幑銏狀潨閳ь剙顕f繝姘亜缁炬媽椴搁弲顒勬⒑閹稿海绠撴繛璇х到鏁堟俊銈呮噺閸嬧剝绻濇繝鍌涘櫣妞わ絽銈搁幃浠嬵敍濞戞ɑ璇為梺璇″枟閻燂妇鎹㈠┑瀣倞闁靛ě鍐ㄥ婵犵數濮烽弫鎼佸磹椤栫偛鐒垫い鎺戝绾惧鏌熼崜褏甯涢柣鎾寸洴閹鏁愭惔鈥茬敖婵犫拃鍐粵闁逛究鍔嶇换婵嬪川椤曞懍鍝楅梻浣告贡閹虫挾鈧氨澧楁穱濠囧箹娴h倽銊╂煥閺冣偓閸庡磭绱為幒妤佲拻闁稿本鐟ㄩ崗宀勬煙閾忣偅宕岀€规洜鏁诲浠嬵敇閻愭鍞甸梻浣芥硶閸o箓骞忛敓锟�...

  2. SD卡的协议

SD卡的控制指令非常强大,支持SPI,SDIO模式,兼容MMC等。而且不同的

指令有不同的响应(3种),这在我们使用指令是要注意的。我在附件里面放了一个SD卡的中文协议,包括数据包介绍,指令索引介绍,反馈介绍等。

  3. S3C2410 SD卡控制器的介绍

SD卡控制器帮我们完成了协议上的很多工作,我们只需要按照协议配置寄存器

以及按照协议流程对SD卡操作就可以完成SD卡的功能了。

SDICON:完成SD卡基础配置,包括大小端,中断允许,模式选择,时钟使能等。

SDIPRE:对SDCLK的配置。

SDICARG:指令的参数存放在这里

SDICCON:控制指令形式的寄存器,配置SPI还是SDI指令,指令的反馈长度,是否等待反馈,是否运行指令,指令的索引等

SDICSTA:指令状态寄存器,指令是否超时,传送,结束,CRC是否正确等

SDIRSPO:反映SD的状态

SDITIMER:设置超时时间

SDIBSIZE:block的大小

SDIDCON:数据控制寄存器,配置是几线传输,数据发送方向,数据传送方式等。

SDIDSTA: 数据状态寄存器,数据是否发送完,CRC效验,超时等

SDIFSTA: FIFO状态积存器,DMA传输时否判断FIFO

SDIMSK:中断屏蔽

  4. SD卡SDIO模式的驱动分析

4.1 SD卡的初始化

步骤是:1)配置时钟,慢速一般为400K,设置工作模式

2)发送CMD0,进入空闲态,该指令没有反馈

3)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈

4)发送CMD2,验证SD卡是否接入,长反馈

5)发送CMD3,读取SD卡的RCA(地址),短反馈

6)发送CMD7,使能SD卡

7)配置高速时钟,准备数据传输,一般20M~25M

8)发送CMD55+ACMD6配置为4bit数据传输模式

代码如下:

int SD_card_init(void)

{

int i;

char key;

rSDIPRE=PCLK/(2*INICLK)-1; //时钟 400KHz

rSDICON=(1<<4)|(1<<1)|1; // Type B, FIFO reset, clk enable

rSDIBSIZE=0x200; // 512byte(128word)

rSDIDTIMER=0xffff; // Set timeout count

for(i=0;i<0x1000;i++); // Wait 74SDCLK for MMC card

CMD0(); //进入idle

//-- Check SD card OCR

if(Chk_SD_OCR()) //发送AM41,判断电压正确否

;

else

{

;

return 0;

}

RECMD2:

rSDICARG=0x0;

// CMD2(stuff bit),判断连接

rSDICCON=(0x1<<10)|(0x1<<9)|(0x1<<8)|0x42;

//lng_resp, wait_resp, start, CMD2

//-- Check end of CMD2

if(!Chk_CMDend(2, 1)) //查询反馈是否正确

goto RECMD2;

RECMD3:

//--Send RCA,得到SD卡的地址

rSDICARG=MMC<<16;

// CMD3(MMC:Set RCA, SD:Ask RCA-->SBZ)

rSDICCON=(0x1<<9)|(0x1<<8)|0x43;

// sht_resp, wait_resp, start, CMD3

//-- Check end of CMD3

if(!Chk_CMDend(3, 1))

goto RECMD3;

//--Publish RCA

RCA=( rSDIRSP0 & 0xffff0000 )>>16;

//--State(stand-by) check

if( rSDIRSP0 & 0x1e00!=0x600 )

// CURRENT_STATE check 验证反馈

goto RECMD3;

rSDIPRE=PCLK/(2*NORCLK)-1;

// 设置高速时钟Normal clock="25MHz"

Card_sel_desel(1); // Select SD

Set_4bit_bus(); //设置为4bit模式

}

void Set_4bit_bus(void)

{

Wide=1;

SetBus();

}

void SetBus(void)

{

SET_BUS:

CMD55();

// Make ACMD

//-- CMD6 implement

rSDICARG=Wide<<1;

//Wide 0: 1bit, 1: 4bit

rSDICCON=(0x1<<9)|(0x1<<8)|0x46;

//sht_resp, wait_resp, start, CMD55

if(!Chk_CMDend(6, 1)) // ACMD6

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top