CMD252C4
-
QFN24/23+
原装现货认证排名
CMD253C3
10000
/23+
-
CMD25
80000
-/23+
原装现货
CMD25
80000
-/23+
原装现货
CMD25
80000
-/23+
原装现货
CMD25
80000
-/23+
原装现货
CMD25
10337
BGA16D/-
-
CMD25
80000
-/23+
原装现货
CMD25
3715
MLP/2023+
全新原装、公司现货销售
CMD25
12500
QFN/21+
全新原装正品,一级代理价格优势,可长期订货
CMD25
8750
SOP8/2035+
百分百公司全新进口原装现货库存
CMD25
3588
-/-
原装 部分现货量大期货
CMD25
80000
-/23+
原装现货
CMD25
80000
-/23+
原装现货
CMD25
10337
BGA16/-
真实库存绝无虚报
模式的等待状态,这是数据传输模式的初始状态。此时通过卡选择命令cmd7就进入传输状态,可以进行数据的写入与读出了。 3. 2 sd写操作 sd卡的读写是以数据块为基本单位的。数据块的大小因卡而异,通常块大小为512字节(byte)到2048字节。特定卡的数据块的大小在卡的特性寄存器(csd)中有定义。特殊情况下,部分卡支持小块(最小可以字节为单位)读写。但推荐以块为单位进行读写。 sd卡支持单块写入和多块写入。单块写入使用命令cmd24,多块写入使用命令cmd25。当有多个数据块要写入时,使用多块写入要比多次执行单块写入能获得更高的效率。 由于sd卡内部具有缓存区,上述过程sd卡处于接收数据状态,接收到的数据并未真正写入到sd卡的记忆体(memo2ry)内,而是存放在sd卡的缓存区内。当接收数据完成后, sd卡自动进入数据编程状态,这才真正地把数据写入sd卡的记忆体内。 3. 3 sd读操作 与写操作对应, sd卡支持单块读取和多块读取。单块读取使用命令cmd17,多块读取使用命令cmd18。当有多个数据块要读取
d(sd_init,0); //发送初始化命令retry++;if(retry==100) //重试100次{sd_disable(); //关片选return(init_cmd1_error); //如果重试100次失败返回错误号}}while(temp!=0);sd_disable(); //关片选return(true); //返回成功}数据块的读写 完成sd卡的初始化之后即可进行它的读写操作。sd卡的读写操作都是通过发送sd卡命令完成的。spi总线模式支持单块(cmd24)和多块(cmd25)写操作,多块操作是指从指定位置开始写下去,直到sd卡收到一个停止命令cmd12才停止。单块写操作的数据块长度只能是512字节。单块写入时,命令为cmd24,当应答为0时说明可以写入数据,大小为512字节。sd卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低5位为00101时,表明数据块被正确写入sd卡。 在需要读取sd卡中数据的时候,读sd卡的命令字为cmd17,接收正确的第一个响应命令字节为0xfe,随后是512个字节的用户数据块,最后为2个字节的crc验证码。
接收数据,并通过txdata 发送数据。主要的数据传输方式有两种:比特流数据传输和多块数据传输,另外,该控制器还支持无响应包数据传输。为确保传输的正确,包含了crc16 校验的子模块。 2.2 cmd控制模块的设计 由于sd/mmc 卡的操作命令不一致,在模块中并没有对命令作译码,而是通过软件来设置命令的类型。单块(signalblock data)读数据命令(cmd17),写数据命令(cmd24);多块(multi-block data)读数据命令(cmd18),写数据命令(cmd25)等需要控制模块根据sd_cmd_index 寄存器的内容来发布相应的命令,并作不同的状态转换。cmd 控制模块的状态转换图如图2 所示。 图2 cmd 控制模块的状态转换 2.3 data控制模块的设计 本模块主要功能是向卡发送数据和从卡读取数据,另外,针对sd 卡该模块可以通过data[3] 检测卡是否插入,通过data[2]发送读等待信号,通过data[1]接收卡送来的中断信号以及通过data[0]来检测卡是否处于忙状态。 apb 总线上还有其他一些功能模块,如sp
输入输出。 以下是本系统软件模拟spi时序的部分c语言代码: (2)sd卡的初始化。 sd卡的初始化流程图,如图10所示。sd卡上电延时74个时钟周期后,单片机向sd卡发送复位命令cmd0使sd卡进入spi模式,之后循环发送激活sd卡指令cmd1直到接收到sd卡响应的第0位为"0". 图10 sd卡初始化流程 (3)sd卡数据块的读写。 完成sd卡的初始化后,就可以对sd卡进行读写操作。读写操作都是通过指令来完成的:单块写命令cmd24,多块写命令cmd25;单块读命令cmd17,多块读命令cmd18.单块读写时,数据块的长度为512字节,多块读写时sd卡收到一个停止命令cmd12后停止读写。图11和图12分别是sd卡单块读、写的spi时序图,图13和图14分别是单块读、写sd卡的软件流程图。 图11 单块读时序图 图12 单块写时序图 图13 读sd卡流程图 图14 fat16文件读写流程图 4. fat16 文件读写 按照fat16 文件系统的文件组织规范,编写读文件函数和写文件函数。fat16 文件读写
retry==100) //重试100次 {sd_disable(); //关片选 return(init_cmd1_error); //如果重试100次失败返回错误号 } }while(temp!=0); sd_disable(); //关片选 return(true); //返回成功 } 数据块的读写 完成sd卡的初始化之后即可进行它的读写操作。sd卡的读写操作都是通过发送sd卡命令完成的。spi总线模式支持单块(cmd24)和多块(cmd25)写操作,多块操作是指从指定位置开始写下去,直到sd卡收到一个停止命令cmd12才停止。单块写操作的数据块长度只能是512字节。单块写入时,命令为cmd24,当应答为0时说明可以写入数据,大小为512字节。sd卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低5位为00101时,表明数据块被正确写入sd卡。 在需要读取sd卡中数据的时候,读sd卡的命令字为cmd17,接收正确的第一个响应命令字节为0xfe,随后是512个字节的用户数据块,最后为2个字节的crc验证码。