Kingston SD卡读错误

2020-02-09 11:43发布

我用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);
}
//////////////////////////////////////////
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。