Some low level for SD-CARD

This commit is contained in:
bsongis
2012-05-22 18:57:30 +00:00
parent 28337362f9
commit 714bbf4fa2
+10 -11
View File
@@ -388,6 +388,7 @@ uint32_t sd_cmd7()
#define HSMCI_CMDR_TRCMD_START_DATA ( 1 << 16 ) #define HSMCI_CMDR_TRCMD_START_DATA ( 1 << 16 )
#define HSMCI_CMDR_TRDIR_READ ( 1 << 18 ) #define HSMCI_CMDR_TRDIR_READ ( 1 << 18 )
#define HSMCI_CMDR_TRTYP_SINGLE ( 0 << 19 ) #define HSMCI_CMDR_TRTYP_SINGLE ( 0 << 19 )
#define HSMCI_CMDR_TRTYP_MULTIPLE ( 1 << 19 )
#define SD_SEND_SCR (51 | HSMCI_CMDR_SPCMD_STD | HSMCI_CMDR_RSPTYP_48_BIT \ #define SD_SEND_SCR (51 | HSMCI_CMDR_SPCMD_STD | HSMCI_CMDR_RSPTYP_48_BIT \
| HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRDIR_READ \ | HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRDIR_READ \
@@ -397,12 +398,12 @@ uint32_t sd_cmd7()
| HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRDIR_READ \ | HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRDIR_READ \
| HSMCI_CMDR_TRTYP_SINGLE | HSMCI_CMDR_MAXLAT) | HSMCI_CMDR_TRTYP_SINGLE | HSMCI_CMDR_MAXLAT)
#define SD_WRITE_BLOCK (24| HSMCI_CMDR_SPCMD_STD \ #define SD_WRITE_BLOCK (24 | HSMCI_CMDR_SPCMD_STD \
| HSMCI_CMDR_RSPTYP_48_BIT \ | HSMCI_CMDR_RSPTYP_48_BIT \
| HSMCI_CMDR_TRCMD_START_DATA \ | HSMCI_CMDR_TRCMD_START_DATA \
| HSMCI_CMDR_TRTYP_MULTIPLE \ | HSMCI_CMDR_TRTYP_MULTIPLE \
| HSMCI_CMDR_TRDIR_READ \ | HSMCI_CMDR_TRDIR_READ \
| HSMCI_CMDR_MAXLAT) | HSMCI_CMDR_MAXLAT)
// Get SCR // Get SCR
uint32_t sd_acmd51( uint32_t *presult ) uint32_t sd_acmd51( uint32_t *presult )
@@ -629,12 +630,11 @@ uint32_t sd_write_block( uint32_t block_no, uint32_t *data )
phsmci->HSMCI_ARGR = block_no << 9 ; phsmci->HSMCI_ARGR = block_no << 9 ;
phsmci->HSMCI_CMDR = SD_WRITE_BLOCK ; phsmci->HSMCI_CMDR = SD_WRITE_BLOCK ;
for ( i = 0 ; i < 128 ; i += 1 ) for ( i = 0 ; i < 50000 ; i += 1 )
{ {
#if 0 if ( phsmci->HSMCI_SR & HSMCI_SR_TXRDY )
if ( phsmci->HSMCI_SR & HSMCI_SR_RXRDY )
{ {
*data++ = phsmci->HSMCI_RDR ; phsmci->HSMCI_TDR = *data++;
j += 1 ; j += 1 ;
} }
if ( ( phsmci->HSMCI_SR & ( HSMCI_SR_CMDRDY | HSMCI_SR_XFRDONE ) ) == ( HSMCI_SR_CMDRDY | HSMCI_SR_XFRDONE ) ) if ( ( phsmci->HSMCI_SR & ( HSMCI_SR_CMDRDY | HSMCI_SR_XFRDONE ) ) == ( HSMCI_SR_CMDRDY | HSMCI_SR_XFRDONE ) )
@@ -645,7 +645,6 @@ uint32_t sd_write_block( uint32_t block_no, uint32_t *data )
{ {
break ; break ;
} }
#endif
} }
return i | (j << 16) ; //phsmci->HSMCI_RSPR[0] ; return i | (j << 16) ; //phsmci->HSMCI_RSPR[0] ;
} }