当前位置:首页 > 单片机 > 单片机
[导读]花了几天写了SD卡裸机驱动,现在还不完善,只支持4G以内的卡,以后再加上;现在经过修改可以写入数据了,亲测没问题.S3C6410_SDIO.C#include"s3c6410_system.h"#include"s3c6410_sdio.h"////////////////////////////////

花了几天写了SD卡裸机驱动,现在还不完善,只支持4G以内的卡,以后再加上;现在经过修改可以写入数据了,亲测没问题.


S3C6410_SDIO.C


#include"s3c6410_system.h"

#include"s3c6410_sdio.h"

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//配置

//块大小寄存器(0通道)BLKSIZE0

#defineBLKSIZE0_BLKSIZE0x0200//块大小为512字节

//传输模式寄存器(0通道)TRNMOD0

#defineTRNMOD0_CCSCON0//正常模式

#defineTRNMOD0_MUL1SIN0(0<<5)//默认为单区段操作模式

#defineTRNMOD0_RD1WT0(1<<4)//默认为读操作模式

#defineTRNMOD0_ENACMD12(0<<2)//自动CMD12禁止,多区段操作完成后主机自动发出停止命令

#defineTRNMOD0_ENBLKCNT(0<<1)//块计数器无效

#defineTRNMOD0_ENDMA(0<<0)//DMA无效

//主机控制寄存器(0通道)HOSTCTL0

#defineHOSTCTL0_WIDE8(0<<5)//这个为宽度被位1指定(数据传输宽度)

#defineHOSTCTL0_DMASEL(0<<3)//SDMA

#defineHOSTCTL0_OUTEDGEINV(0<<2)//时钟上升沿沿数据有效//这个寄存器有歧义,不知道到底是干啥用的

#defineHOSTCTL0_WIDE4(0<<4)//数据传输宽度。1BIT模式

//电源控制寄存器(0通道)PWRCON0

#definePWRCON0_SELPWRLVL(7<<1)//3.3V电源模式

#definePWRCON0_PWRON(1<<0)//电源打开

//容限寄存器(0通道)CAPAREG0

#defineCAPAREG0_V18(1<<26)//电压支持1.8V

#defineCAPAREG0_V30(0<<25)//电压不支持3v

#defineCAPAREG0_V33(1<<24)//电压支持3.3V

#defineCAPAREG0_SUSRES(1<<23)//支持暂停/恢复操作

#defineCAPAREG0_DMA(1<<22)//支持DMA

#defineCAPAREG0_HSPD(1<<21)//支持高速模式

#defineCAPAREG0_ADMA2(0<<19)//不支持DMA2

#defineCAPAREG0_MAXBLKLEN(0<<16)//最大块大小为512B

#defineCAPAREG0_BASECLK(25<<8)//SD基础始终25MHz

#defineCAPAREG0_TOUTUNIT(0<<7)//超时时钟单位KHZ

#defineCAPAREG0_TOUTCLK(10<<0)//超时时钟频率为10KHZ

//最大电流容限寄存器(0通道)MAXCURR0

#defineMAXCURR0_MAXCURR18(10<<16)//对于1.8V,最大电流为40MA

#defineMAXCURR0_MAXCURR30(10<<8)//对于3.0V,最大电流为40MA

#defineMAXCURR0_MAXCURR33(10<<0)//对于3.3V,最大电流为40MA

//控制寄存器2CONTROL2_0

#defineCONTROL2_0_ENSTAASYNCCLR(0<<31)//该位可以使正常和错误中断的异步明确启用状态位

#defineCONTROL2_0_ENCMDCNFMSK(0<<30)//不屏蔽指令冲突

#defineCONTROL2_0_CDINVRXD3(0<<29)//卡检测信号倒置对于RX_DAT[3]。禁止

#defineCONTROL2_0_SELCARDOUT(0<<28)//卡移除条件是“无卡插入”状态。

#defineCONTROL2_0_FLTCLKSEL(8<<24)//滤波器时钟(iFLTCLK)选择。

#defineCONTROL2_0_ENFBCLKTX(0<<15)//反馈时钟禁止,对于发送数据时钟

#defineCONTROL2_0_ENFBCLKRX(0<<14)//反馈时钟禁止,对于接收数据时钟

#defineCONTROL2_0_SDCDSEL(0<<13)//nSDCD用于SD卡检测信号

#defineCONTROL2_0_SDSIGPC(0<<12)//同步控制输出有效信号

#defineCONTROL2_0_ENBUSYCHKTXSTART(0<<11)//发送数据启动状态前忙碌状态检测。

#defineCONTROL2_0_DFCNT(0<<9)//反跳滤波器计数16iSDCLK

#defineCONTROL2_0_ENCLKOUTHOLD(1<<8)//SDCLK操作有效。

#defineCONTROL2_0_RWAITMODE(0<<7)//主机控制器释放读等待状态(自动)

#defineCONTROL2_0_DISBUFRD(0<<6)//正常模式,用0x20寄存器使用者可以读缓冲区(FIFO)数据

//HCLK=128MHZEPLL=24MHZ

#defineCONTROL2_0_SELBASECLK(2<<4)//基础时钟源选择。00或01=HCLK,10=EPLL输出时钟(来自系统)11=外部时钟源(XTI或XEXTCLk)

#defineCONTROL2_0_PWRSYNC(0<<3)//不同步,控制输入有效信号(指令,数据)

#defineCONTROL2_0_ENCLKOUTMSKCON(0<<1)//当卡插入被清除时,SDCLK输出时钟屏蔽。当处于无卡状态时,设置该区域为高位来停止SDCLK。

#defineCONTROL2_0_HWINITFIN(1<<0)//SD主机控制器硬件初始化完成。

//时钟控制寄存器(0通道)CLKCON0

#defineCLKCON0_SELFREQ(0x80<<8)//SDCLK频率最低

#defineCLKCON0_ENSDCLK(1<<2)//SD时钟启动。

#defineCLKCON0_ENINTCLK(1<<0)//中断时钟启动。

//超时控制寄存器(0通道)TIMEOUTCON0

/*******************************************************************************

*FunctionName:SDIO_DeInit

* Description : Dein

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为增进大家对工业以太网的认识,本文将对工业以太网的原理、工业以太网的关键技术以及工业以太网要解决的问题予以介绍。

关键字: 以太网 工业以太网 指数

为增进大家对工业以太网的认识,本文将对工业以太网网络优势、工业以太网和IOLINK的区别予以介绍。

关键字: 以太网 工业以太网 指数

为增进大家对工业以太网的认识,本文将对工业以太网的优势、工业以太网缺点、工业以太网的维护予以介绍。

关键字:

Apr. 23, 2024 ---- 随着节能成为AI推理服务器(AI Inference Server)优先考量,北美客户扩大存储产品订单,带动QLC Enterprise SSD需求开始攀升。然而,目前仅Solidi...

关键字: SSD AI 服务器

为增进大家对二极管的认识,本文将对续流二极管、续流二极管的工作原理以及二极管在工业产品中的应用予以介绍。

关键字: 二极管 指数 续流二极管

通过本文,您将了解到二极管反接是否有电压以及二极管在电子电路中的应用。

关键字: 二极管 指数 稳压电路

为增进大家对二极管的了解,本文将对ESD二极管和TVS二极管之间的区别予以介绍。

关键字: ESD TVS 二极管 指数

为增进大家对嵌入式主板的认识,本文将对嵌入式主板以及嵌入式主板常见问题及其解决方法予以介绍。

关键字: 嵌入式 指数 主板

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

为增进大家对嵌入式的认识,本文将对嵌入式、嵌入式工作相关的内容予以介绍。

关键字: 嵌入式 指数 嵌入式技术
关闭
关闭