主题 : mini2440的2440test程序中的SD卡读取程序分析 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 11182
精华: 0
发帖: 69
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 138 分
注册时间: 2009-11-29
最后登录: 2011-11-27
楼主  发表于: 2010-07-18 16:47

 mini2440的2440test程序中的SD卡读取程序分析

超级新手,自己写的sdi.c的注释,高手请勿拍砖,呵呵,感谢。错误之处,请大家不吝赐教。
  断断续续的把2440test的sdi.c程序看完了,顺带着写上自己的注释,主要参考2440中文手册第19章SDI部分,还有SD卡读写规范,按照上面的一步一步来做,完成SD卡读取。
 

SD操作(这个是SD卡读取的核心思想,所有的工作都按照这个最高指示来进行)
   串行时钟线同步在五根数据线上的信息移位和采样。传输频率通过设定 SDIPRE 寄存器的相应位的设定来控制。你可以修改频率来调节波特率数据寄存器值。
编程过程(普通)
对 SDI 模块编程,按以下基本步骤:
(1)设置 SDICON 寄存器来配置适当的时钟及中断使能
(2)设置 SDIPRE 寄存器配置适当的值。
(3)等待 74个SDCLK 时钟以初始化卡。

CMD 路径编程
(1)写命令参数 32位到SDICmdArg
(2)决定命令类型并通过设置 SDICmdCon开始命令传输
(3)当 SDICmdSta 的特殊标志被置位,确认 SDICMD 路径操作的结束。
(4)如果命令类型是不相应,标志是 CmdSent。
(5)如果命令类型是相应,标志是 RspFin。
(6)通过对相应位写 1,清除 SDICmdStaD的标志。
数据路径编程
(1)写数据超时期间到 SDIDTimer
(2)写模块大小(模块长度)到 SDIBSize(通常是 0x80字)
(3)确定模块模式,宽总线,DMA等且通过社子 SDIDatCon来开始数据传输
(4)发送数据->写数据到数据寄存器(SDIDAT),当发送 FIFO 有效(TFDET 置位),或一半(TFHalf置位),或空(TFEmpty置位)。
(5)接收数据->从数据寄存器(SDIDAT)读数据,当接收 FIFO 有效(RFDET 置位),或满(RFFull置位)。或一半(RFHalf置位),或准备最后数据(RFLast 置位)。
(6)当 SDIDatSta寄存器的 DatFin标志置位,确认SDIDAT路径操作结束。
(7)通过对相应位写 1,清除 SDIDatSta 的标志。
  

描述:sdi.c
附件: sid.rar (10 K) 下载次数:438
级别: 新手上路
UID: 32814
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2010-11-21
最后登录: 2013-11-18
1楼  发表于: 2010-11-21 21:31
多谢楼主……正要学习