version 1.2, 2007/12/21 17:45:26 |
version 1.3, 2007/12/24 15:49:40 |
|
|
spi_cs_high(ddp->ss_sbhp); |
spi_cs_high(ddp->ss_sbhp); |
for (i = 0; i < 9; i++) |
for (i = 0; i < 9; i++) |
spi_transmit(ddp->ss_sbhp, 0xff); |
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. |
* Send CMD0_GO_IDLE_STATE. |
|
|
|
|
resp = spisdmmc_get_response(ddp); |
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); |
printf("spisdmmc_init: CMD0_GO_IDLE_STATE failed with %d\n", resp); |
|
|
return(-1); |
return(-1); |
|
|
* CRC is off so we can set it 0xff. |
* CRC is off so we can set it 0xff. |
* XXX send 0xff before. |
* XXX send 0xff before. |
*/ |
*/ |
// spi_transmit(ddp->ss_sbhp, 0xff); |
|
do { |
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); |
spisdmmc_send_command(ddp, CMD1_SEND_OP_COND, 0, 0xff); |
resp = spisdmmc_get_response(ddp); |
resp = spisdmmc_get_response(ddp); |
} while(resp != 0x00); |
} while(resp != 0x00); |
|
|
|
|
spisdmmc_read_cid(ddp, &cid); |
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]); |
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); |
return(0); |
} |
} |
|
|
|
|
/* construct frame */ |
/* construct frame */ |
sdcf = sdmmc_command(cmd, arg, crc); |
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 */ |
/* transmit cmd */ |
spi_transmit(ddp->ss_sbhp, sdcf.sc_cmd); |
spi_transmit(ddp->ss_sbhp, sdcf.sc_cmd); |
|
|
|
|
spi_transmit(ddp->ss_sbhp, sdcf.sc_crc); |
spi_transmit(ddp->ss_sbhp, sdcf.sc_crc); |
|
|
/* XXX Apply NCR clock pulses */ |
/* XXX Apply NCR clock pulses */ |
// spi_transmit(ddp->ss_sbhp, 0xff); |
spi_transmit(ddp->ss_sbhp, 0xff); |
} |
} |
|
|
|
|
|
|
for(i = 0; i < 64; i++) { |
for(i = 0; i < 64; i++) { |
resp = spi_transmit(ddp->ss_sbhp, 0xff); |
resp = spi_transmit(ddp->ss_sbhp, 0xff); |
|
|
if (resp == 0x00 || resp == 0x01) |
// if (resp == 0 || resp == 1) |
|
if (resp != 0xff) |
return(resp); |
return(resp); |
} |
} |
} |
} |