You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@nuttx.apache.org by Robert Middleton <os...@gmail.com> on 2021/02/27 19:13:42 UTC

Unable to mount SD card

Hi all,

I'm messing around with my PIC32/Explorer 16 setup, and I'm trying to
mount an SD card.  It seems as though the SD card is being detected
properly, but nuttx refuses to mount it.  The debug that I have
indicates that CMD9 is failing, but the command seems to work fine on
boot.  Any thoughts?

Output:

Successfully initialized SPI port 1
mmcsd_mediainitialize: Send CMD0
mmcsd_sendcmd: CMD0[00000000] R1=01
mmcsd_mediainitialize: Card is in IDLE state
mmcsd_mediainitialize: Send CMD8
mmcsd_sendcmd: CMD8[000001aa] R1=01 R7=000001aa
mmcsd_mediainitialize: 32768. Send CMD55/ACMD41
mmcsd_sendcmd: CMD55[00000000] R1=01
mmcsd_sendcmd: CMD41[40000000] R1=01
mmcsd_mediainitialize: 4295000064. Send CMD55/ACMD41
mmcsd_sendcmd: CMD55[00000000] R1=01
mmcsd_sendcmd: CMD41[40000000] R1=00
mmcsd_mediainitialize: Send CMD58
mmcsd_sendcmd: CMD58[00000000] R1=00 OCR=c0ff8000
mmcsd_mediainitialize: OCR: c0ff8000
mmcsd_mediainitialize: Identified SD ver2 card/with block access
mmcsd_mediainitialize: Get CSD
mmcsd_sendcmd: CMD9[00000000] R1=00
mmcsd_getcardinfo: 0. SPI send returned fe
mmcsd_dmpcsd: CSD
mmcsd_dmpcsd:   CSD_STRUCTURE:           1.1
mmcsd_dmpcsd:   TAAC:
mmcsd_dmpcsd:     TIME_VALUE:            0x01
mmcsd_dmpcsd:     TIME_UNIT:             0x06
mmcsd_dmpcsd:   NSAC:                    0x00
mmcsd_dmpcsd:   TRAN_SPEED:
mmcsd_dmpcsd:     TIME_VALUE:            0x06
mmcsd_dmpcsd:     RATE_UNIT:             0x02
mmcsd_dmpcsd:   CCC:                     0x5b5
mmcsd_dmpcsd:   READ_BL_LEN:             9
mmcsd_dmpcsd:   READ_BL_PARTIAL:         0
mmcsd_dmpcsd:   WRITE_BLK_MISALIGN:      0
mmcsd_dmpcsd:   READ_BLK_MISALIGN:       0
mmcsd_dmpcsd:   DSR_IMP:                 0
mmcsd_dmpcsd:   C_SIZE:                  15053
mmcsd_dmpcsd:   VDD_R_CURR_MIN:          7
mmcsd_dmpcsd:   VDD_R_CURR_MAX:          6
mmcsd_dmpcsd:   VDD_W_CURR_MIN:          7
mmcsd_dmpcsd:   VDD_W_CURR_MAX:          6
mmcsd_dmpcsd:   C_SIZE_MULT:             8
mmcsd_dmpcsd:   SD ER_BLK_EN:            1
mmcsd_dmpcsd:   SD SECTOR_SIZE:          127
mmcsd_dmpcsd:   SD WP_GRP_SIZE:          0
mmcsd_dmpcsd:   WP_GRP_EN:               0
mmcsd_dmpcsd:   R2W_FACTOR:              2
mmcsd_dmpcsd:   WRITE_BL_LEN:            9
mmcsd_dmpcsd:   WRITE_BL_PARTIAL:        0
mmcsd_dmpcsd:   FILE_FORMAT_GROUP:       0
mmcsd_dmpcsd:   COPY:                    0
mmcsd_dmpcsd:   PERM_WRITE_PROTECT:      0
mmcsd_dmpcsd:   TMP_WRITE_PROTECT:       0
mmcsd_dmpcsd:   FILE_FORMAT:             0
mmcsd_dmpcsd:   CRC:                     4b
mmcsd_decodecsd: SPI Frequency
mmcsd_decodecsd:   Maximum:         25000000 Hz
mmcsd_decodecsd:   Actual:          20000000 Hz
mmcsd_decodecsd: Read access time:  11 ticks
mmcsd_decodecsd: Write access time: 26 ticks
mmcsd_decodecsd: Sector size:       512
mmcsd_decodecsd: Number of sectors: 15415296
mmcsd_spislotinitialize: mmcsd_mediainitialize returned OK
spi1register
Successfully bound SPI port 1 to MMC/SD slot 0

NuttShell (NSH) NuttX-10.0.1
nsh>  mkdir foo
nsh>  mount -t vfat /dev/mmcsd0 /foo
find_blockdriver: pathname="/dev/mmcsd0"
mmcsd_open: Entry
mmcsd_sendcmd: CMD9[00000000] R1=7f
mmcsd_getcardinfo: ERROR: CMD9/10 failed: R1=7f
mmcsd_geometry: ERROR: mmcsd_getcsd returned -5
nx_mount: ERROR: Bind method failed: -19
nsh: mount: mount failed: 19

-Robert Middleton

Re: Unable to mount SD card

Posted by Gregory Nutt <sp...@gmail.com>.
After initializing the SD card successfully, the driver will switch to 
high-speed, 4-bit wide mode.  It looks like this will be 20MHz in your case.

One thing you can try is reducing that frequency a bit.

On 2/27/2021 1:13 PM, Robert Middleton wrote:
> Hi all,
>
> I'm messing around with my PIC32/Explorer 16 setup, and I'm trying to
> mount an SD card.  It seems as though the SD card is being detected
> properly, but nuttx refuses to mount it.  The debug that I have
> indicates that CMD9 is failing, but the command seems to work fine on
> boot.  Any thoughts?
>
> Output:
>
> Successfully initialized SPI port 1
> mmcsd_mediainitialize: Send CMD0
> mmcsd_sendcmd: CMD0[00000000] R1=01
> mmcsd_mediainitialize: Card is in IDLE state
> mmcsd_mediainitialize: Send CMD8
> mmcsd_sendcmd: CMD8[000001aa] R1=01 R7=000001aa
> mmcsd_mediainitialize: 32768. Send CMD55/ACMD41
> mmcsd_sendcmd: CMD55[00000000] R1=01
> mmcsd_sendcmd: CMD41[40000000] R1=01
> mmcsd_mediainitialize: 4295000064. Send CMD55/ACMD41
> mmcsd_sendcmd: CMD55[00000000] R1=01
> mmcsd_sendcmd: CMD41[40000000] R1=00
> mmcsd_mediainitialize: Send CMD58
> mmcsd_sendcmd: CMD58[00000000] R1=00 OCR=c0ff8000
> mmcsd_mediainitialize: OCR: c0ff8000
> mmcsd_mediainitialize: Identified SD ver2 card/with block access
> mmcsd_mediainitialize: Get CSD
> mmcsd_sendcmd: CMD9[00000000] R1=00
> mmcsd_getcardinfo: 0. SPI send returned fe
> mmcsd_dmpcsd: CSD
> mmcsd_dmpcsd:   CSD_STRUCTURE:           1.1
> mmcsd_dmpcsd:   TAAC:
> mmcsd_dmpcsd:     TIME_VALUE:            0x01
> mmcsd_dmpcsd:     TIME_UNIT:             0x06
> mmcsd_dmpcsd:   NSAC:                    0x00
> mmcsd_dmpcsd:   TRAN_SPEED:
> mmcsd_dmpcsd:     TIME_VALUE:            0x06
> mmcsd_dmpcsd:     RATE_UNIT:             0x02
> mmcsd_dmpcsd:   CCC:                     0x5b5
> mmcsd_dmpcsd:   READ_BL_LEN:             9
> mmcsd_dmpcsd:   READ_BL_PARTIAL:         0
> mmcsd_dmpcsd:   WRITE_BLK_MISALIGN:      0
> mmcsd_dmpcsd:   READ_BLK_MISALIGN:       0
> mmcsd_dmpcsd:   DSR_IMP:                 0
> mmcsd_dmpcsd:   C_SIZE:                  15053
> mmcsd_dmpcsd:   VDD_R_CURR_MIN:          7
> mmcsd_dmpcsd:   VDD_R_CURR_MAX:          6
> mmcsd_dmpcsd:   VDD_W_CURR_MIN:          7
> mmcsd_dmpcsd:   VDD_W_CURR_MAX:          6
> mmcsd_dmpcsd:   C_SIZE_MULT:             8
> mmcsd_dmpcsd:   SD ER_BLK_EN:            1
> mmcsd_dmpcsd:   SD SECTOR_SIZE:          127
> mmcsd_dmpcsd:   SD WP_GRP_SIZE:          0
> mmcsd_dmpcsd:   WP_GRP_EN:               0
> mmcsd_dmpcsd:   R2W_FACTOR:              2
> mmcsd_dmpcsd:   WRITE_BL_LEN:            9
> mmcsd_dmpcsd:   WRITE_BL_PARTIAL:        0
> mmcsd_dmpcsd:   FILE_FORMAT_GROUP:       0
> mmcsd_dmpcsd:   COPY:                    0
> mmcsd_dmpcsd:   PERM_WRITE_PROTECT:      0
> mmcsd_dmpcsd:   TMP_WRITE_PROTECT:       0
> mmcsd_dmpcsd:   FILE_FORMAT:             0
> mmcsd_dmpcsd:   CRC:                     4b
> mmcsd_decodecsd: SPI Frequency
> mmcsd_decodecsd:   Maximum:         25000000 Hz
> mmcsd_decodecsd:   Actual:          20000000 Hz
> mmcsd_decodecsd: Read access time:  11 ticks
> mmcsd_decodecsd: Write access time: 26 ticks
> mmcsd_decodecsd: Sector size:       512
> mmcsd_decodecsd: Number of sectors: 15415296
> mmcsd_spislotinitialize: mmcsd_mediainitialize returned OK
> spi1register
> Successfully bound SPI port 1 to MMC/SD slot 0
>
> NuttShell (NSH) NuttX-10.0.1
> nsh>  mkdir foo
> nsh>  mount -t vfat /dev/mmcsd0 /foo
> find_blockdriver: pathname="/dev/mmcsd0"
> mmcsd_open: Entry
> mmcsd_sendcmd: CMD9[00000000] R1=7f
> mmcsd_getcardinfo: ERROR: CMD9/10 failed: R1=7f
> mmcsd_geometry: ERROR: mmcsd_getcsd returned -5
> nx_mount: ERROR: Bind method failed: -19
> nsh: mount: mount failed: 19
>
> -Robert Middleton