欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3966|回復: 8
收起左側

單片機驅動SD卡初始化失敗,一直卡在CMD0寫入失敗 求解

[復制鏈接]
回帖獎勵 25 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次(中獎概率 50%)
ID:743654 發(fā)表于 2020-11-3 17:08 | 顯示全部樓層 |閱讀模式
本帖最后由 cheney03 于 2020-11-4 11:11 編輯

最近在調試SD卡時,初始化時一直卡在CMD0寫入失敗  。SD卡從128M/256M/512/1G/2G都試過,SD卡讀寫模塊也試了幾個,不知道什么原因。還有一個問題,在初始化時速度不能高于400KHz,這個速度怎么計算?下面是我的延時函數(shù)和復位初始化過程。

單片機型號:STC89C52RC,晶振:11.0592MHz

void delay(unsigned int time)  //time取1000
{
while(time--);
}



******************************************************************
- 功能描述:復位SD卡,用到CMD0,使用SD卡切換到SPI模式
- 隸屬模塊:SD/SDHC模塊
- 函數(shù)屬性:內部
- 參數(shù)說明:SD卡的命令是6個字節(jié),pcmd是指向命令字節(jié)序列的指針
- 返回說明:調用成功,返回0x00,否則返回INIT_CMD0_ERROR (sdx.h中有定義)
******************************************************************/

unsigned char SD_Reset()
{
unsigned char time,temp,i;
unsigned char pcmd[] = {0x40,0x00,0x00,0x00,0x00,0x95};

is_init=1; //is_init置為1,讓SPI速度慢下來

SD_CS=1;
for(i=0;i<0x0f;i++) //初始時,首先要發(fā)送最少74個時鐘信號,這是必須的!!!
{
  SD_spi_write(0xff); //120個時鐘
}

SD_CS=0;
time=0;
do
{
  temp=SD_Write_Cmd(pcmd);//寫入CMD0
  time++;
  if(time==TRY_TIME)
  {
   return(INIT_CMD0_ERROR);//CMD0寫入失敗   
  }
}while(temp!=0x01);

SD_CS=1;
SD_spi_write(0xff); //按照SD卡的操作時序在這里補8個時鐘
Beep=0;
return 0;//返回0,說明復位操作成功
}
/******************************************************************
- 功能描述:初始化SD卡,使用CMD1
- 隸屬模塊:SD/SDHC模塊
- 函數(shù)屬性:內部
- 參數(shù)說明:無
- 返回說明:調用成功,返回0x00,否則返回INIT_CMD1_ERROR (sd.h中有定義)
******************************************************************/

unsigned char SD_Init()        
{  
unsigned char time,temp;
unsigned char pcmd[] = {0x41,0x40,0x00,0x00,0x00,0xff};//第2個字節(jié)為0x40  HCS置位,說明主機支持高容量卡

SD_CS=0;

time=0;
do
{
  temp=SD_Write_Cmd(pcmd);
  time++;
  if(time==TRY_TIME)
  {
    return(INIT_CMD1_ERROR);//CMD1寫入失敗
  }
}while(temp!=0);
                    
is_init=0; //初始化完畢,將is_init設置為0,為了提高以后的數(shù)據(jù)傳輸速度

SD_CS=1;  //關閉SD卡的片選

SD_spi_write(0xff); //按照SD卡的操作時序在這里補8個時鐘

Beep=0;
return(0); //返回0,說明初始化操作成功
}



SD卡讀寫 程序.docx

16.9 KB, 下載次數(shù): 13

回復

使用道具 舉報

ID:743654 發(fā)表于 2020-11-4 16:56 | 顯示全部樓層
沒人回答么,自己頂以下
回復

使用道具 舉報

ID:743654 發(fā)表于 2020-11-5 13:45 | 顯示全部樓層
寫入CMD0,返回值是FF,收不到回應0x01,是什么原因呢,哪位大神有成功驅動過SD卡的幫忙指導一下
回復

使用道具 舉報

ID:487909 發(fā)表于 2021-5-10 11:40 | 顯示全部樓層
sd卡cmd0寫入失敗的問題解決了嗎
回復

使用道具 舉報

ID:1039438 發(fā)表于 2023-3-2 14:31 | 顯示全部樓層
cheney03 發(fā)表于 2020-11-5 13:45
寫入CMD0,返回值是FF,收不到回應0x01,是什么原因呢,哪位大神有成功驅動過SD卡的幫忙指導一下

我的回復也是0xff,更換硬件線路和mcu頻率都無效果,
回復

使用道具 舉報

ID:1039438 發(fā)表于 2023-3-2 14:33 | 顯示全部樓層
unsigned char pcmd[] = {0x40,0x00,0x00,0x00,0x00,0x95};
我在別的程序中看到CMD0不是這樣的,
MCU_write_SD_command(0x00,0x00000000,0x95);//發(fā)送命令0將MMC置于SPI模式
回復

使用道具 舉報

ID:139866 發(fā)表于 2023-3-2 14:52 | 顯示全部樓層
直接上示波器或者邏輯分析儀抓波形,比你在這問快得多
回復

使用道具 舉報

ID:79094 發(fā)表于 2024-5-5 21:41 | 顯示全部樓層
我 cmd0 可以過  但是 cmd1  sd卡是過不了的   那是mmc卡 的代碼  剛找到原因
回復

使用道具 舉報

ID:878800 發(fā)表于 2024-5-6 08:52 | 顯示全部樓層
有沒有發(fā)現(xiàn)你的延時程序 int  time    整型數(shù)據(jù)  只有8位    256最大   哪來的1000 。想要1000的延時  只能做嵌套循環(huán)實現(xiàn)1000 。用C來寫延時程序不是很準。最好還是上指令集吧,算周期的時間是最準確的。實在不行,那就只能單獨編譯延時程序,模跑一下,看時間咯。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表