完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教一下SD卡的问题,第一个问题是:以下函数中的r1 = SD_ReadWriteByte(0xFF);是什么意思?为什么要发送0xff,且if(retry==0xfffe) 中的0xff又是意思?
u8 SD_WaitReady(void) { u8 r1; u16 retry; retry = 0; do { r1 = SD_ReadWriteByte(0xFF); if(retry==0xfffe) { return 1; } }while(r1!=0xFF); return 0; } 我在不完全手册上看到的是 r1=SPIx_ReadWriteByte(0xFF)&0X1F,为什么要取低5位呢? 第二个问题如下:是不是每次写命令都要在写命令之前和写完命令之后添加8个时钟周期,也就是添加SD_ReadWriteByte(0xff)函数,其中的while((r1 = SD_ReadWriteByte(0xFF))==0xFF)该怎么理解呢?在线急等答复,再次谢谢! u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc) { unsigned char r1; unsigned char Retry = 0; SD_ReadWriteByte(0xff); //片选端置低,选中SD卡 SD_CS_ENABLE(); //片选置低 //发送 SD_ReadWriteByte(cmd | 0x40); SD_ReadWriteByte(arg >> 24); SD_ReadWriteByte(arg >> 16); SD_ReadWriteByte(arg >> 8); SD_ReadWriteByte(arg); SD_ReadWriteByte(crc); //写CRC效验值 //等待响应,或超时退出 while((r1 = SD_ReadWriteByte(0xFF))==0xFF) { Retry++; if(Retry > 200) { break; } } //关闭片选 SD_CS_DISABLE(); //在总线上额外增加8个时钟,让SD卡完成剩下的工作 SD_ReadWriteByte(0xFF); //返回状态值 return r1; } |
|
相关推荐
2个回答
|
|
第一个问题,很多人问过.论坛应该有记录.
就是让MOSI一直保持高电平. 而if(retry==0xfffe) 是一个延时而已. 为什么要取低5位,这个要看SD卡指令表. 第二个问题. 看代码就知道了,是的. 其中while是等待SD卡返回正确响应.注释有说. |
|
|
|
同学,请问你用的什么牌子和型号的sd卡呢?
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1712 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1600 浏览 1 评论
1038 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
715 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1651 浏览 2 评论
1903浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
694浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
546浏览 3评论
567浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
533浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 15:56 , Processed in 1.540947 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号