搜索
bottom↓
回复: 2

求助,关于proteus模拟mmc卡块写入的问题

[复制链接]

出0入0汤圆

发表于 2011-7-5 15:22:20 | 显示全部楼层 |阅读模式
我用Keil uVision3和Proteus 7.5SP3联调,用AT89C51RC2,没有用硬件SPI,用IO模拟SPI

对MMC卡的操作驱动程序都是网上下载现成的程序,应该本身是没有问题的

我用这个程序读取MMC镜像上的块数据成功,并且是正确的

但是块写入的程序无论怎么试,都没有试过一次是成功的

我用proteus的示波器看波形,直到写入块写入命令(CMD24)之后,时序都是正确的,可以读取到MMC卡返回0x00响应命令

写完512字节后,无论等多久,读取的数据都是0xff,再用块读取函数读取刚写过的块,发现没有写入

附上块写入程序

unsigned char SD_Write_Sector(unsigned long addr,unsigned char *buffer)        //向SD卡中的指定地址的扇区写入512个字节,使用CMD24(命令24)
{  
unsigned char temp,time;
unsigned int i;
unsigned char pcmd[] = {0x58,0x00,0x00,0x00,0x00,0xff}; //向SD卡中单个块(512字节,一个扇区)写入数据,用CMD24

addr<<=9; //addr = addr * 512        将块地址(扇区地址)转为字节地址 [这里就限制了SD卡的最大容量为4G]
       
pcmd[1]=((addr&0xff000000)>>24); //将字节地址写入到CMD24字节序列中
pcmd[2]=((addr&0x00ff0000)>>16);
pcmd[3]=((addr&0x0000ff00)>>8);

SD_CS=0;//打开SD卡片选

time=0;
do
{  
  temp=SD_Write_Cmd(pcmd);
  time++;
  if(time==TRY_TIME)
  {
   SD_CS=1; //关闭片选
   return(temp); //命令写入失败
  }
}while(temp!=0);

for(i=0;i<100;i++) //这里要插入若干时钟信号
{
  SD_spi_read();
}
       
SD_spi_write(0xfe);//写入开始字节 0xfe,后面就是要写入的512个字节的数据       
       
for(i=0;i<512;i++) //将缓冲区中要写入的512个字节写入SD卡
{
  SD_spi_write(buffer);
}
  
SD_spi_write(0xff);
SD_spi_write(0xff); //两个字节的CRC校验码,不用关心
   
   
temp=SD_spi_read();   //读取返回值
if((temp&0x1F)!=0x05) //如果返回值是 XXX00101说明数据已经被SD卡接受了
{
  SD_CS=1;
  return(WRITE_BLOCK_ERROR); //写块数据失败
}

while(SD_spi_read()!=0xff);//等到SD卡不忙(数据被接受以后,SD卡要将这些数据写入到自身的FLASH中,需要一个时间)
                                                    //忙时,读回来的值为0x00,不忙时,为0xff

SD_CS=1; //关闭片选

SD_spi_write(0xff);//按照SD卡的操作时序在这里补8个时钟
return(0);                 //返回0,说明写扇区操作成功
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-7-6 15:54:57 | 显示全部楼层
这里应该有很多人试过用proteus操作MMC吧

我试过很多种方法都不能解决这个问题,依然是能读不能写,我没有选写保护

我也下载了很多其他人写的程序,都不能用,我怀疑是proteus的问题,难道还有什么设置我漏了的?

附上MMC器件的设置图



MMC (原文件名:mmc.jpg)

出0入0汤圆

发表于 2012-1-3 21:23:12 | 显示全部楼层
我也遇到同样的问题,请问楼主,不能写入的问题你解决了吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 23:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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