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 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); }