最近整理了几种T卡座的资料,软件修改方法各不相同,具体如下:
第一种:低电平检测,这种是最常规的一种T卡,软件里面默认的也是这种:
io_def.h中定义为:
#define SD_CLK_DIR_IN() {GPIOADIR |= BIT(6); GPIOAPU |= BIT(6);}
#define SD_CLK_IN_DIS_PU10K() {GPIOADIR |= BIT(6); GPIOAPU &= ~BIT(6);}
#define SD_CLK_DIR_OUT() {GPIOAPU &= ~BIT(6); GPIOADIR &= ~BIT(6);}
#define SD_MUX_DETECT_INIT() {GPIOADE |= BIT(6); GPIOAPU |= BIT(6); GPIOADIR |= BIT(6);}
#define SD_MUX_IS_ONLINE() ((GPIOA & BIT(6)) == 0)
原理图如下:CD脚为检测脚,未插入T卡的时候CD为悬空,插入T卡之后CD脚对地短路,所以软件检测到低电平是识别为T卡插入。
实物图如下:
第二种:高电平检测
io_def.h中定义为:
#define SD_CLK_DIR_IN() {GPIOADIR |= BIT(6); GPIOAPD |= BIT(6);}
#define SD_CLK_IN_DIS_PU10K() {GPIOADIR |= BIT(6); GPIOAPU &= ~BIT(6);}
#define SD_CLK_DIR_OUT() {GPIOAPD &= ~BIT(6); GPIOADIR &= ~BIT(6);}
#define SD_MUX_DETECT_INIT() {GPIOADE |= BIT(6); GPIOAPD |= BIT(6);GPIOADIR |= BIT(6);}
#define SD_MUX_IS_ONLINE() ((GPIOA & BIT(6))>>6)
原理图如下:SWITCH脚为检测脚,未插入TF卡的时候SWITCH为悬空,插入T卡之后SWITCH脚对 CLK 短路,所以软件检测到高电平是识别为T卡插入。
实物图如下:
第三种:不带检测脚的卡座
这种卡座有点特殊,因为硬件上不带检测脚,这个时候就需要使用软件来检测了:
config.h中修改:
#define SD_SOFT_DETECT_EN 1 //是否使用软件检测 (SD发命令检测)
#define SDCLK_MUX_DETECT_SD 0 //是否复用SDCLK检测SD卡
#define SD0_MAPPING SD0MAP_G3 //对应硬件即可
#define SD1_MAPPING SD0MAP_G4 //对应硬件即可
配置工具中:选择软件检测即可
实物图如下:
市面上所有的T卡检测的原理不外乎这三种。