久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1795|回復(fù): 6
收起左側(cè)

請(qǐng)問單片機(jī)以SPI方式讀寫TF卡時(shí),小容量卡512M和8G卡的讀寫方式不一樣嗎?

[復(fù)制鏈接]
ID:1010435 發(fā)表于 2024-1-22 20:50 | 顯示全部樓層 |閱讀模式
我用的是STC8H單片機(jī),用IO模擬SPI的方式讀TF卡,用小容量(512M)讀是對(duì)的,同樣的程序,但是換用8G卡的時(shí)候,讀出來的是亂碼,三張8G卡0x00地址讀出都是一樣的。所有TF卡都是FAT32 4096字節(jié)格式化的。2張8g卡是class10,1張是class6.
比如:
單片機(jī)讀8G TF卡的0x00地址:
                   3C ED FA 5B 95 DD 72 5B 3E E7 05 C6 E5 B9 B7 8F
                    58 4F 7B 2C 21 63 F5 CD 42 43 8F E8 8A 0D F1 5F
                    B6 C7 2B 2F 71 83 34 3A C0 33 9D 7A 50 1E FB 4A
                    37 7F 27 DB F1 C7 C0 27 78 97 01 EB 78 9E 62 71
                    B3 3A 33 0E 06 09 49 AF 6E 8A 8A A1 5D A0 6D 17
                    96 D7 5B 48 B0 85 76 D0 22 0A 4F D7 5C 9F 16 19
                    AA D2 60 4F A4 9E 7C 53 3B 1C 53 FE 0C E9 A0 52
                    F7 C9 3C 3F 1F 34 7C CC D3 1F A9 F7 E8 81 7D 47
                    B5 22 9B 55 96 9E AD 66 5F 3A ED 57 45 13 61 08
                    98 F4 DF F9 E1 2C B0 E5 79 6A 7D EF 41 DB F0 C2
                    82 23 4B AC 40 AF BE 8C E2 03 84 13 04 B7 F1 7A
                    1D CA 09 CF 51 21 09 ED 7B 8B 1C 46 6E F3 36 64
                    .........................................

用winhex查看0x00地址是正常的
1234.png

請(qǐng)問大容量卡的spi讀寫和小容量的步驟不一樣?


貼個(gè)程序

//寫一個(gè)字節(jié)到sd卡 模擬spi總線方式
void sdwrite (unsigned char n)
{
unsigned char i;
for (i=8;i;i--)
{
sd_clk=0;
sd_di=(n&0x80);
n<<=1;
sd_clk=1;
}
sd_di=1;

}

//從sd卡讀一個(gè)字節(jié),模擬spi方式
unsigned char sdread()
{
unsigned char n,i;
for (i=8;i;i--)
{
sd_clk=0;
sd_clk=1;
n<<=1;
if(sd_do) n|=1;

}
return n;
}

//檢測(cè)sd卡的響應(yīng)
unsigned char sdresponse()
{
unsigned char i=0,response;
while(i<=8)
{
response=sdread();
if(response==0x00)
break;
if(response==0x01)
break;
i++;
}

return response;
}

//發(fā)送命令到sd卡
void sdcommand(unsigned char command,unsigned long argument,unsigned char CRC)
{
sdwrite(command|0x40); // 0x40:0100 0000
sdwrite(((unsigned char *)&argument)[0]);
sdwrite(((unsigned char *)&argument)[1]);
sdwrite(((unsigned char *)&argument)[2]);
sdwrite(((unsigned char *)&argument)[3]);
sdwrite(CRC);

}

//初始化sd卡
unsigned char sdlnit()
{
int delay=0,trials=0;
unsigned char i;
unsigned char response=0x01;
sd_cs=1;
for(i=0;i<9;i++)
sdwrite(0xff);
sd_cs=0;

// sdcommand(0x00,0,0x95); // 512M的TF卡用這個(gè)命令
sdcommand(0x00,0,0x87); //8G TF卡用這個(gè)命令

response=sdresponse();
if(response!=0x01)
{
return 0;
}
while(response==0x01)
{
sd_cs=1;
sdwrite(0xff);
sd_cs=0;
sdcommand(0x01,0x00ffc0000,0xff);
response=sdresponse();
}
sd_cs=1;
sdwrite(0xff);
return 1;
}

//從sd卡指定地址讀取數(shù)據(jù),一次最多512字節(jié)
unsigned char sdreadblock(unsigned char *block,unsigned long address,int len)
{
unsigned int count;
sd_cs=0;
sdcommand(0x11,address,0xff);
if(sdresponse()==0) //檢測(cè)sd卡響應(yīng) 如果是0
{
while(sdread()!=0xfe);
for(count=0;count<len;count++)
*block++=sdread();
for(count=0;count<512;count++)
sdread();
sdread();
sdread();
sd_cs=1;
sdread();
return 1;
}

}

//主程序
void main()
{
unsigned long a,test;

IO_int(); //IO初始化

LCD_initial(); //LCD屏初始化

LCD_Fill(0,0,lcdwidth,lcdheight,white);//設(shè)置背景顏色

UartInit() ;
sdlnit();
sdreadblock(DAT,0,512); //先讀取0x00地址開始的512個(gè)字節(jié)到緩存
for(a=0;a<512;a++)
{
UartSend(DAT[a]);
}

while(1)
{

}

}


回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2024-1-22 21:09 | 顯示全部樓層
反復(fù)測(cè)試 應(yīng)該是卡在了初始化 sdcommand(0x01,0x00ffc0000,0xff);這個(gè)命令上,response一直是1,跳不出while循環(huán),怎么辦???
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2024-1-22 21:15 | 顯示全部樓層
sdcommand(0x01,0x00ffc0000,0xff);好像初始化中這條指令有問題,response一直是1,挑不出while循環(huán),怎么辦???
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2024-1-22 23:02 | 顯示全部樓層
你用什么指令讀取的SD卡容量?
用邏輯分析儀檢查下時(shí)序是否有錯(cuò)誤,按照數(shù)據(jù)手冊(cè)編寫,隨意編輯扇區(qū)可能會(huì)導(dǎo)致文件系統(tǒng)結(jié)構(gòu)損壞。
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2024-1-22 23:15 | 顯示全部樓層
使用WinHex搜索這段數(shù)據(jù): 3C ED FA 5B 95 DD 72 5B 3E E7 05 C6 E5 B9 B7 8F 看是否能找到。
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2024-1-22 23:39 | 顯示全部樓層
npn 發(fā)表于 2024-1-22 23:02
你用什么指令讀取的SD卡容量?
用邏輯分析儀檢查下時(shí)序是否有錯(cuò)誤,按照數(shù)據(jù)手冊(cè)編寫,隨意編輯扇區(qū)可能會(huì) ...

sdcommand(0x11,address,0xff);這句 CMD17命令
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2024-1-23 10:30 | 顯示全部樓層
1.  sdcommand(0x01,0x00ffc0000,0xff); 改為 sdcommand(0x01,0x00ffc000,0xff); 你多了一個(gè)零。
2. for(i=0;i<9;i++)  sdwrite(0xff);  改為  for(i=0;i<15;i++) sdwrite(0xff); 發(fā)74個(gè)以上時(shí)鐘才穩(wěn)妥。
3. 0x87和0x95不是區(qū)分卡大小的是USB2.0 還是1.0 啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色网址在线播放 | 欧美久久国产 | 欧美一级特黄aaa大片在线观看 | 日韩欧美在线观看视频 | 2019精品手机国产品在线 | 国产一区二区精华 | 91久久精品一区二区三区 | 91色综合| 午夜电影合集 | 久久亚 | 久久国| 亚洲免费一区二区 | 成人国产在线视频 | 国产成人精品a视频 | 亚洲天堂男人的天堂 | 91在线精品视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 久草网站| 亚洲精品1区 | av中文字幕在线观看 | 日韩一级精品视频在线观看 | 羞羞视频一区二区 | 免费黄色录像视频 | 亚洲一区播放 | 成人免费视频 | 国产黄视频在线播放 | 成人精品一区二区三区四区 | 亚洲一区二区三区四区五区午夜 | 电影午夜精品一区二区三区 | 播放一级黄色片 | 亚洲天堂精品久久 | 亚洲一区二区三区在线 | 国产美女黄色片 | 欧美成人激情视频 | 在线观看一区 | 日韩中文字幕在线观看 | 日本不卡一区二区三区在线观看 | 高清不卡毛片 | 6080亚洲精品一区二区 | 欧美激情精品久久久久久变态 | 欧美精品一区在线发布 |