int wait_initV2() { int i=20000; int r; spi_spin(); while(--i) { if((r=cmd_CMD55())==1) { // printf("CMD55 %d\n",r); SPI(0xff); if((r=cmd_CMD41())==0) { // printf("CMD41 %d\n",r); SPI(0xff); return(1); } // else // printf("CMD41 %d\n",r); spi_spin(); } // else // printf("CMD55 %d\n",r); } return(0); }
int is_sdhc() { int i,r; spi_spin(); r=cmd_CMD8(); // test for SDHC capability // printf("cmd_CMD8 response: %d\n",r); if(r!=1) { wait_init(); return(0); } r=SPI_PUMP(); if((r&0xffff)!=0x01aa) { // printf("CMD8_4 response: %d\n",r); wait_init(); return(0); } SPI(0xff); // If we get this far we have a V2 card, which may or may not be SDHC... i=50; while(--i) { if(wait_initV2()) { if((r=cmd_CMD58())==0) { // printf("CMD58 %d\n ",r); SPI(0xff); r=SPI_READ(); // printf("CMD58_2 %d\n ",r); SPI(0xff); SPI(0xff); SPI(0xff); SPI(0xff); if(r&0x40) return(1); else return(0); } // else // printf("CMD58 %d\n ",r); } if(i==2) { puts("SDHC error!\n"); return(0); } } return(0); }
int spi_init() { int j; int i; int r; SDHCtype=1; j=5; while(--j) { SPI_CS(0); // Disable CS spi_spin(); puts("SD init...\n"); // puts("SPI Init()\n"); DBG("Activating CS\n"); SPI_CS(1); i=50; while(--i) { if(cmd_reset()==1) // Enable SPI mode { i=1; j=1; } DBG("Sent reset command\n"); if(i==2) { puts("SD card reset failed!\n"); return(0); } } } DBG("Card responded to reset\n"); SDHCtype=is_sdhc(); if(SDHCtype) DBG("SDHC card detected\n"); else // Not SDHC? Set blocksize to 512. { DBG("Sending cmd16\n"); cmd_CMD16(1); } SPI(0xFF); SPI_CS(0); SPI(0xFF); DBG("Init done\n"); return(1); }
int wait_init() { int i=20; int r; SPI(0xff); // puts("Cmd_init\n"); while(--i) { if((r=cmd_init())==0) { // printf("init %d\n ",r); SPI(0xff); return(1); } // else // printf("init %d\n ",r); spi_spin(); } return(0); }
int spi_init() { int i; int r; SDHCtype=1; SPI_CS(0); // Disable CS spi_spin(); puts("SPI Init()\n"); DBG("Activating CS\n"); SPI_CS(1); i=8; while(--i) { if(cmd_reset()==1) // Enable SPI mode i=1; DBG("Sent reset command\n"); if(i==2) { DBG("SD card initialization error!\n"); return(0); } } DBG("Card responded to reset\n"); SDHCtype=is_sdhc(); if(SDHCtype) DBG("SDHC card detected\n"); else // If not SDHC, Set blocksize to 512 bytes { DBG("Sending cmd16 (blocksize)\n"); cmd_CMD16(1); } SPI(0xFF); SPI_CS(0); SPI(0xFF); DBG("Init done\n"); return(1); }
int spi_init() { int i; int r; SDHCtype=1; // HW_PER(PER_TIMER_DIV7)=150; // About 350KHz SPI_CS(0); // Disable CS spi_spin(); // puts("Activating CS\n"); SPI_CS(1); i=8; while(--i) { if(cmd_reset()==1) // Enable SPI mode i=1; puts("Sent reset command\n"); if(i==2) { puts("SD card initialization error!\n"); return(0); } } puts("Card responded to reset\n"); SDHCtype=is_sdhc(); if(SDHCtype) puts("SDHC card detected\n"); puts("Sending cmd16\n"); cmd_CMD16(1); SPI(0xFF); SPI_CS(0); SPI(0xFF); puts("Init done\n"); // HW_PER(PER_TIMER_DIV7)=HW_PER(PER_CAP_SPISPEED); return(1); }
int is_sdhc() { int i,r; spi_spin(); r=cmd_CMD8(); // test for SDHC capability // printf("cmd_CMD8 response: %d\n",r); if(r!=1) { wait_init(); return(0); } #if 0 SPI(0xff); // SPI_WAIT(); r=SPI_READ(); // printf("CMD8_1 response: %d\n",r); SPI(0xff); // SPI_WAIT(); r=SPI_READ(); // printf("CMD8_2 response: %d\n",r); SPI(0xff); // SPI_WAIT(); r=SPI_READ(); if(r!=1) { wait_init(); return(0); } // printf("CMD8_3 response: %d\n",r); SPI(0xff); // SPI_WAIT(); r=SPI_READ(); if(r!=0xaa) { wait_init(); return(0); } #endif r=SPI_PUMP(); if((r&0xffff)!=0x01aa) { wait_init(); return(0); } // printf("CMD8_4 response: %d\n",r); SPI(0xff); // If we get this far we have a V2 card, which may or may not be SDHC... i=50; while(--i) { if(wait_initV2()) { if((r=cmd_CMD58())==0) { printf("CMD58 %d\n ",r); SPI(0xff); // SPI_WAIT(); r=SPI_READ(); printf("CMD58_2 %d\n ",r); SPI_PUMP(); // SPI(0xff); // SPI(0xff); // SPI(0xff); // SPI(0xff); if(r&0x40) return(1); else return(0); } else printf("CMD58 %d\n ",r); } if(i==2) { printf("SDHC Initialization error!\n"); return(0); } } puts("Determined SDHC status\n"); return(0); }