OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5111|回复: 1

SD卡实验这句“r1=SD_SendBlock(0,0xFD)”意义何在?

[复制链接]

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2014-12-26 16:22:42 | 显示全部楼层 |阅读模式
5金钱
SD卡实验中有个u8 SD_WriteDisk(u8 *buf,u32 sector,u8 cnt)函数:
[mw_shl_code=c,true]//写SD卡 //buf:数据缓存区 //sector:起始扇区号 //cnt:扇区个数 //返回值:0,ok;其他,失败. u8 SD_WriteDisk(u8 *buf,u32 sector,u8 cnt) { u8 r1; if(SD_Type!=SD_TYPE_V2HC) sector<<=9;//转换为字节地址 if(cnt==1) { r1=SD_SendCmd(CMD24,sector,0X01);//读命令 if(r1==0)//指令发送成功 { r1=SD_SendBlock(buf,0xFE);//写512个字节 } } else { if(SD_Type!=SD_TYPE_MMC) { SD_SendCmd(CMD55,0,0X01); //告诉SD卡下一个是特殊应用命令(ACMD) SD_SendCmd(CMD23,cnt,0X01); //ACMD23,设置写前预擦除的数据块数,用来加速多数据块写操作 } r1=SD_SendCmd(CMD25,sector,0X01);//连续写命令 if(r1==0) { do { r1=SD_SendBlock(buf,0xFC);//发送512个字节 buf+=512; } while(--cnt && r1==0); r1=SD_SendBlock(0,0xFD);//发送512个字节 } } SD_DisSelect();//取消片选 return r1;// } [/mw_shl_code]
最后一句r1=SD_SendBlock(0,0xFD);//发送512个字节      意义何在?这是SD_SendBlock函数:
[mw_shl_code=c,true]//向sd卡写入一个数据包的内容 512字节 //buf:数据缓存区 //cmd:指令 //返回值:0,成功;其他,失败; u8 SD_SendBlock(u8 *buf,u8 cmd) { u16 t; if(SD_WaitReady()) return 1;//等待上次写操作完成 SD_SPI_ReadWriteByte(cmd); if(cmd!=0XFD)//不是结束指令 { for(t=0;t<512;t++) SPI2_ReadWriteByte(buf[t]);//提高速度,减少函数传参时间 SD_SPI_ReadWriteByte(0xFF);//忽略crc SD_SPI_ReadWriteByte(0xFF); t=SD_SPI_ReadWriteByte(0xFF);//接收响应 if((t&0x1F)!=0x05) return 2;//响应错误 } return 0;//写入成功 }[/mw_shl_code]
SD_SendBlock函数输入参数1为指针变量,这里居然输入0,这是不允许的吧?
输入参数2为发送的命令,这里为0xFD,可函数体中的if语句将0xfd给剃掉了,不会执行括号内的内容。
也就只有
if(SD_WaitReady()) return 1;//等待上次写操作完成
SD_SPI_ReadWriteByte(cmd);
不就是等待回复0xFF,再发送0XFD。这有何作用,能干嘛呢?

r1=SD_SendBlock(0,0xFD);要是按注释写的是发送512个字节,我就纳闷了,已经将cnt个扇区发送出去了,再加一个扇区(512字节)这是作何?


最佳答案

查看完整内容[请看2#楼]

r1=SD_SendBlock(0,0xFD);//发送512个字节 注释有误,应该是发送结束指令。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-26 16:22:43 | 显示全部楼层
r1=SD_SendBlock(0,0xFD);//发送512个字节
注释有误,应该是发送结束指令。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 02:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表