SD Card Detect via DATA3 with SDK 2.12.1

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

SD Card Detect via DATA3 with SDK 2.12.1

4,240 次查看
mspenard603
Contributor IV

Hi,

 My SD card works until certain functions are called which attempt to re-init the card and do card detect. E.g, f_mkfs(). When this happens it gets stuck in a loop with OSA_EventWait() coming back with KOSA_StatusIdle over and over.

f_mkfs() WILL work if I never call f_mount(). However, unmounting does not rectify the situation.

I should add that, with our PCB, an SD card will always be present. I'd like to forgo the check altogether really.

#define BOARD_SDMMC_SD_CD_TYPE kSD_DetectCardByHostDATA3

sdcard_fatfs_instance_t g_SDcardFatfsInstance is in non-cached sdram.

untitiled.png

0 项奖励
回复
6 回复数

4,186 次查看
EdwinHz
NXP TechSupport
NXP TechSupport

Hi @mspenard603,

Could you please specify what part number, IDE version and SDK release you are currently using?

Thanks,
Edwin

0 项奖励
回复

4,184 次查看
mspenard603
Contributor IV

iMXRT1062
MCUxpresso v11.7.0

0 项奖励
回复

4,225 次查看
mspenard603
Contributor IV

When f_mount() initially succeeds in detecting the card SDMMCHOST_CardDetectStatus() calls "USDHC_GetPresentStatusFlags(host->hostController.base) & (uint32_t)kUSDHC_CardInsertedFlag)" and the USDHC->PRES_STATE CINST bit comes back as set. As it should.

But when an f_mkfs() follows f_mount() and f_unmount() the CINST remains unset.

I'm aware of the following comments:
" * Note: Please pay attention, DAT3 card detection cannot works during the card access,
* since the DAT3 will be used for data transfer, thus the functionality of card detect will be disabled. Using card
* detect pin for card detection is recommended."
...and..
"PRES_STATE CINST [...] This bit indicates whether a card has been inserted.[...]The Software Reset For All in the System Control register does not effect this bit. A software reset does not effect this bit."

...but does this also implicate that once data transfers are done no amount of resetting and re-init will ever get DAT3 card detect to work again???

0 项奖励
回复

4,167 次查看
EdwinHz
NXP TechSupport
NXP TechSupport

Hi @mspenard603,

This is correct. DAT3 line is configured as card detection pin for 1-bit mode, once 4 or 8 bit transfer transfer is being done it won't be able to detect a card. Additionally, the register will not update unless the card is removed and reinserted or after a POR.

0 项奖励
回复

4,162 次查看
mspenard603
Contributor IV

Thanks for confirming that.

There's no explicit don't do CD option:
typedef enum _sd_detect_card_type
{
kSD_DetectCardByGpioCD, /*!< sd card detect by CD pin through GPIO */
kSD_DetectCardByHostCD, /*!< sd card detect by CD pin through host */
kSD_DetectCardByHostDATA3, /*!< sd card detect by DAT3 pin through host */
} sd_detect_card_type_t;

I was previously using SDK 2.5.x. It didn't have card detect code so baked into the SDK. And now the middleware (FatFS) attempts to do card detect, via the sdk, for f_mount() and f_mkfs() automatically because of the fact and the above two.

NXP should either include a no-detect option to that struct or provide an option to forgo FatFS from including card detect automatically.




0 项奖励
回复

3,460 次查看
hdhedhu10
Contributor II

with DAT3 as detection pin f_mkfs() is troubling me. Did you find any method to navigate this or did you change your approach, if any other method is possible to log data into sd card can you suggest?

0 项奖励
回复