原创 S3c2410_SDIO_调试笔记<一>

2011-8-24 11:42 4208 16 17 分类: 消费电子

作者:下家山

一:SDIO简介

    在介绍SDIO原理前,还是先来点SDIO知识的普及工作吧!

新兴的消费性电子产品不仅要求大容量,高速,而且要求数据的保密性。因此,美国MEI公司,美国SanDisk 公司,日本Toshiba 公司,组成联合小组推出SD Card协议规范。该协议规范定义了SD Memory Card和SDIO Card。

我们平常所说的SD卡即SD Memory Card(Secure Digital Memory Card安全数字存储卡),专为存储数据而设计。该协议规范定义了SD Memory 卡的电压范围为1.6~3.6V,默认模式下最大时钟为25Mhz,速率最大可达到12.5M字节/秒(4根数据线);高速模式下,最大时钟可达到50Mhz,速率最大可达到25M字节/秒(4根数据线)。并支持SPI传输模式。目前规范的V1.10版本最大容量只支持到2Gbyte,但未来可达到32Gbyte。

SDIO Card ,即Secure Digital Input/Output Card(安全数字输入输出卡),是与SD Memory Card兼容的一种卡。其兼容能力包括:机制,电气特性,功耗,信号,软件。SDIO Card是为高速数据I/O传输,低功耗移动电子设备而设计的。目前,应用在wifi,gps,gprs,条码扫描器等设备接口部分。其电压范围为2.0~3.6V。协议规范定义了两种类型的SDIO Card,即高速SDIO Card和低速SDIO Card。高速SDIO Card 支持SPI,1-bit SD 和4-bit SD 传输模式,其时钟最大可达到25Mhz,速率最大可达到10M字节/秒。低速SDIO Card,只需要SPI和1-bit SD 传输模式,4-bit模式可选,其时钟最大为400Khz。

二:深入SDIO

虽然,SDIO接口的产品越来越多,但相比SD Memory Card来说,网上的资料很少。也就是说,基本上要靠自己了,网络帮不了你什么忙!

S3C2410 datasheet中SDIO部分的介绍不够详细,很多部分仅仅提到,因此我怀疑sumsung们并不重视这一部分。或者说,他们不擅长这部分。

不管调试哪个从设备,第一步想到应该是去读出该设备的ID号,因为每个设备肯定是有ID号的,而且在其Datasheet中应该有说明,这是证明你读写寄存器最简单的方法了。对于很多I2C总线接口的设备,读出设备的ID号比较简单,只要读出存放该设备ID号的寄存器就OK了;但,针对SDIO接口规范,要读出SDIO卡的ID号,就不只操作一个寄存器这么简单了。因为,SDIO的最大速率达到10Mbyte,这么高的速率肯定是以其复杂的协议规范为代价的。

21 SDIO Signal Pins

1.jpg

三 SDIO card ID

    要读出ID号,需要对卡进行初始化工作。下面是我在S3c2410上调试conexant wifi card 时的初始化顺序

2.jpg

 

3.1  S3C2410—SDIO相关寄存器设置

  对S3c2410的设置,要根据下列几种情况来考虑

   1,polling方式;

   2,interrupt 方式;

   3,DMA方式;

      因为,我最终是要用到DMA方式,所以我这里只介绍DMA方式的设置。(在调试过程中,一般是先从polling开始调试,因为其最简单)但,因初始化过程中只发送几个命令,所以,我还是采用的polling方式,即使用CMD53命令时,我才用到DMA。

    而初始化时只需要设置rSDIPRE,rSDICON,rSDIDTIMER三个寄存器:

    rSDIPRE:SDI 波特率设置寄存器,在发送数据前,波特率一般设置到400Khz;

    rSDICON:SDI 控制寄存器,只需ByteOrder, FRST, CTYP置位;

    rSDIDTIMER:数据超时寄存器;(等待SDI数据响应时间,一般设置到0xff00)

    在设置完这些寄存器后应该delay 74个clock。

    注意:发送每个命令前rSDICARG(命令参数寄存器),rSDICCON(命令控制寄存器)是必须设置的。

 

3.2 如何判断命令是否发送正确

       命令发送后,需要根据rSDICSTA(命令状态寄存器), rSDIRSP0-3(命令响应寄存器)来判断是否正确响应。  

                       rSDICSTA(命令状态寄存器)

3.jpg

 

 

如果,RspFin位置位,表示命令响应结束,但这并不代表命令响应正确,还有检测RspCrc, CmdTout 是否置位,如果置位则表示发生错误。(在发送cmd5时,crc位可以不管, 个人认为)在检测状态位的同时,还要判断RspIndex是否为你发送时的命令号。

       rSDIRSP0-3(命令响应寄存器)要根据你所发送的命令来解析是否正确。

3.3 得到CIS 结构指针地址

     3.3.1 什么是CIS

4.jpg

每个SDIO card 有一个CIS区域,在这个CIS区域内分成0-7八段,对应到FN0-FN7(Function Number 0-7)。而且,每个段的CIS都有一个CIS pointer(CIS 指针)指向其起始地址。(FN0-7代表每个SDIO卡支持功能数,发送CMD5后,响应R4的Number of I/O function 域指示卡所支持的最大功能号。即,如果Number of I/O function == 1,那么表示此卡支持FN0和FN1。FN0是每个卡都支持的,存放卡最基本的信息,Card Common Card Information Structure表示的就是这个意思,卡的ID号就存放在FN0所对应的CIS中,所以要读出卡的ID号,首先就要得到FN0所对应CIS的指针)

          对,CIS(CIA)区域的读写操作是通过CMD52来实现的。

          例:

          我在得到conexant wifi card CIS指针时操作如下:

           因为,卡ID号存放在common CIS内,所以我们需要操作FN0。根据SDIO协议规范FN0 CIS Pointer地址为0x09, 0x0A, 0x0B:

          

5.jpg

  

本系列文章:

S3c2410_SDIO_调试笔记<一>

S3c2410_SDIO_调试笔记<二>

S3c2410_SDIO_调试笔记<三>

S3c2410_SDIO_调试笔记<四>

S3c2410_SDIO_调试笔记<五>

S3c2410_SDIO_调试笔记<六>

S3c2410_SDIO_调试笔记<七>

 

文章评论1条评论)

登录后参与讨论

用户1602177 2011-8-24 16:34

博主辛苦了~感谢分享~~

用户1012893 2010-9-30 08:32

值得一读,谢谢共享。
相关推荐阅读
用户1037328 2016-04-17 17:59
好的理论可以避免犯错——读《丈量世界》有感!
     《丈量世界》,早就因为仰慕高斯而想看这本书      1.殊途同归      这本书写的是高斯和洪堡两个人,为什么要把这两个人放在一起写呢?因为高斯是一个宅男,不喜欢什么旅游,考察!他觉得...
用户1037328 2016-04-05 09:10
叛逆在爱因斯坦性格中的重要性(一)
叛逆在爱因斯坦性格中的重要性(一) 《爱因斯坦传》读书笔记      昨天晚上,读完了2016年书单的第二部书,《爱因斯坦传》。我想梳理一下自己读这本书的收获,或者说感悟!在读这...
用户1037328 2016-04-05 09:09
叛逆在爱因斯坦性格中的重要性(二)
叛逆在爱因斯坦性格中的重要性(二) 《爱因斯坦传》读书笔记                                四  叛逆性 在爱因斯坦的同时期科学家中,我想比他IQ...
用户1037328 2014-07-09 19:55
RTEMS系统时钟原理
作者,下家山(转载请注明作者及出处,请尊重原创)   专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 一:从应用看原理      每个...
用户1037328 2014-07-09 19:47
RTEMS在S3C2410上的移植(一)
作者:下家山(转载,请注明) 1:RTEMS开发环境建立 1.1开发环境建立前的准备工作 因为RTEMS开发环境主要用的是GNU的工具链,所以需要一台装有Linux的HOST. 1.2...
用户1037328 2014-07-09 19:45
深入浅出学Makefile<三,如何自动生成Makefile>
(请尊重原创,转载请注明,作者:下家山) 五: 运行make编译得到可执行文件 root@parson-desktop:/home/parson/tmp/automk# make gcc ...
我要评论
1
16
关闭 站长推荐上一条 /2 下一条