=================================================================== RCS file: /cvs/funnyos/dev/sdmmc/sdmmc_spi.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- funnyos/dev/sdmmc/sdmmc_spi.c 2007/12/21 17:45:26 1.2 +++ funnyos/dev/sdmmc/sdmmc_spi.c 2007/12/24 15:49:40 1.3 @@ -1,5 +1,5 @@ /* - * $Id: sdmmc_spi.c,v 1.2 2007/12/21 17:45:26 nbrk Exp $ + * $Id: sdmmc_spi.c,v 1.3 2007/12/24 15:49:40 nbrk Exp $ */ #include #include @@ -62,12 +62,6 @@ spi_cs_high(ddp->ss_sbhp); for (i = 0; i < 9; i++) spi_transmit(ddp->ss_sbhp, 0xff); - /* - * Apply 16 clocks. - * XXX deassert CS. - */ -// for (i = 0; i < 2; i ++) -// spi_transmit(ddp->ss_sbhp, 0xff); /* * Send CMD0_GO_IDLE_STATE. @@ -77,7 +71,7 @@ resp = spisdmmc_get_response(ddp); - if (resp != 0) { + if (resp & R1_IN_IDLE_STATE != 1) { printf("spisdmmc_init: CMD0_GO_IDLE_STATE failed with %d\n", resp); return(-1); @@ -90,8 +84,12 @@ * CRC is off so we can set it 0xff. * XXX send 0xff before. */ -// spi_transmit(ddp->ss_sbhp, 0xff); do { + spi_cs_high(ddp->ss_sbhp); + spi_transmit(ddp->ss_sbhp, 0xff); + + spi_cs_low(ddp->ss_sbhp); + spisdmmc_send_command(ddp, CMD1_SEND_OP_COND, 0, 0xff); resp = spisdmmc_get_response(ddp); } while(resp != 0x00); @@ -109,7 +107,7 @@ spisdmmc_read_cid(ddp, &cid); printf("cid.pnm: %s%s%s%s%s\n", cid.cid_pnm[0], cid.cid_pnm[1], cid.cid_pnm[2], cid.cid_pnm[3], cid.cid_pnm[4]); - + return(0); } @@ -123,7 +121,7 @@ /* construct frame */ sdcf = sdmmc_command(cmd, arg, crc); - printf("spisdmmc_send_command: sending cmd %d arg 0x%x crc 0x%x\n", sdcf.sc_cmd & ~0xc0, sdcf.sc_arg, sdcf.sc_crc); +// printf("spisdmmc_send_command: sending cmd %d arg 0x%x crc 0x%x\n", sdcf.sc_cmd & ~0xc0, sdcf.sc_arg, sdcf.sc_crc); /* transmit cmd */ spi_transmit(ddp->ss_sbhp, sdcf.sc_cmd); @@ -135,7 +133,7 @@ spi_transmit(ddp->ss_sbhp, sdcf.sc_crc); /* XXX Apply NCR clock pulses */ -// spi_transmit(ddp->ss_sbhp, 0xff); + spi_transmit(ddp->ss_sbhp, 0xff); } @@ -151,7 +149,8 @@ for(i = 0; i < 64; i++) { resp = spi_transmit(ddp->ss_sbhp, 0xff); - if (resp == 0x00 || resp == 0x01) +// if (resp == 0 || resp == 1) + if (resp != 0xff) return(resp); } }