我用PIC单片机读Kingston 1G SD卡读错误,(其它的SD卡 OK,Kingston 卡作读卡器在PC上也是可以,)
既应是我程序问题.
问题现象为初始化OK,但MBR,DBR,BPB都错误.后用WINHEX对比发现MBR时都读错了,得到的数据都是0XFF, (是第1个扇区的数据.)
Kingston的和其它的有什么不同?现在是Kingston的bpbstart得到的数据错误.也就是mmc_open_block(),有问题?但是只是Kingston的出现问题.
可否指点.
以下为程序:
void find_bpb(){
int32 bigtemp;
bpbstart=0;
mmc_open_block(0x00000000);
mmc_skip(0xE3); //e3=227 X2=454 从主引导记录里读到分区的起始扇区(从这个地址读到逻辑地址的0扇区)
mmc_read();
bpbstart=((int16) data_hi<<8);
bpbstart+=data_lo; //数据错误 !!问题出现.
mmc_cancel_block();
//------------BPB-------------FAT32---------------------------------------------
//bpbstart:256mb=101
mmc_open_block((int32) bpbstart); // 打开主引导区 /
**********************************************
////////////////////////////////////////////////////////////////////////////////
char mmc_open_block(int32 block_number){
block_number*=512;
output_low(MMC_cs); //SS=0; // set SS = 0 (on)
SPI_WRITE(0x51); // send mmc read single block command
SPI_WRITE(*(((char*)&block_number)+3)); // arguments are address
SPI_WRITE(*(((char*)&block_number)+2));
SPI_WRITE(*(((char*)&block_number)+1));
SPI_WRITE(0x00);
SPI_WRITE(0xFF); // checksum is no longer required but we always send 0xFF
if((mmc_response(0x00))==1) return 1; // if mmc_response returns 1 then we failed to get a 0x00 response (affirmative)
if((mmc_response(0xFE))==1) return 1; // wait for data token
return(0);
}
//////////////////////////////////////////
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>