Closed JacobDel closed 1 month ago
Thank you Greiman for the quick response.
I did not modify SPI_DRIVER_SELECT in SdFatConfig.h. Something I forgot to mention is the library version, 2.2.3., which should be the latest as I pulled it straight from git.
The error
SD_CARD_ERROR_INVALID_CARD_CONFIG
happens whenSPI_DRIVER_SELECT
is >= 2 and no spi pointer is provided inSdSpiConfig(
).
The error is not triggered in SdSpiCard.cpp. The error comes from here instead.
Changes made to the code:
/** \return SD card error code. */
uint8_t sdErrorCode() {
if (m_card) {
return m_card->errorCode();
}
return 123; //SD_CARD_ERROR_INVALID_CARD_CONFIG;
}
Serial output with the format32 card:
SdFat version: 2.2.3
Assuming the SD is the only SPI device.
Edit DISABLE_CS_PIN to disable an SPI device.
Assuming the SD chip select pin is: 4
Edit SD_CS_PIN to change the SD chip select pin.
type any character to start
init time: 488 ms
Card type: SDXC
sdSpecVer: 3.00
HighSpeedMode: true
Manufacturer ID: 0X74
OEM ID: JE
Product: USDU1
Revision: 0.2
Serial number: 0XC8105DF6
Manufacturing date: 9/2014
CID HEX: 744A45555344553102C8105DF600E955
cardSize: 63383.27 MB (MB = 1,000,000 bytes)
flashEraseSize: 128 blocks
eraseSingleBlock: true
dataAfterErase: zeros
CSD HEX: 400E00325B590001D83D7F800A4000A5
OCR: 0XC0FF8000
SD Partition Table
part,boot,bgnCHS[3],type,endCHS[3],start,length
1,0X0,0XA,0X9,0X2,0XC,0XFE,0XFF,0XFF,32768,123762688
2,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
3,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
4,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
Scanning FAT, please wait.
Volume is FAT32
sectorsPerCluster: 64
fatStartSector: 32800
dataStartSector: 63010
clusterCount: 1933319
freeClusterCount: 885415
Serial output with the exFat card:
type any character to start
SD initialization failed.
Do not reformat the card!
Is the card correctly inserted?
Is there a wiring/soldering problem?
Is SD_CS_PIN set to the correct value?
Does another SPI device need to be disabled?
SD errorCode: SD_CARD_ERROR_UNKNOWN = 0X7B
SD errorData = 0X0
There is a bug for the error code when SdFs fails.
Please change this function to:
SdCard* newCard(SdSpiConfig config) {
m_spiCard.begin(config);
return &m_spiCard;
}
Rerun the Sdinfo example and post the error code.
The above had the wrong function. I edited it and hope it is correct.
Serial output after proposed modifications:
SdFat version: 2.2.3
Assuming the SD is the only SPI device.
Edit DISABLE_CS_PIN to disable an SPI device.
Assuming the SD chip select pin is: 4
Edit SD_CS_PIN to change the SD chip select pin.
type any character to start
SD initialization failed.
Do not reformat the card!
Is the card correctly inserted?
Is there a wiring/soldering problem?
Is SD_CS_PIN set to the correct value?
Does another SPI device need to be disabled?
SD errorCode: SD_CARD_ERROR_ACMD41 = 0x17
SD errorData = 0x1
type any character to start
The failure is here. This is the most common failure for SD sockets with marginal level shifters or marginal wiring.
CMD8 may have failed first which causes miss identification of the card. At this point I would use a microSD sniffer and a scope to checkout the SPI signals.
I used this setup with an old nano and a proven SD breakout with level shifters. The photo is at an angle but CS is pin 4 and SCK is pin32.
I tested with these exFAT cards:
All worked. Here is typical output:
SdFat version: 2.2.3
Assuming the SD is the only SPI device. Edit DISABLE_CS_PIN to disable an SPI device.
Assuming the SD chip select pin is: 4 Edit SD_CS_PIN to change the SD chip select pin.
type any character to start
init time: 132 ms
Card type: SDXC sdSpecVer: 6.00 HighSpeedMode: true
Manufacturer ID: 0X1B OEM ID: SM Product: FD4Q5 Revision: 3.0 Serial number: 0X9287551E Manufacturing date: 9/2021 CID HEX: 1B534D4644345135309287551EA159BD
cardSize: 128177.93 MB (MB = 1,000,000 bytes) flashEraseSize: 128 blocks eraseSingleBlock: true dataAfterErase: zeros CSD HEX: 400E0032DB790003BAFF7F800A40002D
OCR: 0XC0FF8000
SD Partition Table part,boot,bgnCHS[3],type,endCHS[3],start,length 1,0X0,0XA,0X9,0X2,0X7,0XFE,0XFF,0XFF,32768,250314752 2,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0 3,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0 4,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0X0,0,0
Scanning FAT, please wait.
Volume is exFAT sectorsPerCluster: 256 fatStartSector: 49152 dataStartSector: 65536 clusterCount: 977664 freeClusterCount: 977619
I can't recommend any other things to try since the failure is long before reading the card. Can't be the format and ACMD41 happens at low clock speed.
I will post a fix so the correct error code is returned for SdFs.
Thanks! I'll close the issue until I can test this with other sd card adapters/sniffers.
Example source code: https://github.com/greiman/SdFat/blob/master/examples/SdInfo/SdInfo.ino
The only change made in the script was to change the CS pin (see full script below):
microcontroller: arduino nano
sd card extension board (simple level shifters): Catalex MicroSD Card Adapter v1.0 11/01/2013 v MicroSD Card Adapter
Working card (see serial logs below):
Not working cards:
128GB cards with exFat format:
64GB card with FAT32 format
setup image (note: the module in the middle is not used and all voltage levels are checked and correct):![IMG_3529](https://github.com/greiman/SdFat/assets/38087818/dde84f41-0325-4bfe-ac5c-43e3d5f71ed7)
Full script: