OpenEdv-开源电子网

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

请教原子哥,SD卡的问题。

[复制链接]

6

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2013-12-6
在线时间
46 小时
发表于 2013-12-6 09:15:49 | 显示全部楼层 |阅读模式
用ATmega128A里面的硬件SPI控制SD卡,初始化和读取数据都成功,在向SD卡扇区里面写数据的时候,时序也是对的,但是该扇区里面的数据全部变成0xFF,而不是我想写进去的数据。

BYTE disk_writep (
const BYTE *buff, /* Pointer to the bytes to be written (NULL:Initiate/Finalize sector write) */
DWORD sa /* Number of bytes to send, Sector number (LBA) or zero */
)
{
BYTE res =1;
BYTE r;
unsigned int ty = 0;
SELECT();
if(!(CardType&CT_BLOCK)){
sa*= 512;
}
if(send_cmd(CMD24,sa) == 0){
SPI_MasterReviceByte();
SPI_MasterSendByte(0xFE);
for(ty = 0; ty <512; ty++){
SPDR = buff[ty];
while(!(SPSR&(1<<SPIF)));
}
SPI_MasterReviceByte();
SPI_MasterReviceByte();
for(ty =0; ty <1000; ty++){
res = SPI_MasterReviceByte();
if(res!=0xFF){
break;
}
}
if((res&0x1F)==0x05){
res = 0;
}
do{
r= SPI_MasterReviceByte();
}while(r!=0xff);
}
DESELECT();
SPI_MasterReviceByte();
return res;
}

问题解决,在ICCAVR里面把const放在flash里面,这时候buff指向的地址就是flash里面的地址,而不是内存里面的地址,把const去掉或者在函数里面定义一个unsigned char *buff1 = (unsigned char *)buff;发送数据时候用buff1.

有人问我会什么?我低头看看我手里的书,我发现我只会用。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-12-6 09:47:06 | 显示全部楼层
回复 支持 反对

使用道具 举报

6

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2013-12-6
在线时间
46 小时
 楼主| 发表于 2013-12-6 09:49:05 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
谢谢
有人问我会什么?我低头看看我手里的书,我发现我只会用。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 16:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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