Просмотр исходного кода

更新MCU工程sdmmc驱动(iram和sram-nos)
添加EMMC配置EXT_CSD_RST_N_FUNCIOTN段为RST_n永久使能代码,避免默认配置下管脚复位无效问题。

helen 1 неделя назад
Родитель
Сommit
1677ef8241

+ 3 - 0
amt630hv160-mcu/amt630hv160-mcu-iram/src/ArkmicroFiles/libcpu-amt630hv160/include/amt630hv160_sdmmc.h

@@ -259,6 +259,9 @@
 #define EXT_CSD_WR_DATA_REL_USR		(1 << 0)	/* user data area WR_REL */
 #define EXT_CSD_WR_DATA_REL_GP(x)	(1 << ((x)+1))	/* GP part (x+1) WR_REL */
 
+#define EXT_CSD_RST_N_TEMPORARILY_DISABLED		(0)
+#define EXT_CSD_RST_N_PERMANENTLY_ENABLED		(1)
+#define EXT_CSD_RST_N_PERMANENTLY_DISABLED		(2)
 
 #define MMC_DATA_READ		1
 #define MMC_DATA_WRITE		2

+ 15 - 0
amt630hv160-mcu/amt630hv160-mcu-iram/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_sdmmc.c

@@ -867,6 +867,21 @@ static int mmc_startup(SdmmcDev *dev)
 	} else {
 		// support high speed
 		freq = 52000000;
+
+		//EMMC RST_n signal config permanently enable
+		if (dev->CardType == MMC) {
+			u8 rst_n_function = data.dest[EXT_CSD_RST_N_FUNCTION] & 0x3;
+			if (rst_n_function == EXT_CSD_RST_N_TEMPORARILY_DISABLED) {
+				err = mmc_switch(dev, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION,
+					EXT_CSD_RST_N_PERMANENTLY_ENABLED);
+				if (err) {
+					printf("Enable EMMC RST_n H/W Reset fail\n");
+					return err;
+				}
+			} else if (rst_n_function != EXT_CSD_RST_N_PERMANENTLY_ENABLED) {
+				printf("EXT_CSD_RST_N_FUNCTION = 0x%x, IO reset invalid\n", rst_n_function);
+			}
+		}
 	}
 	vPortFree(data.dest);
 #else

+ 3 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/ArkmicroFiles/libcpu-amt630hv160/include/amt630hv160_sdmmc.h

@@ -259,6 +259,9 @@
 #define EXT_CSD_WR_DATA_REL_USR		(1 << 0)	/* user data area WR_REL */
 #define EXT_CSD_WR_DATA_REL_GP(x)	(1 << ((x)+1))	/* GP part (x+1) WR_REL */
 
+#define EXT_CSD_RST_N_TEMPORARILY_DISABLED		(0)
+#define EXT_CSD_RST_N_PERMANENTLY_ENABLED		(1)
+#define EXT_CSD_RST_N_PERMANENTLY_DISABLED		(2)
 
 #define MMC_DATA_READ		1
 #define MMC_DATA_WRITE		2

+ 15 - 0
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_sdmmc.c

@@ -866,6 +866,21 @@ static int mmc_startup(SdmmcDev *dev)
 	} else {
 		// support high speed
 		freq = 52000000;
+
+		//EMMC RST_n signal config permanently enable
+		if (dev->CardType == MMC) {
+			u8 rst_n_function = data.dest[EXT_CSD_RST_N_FUNCTION] & 0x3;
+			if (rst_n_function == EXT_CSD_RST_N_TEMPORARILY_DISABLED) {
+				err = mmc_switch(dev, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION,
+					EXT_CSD_RST_N_PERMANENTLY_ENABLED);
+				if (err) {
+					printf("Enable EMMC RST_n H/W Reset fail\n");
+					return err;
+				}
+			} else if (rst_n_function != EXT_CSD_RST_N_PERMANENTLY_ENABLED) {
+				printf("EXT_CSD_RST_N_FUNCTION = 0x%x, IO reset invalid\n", rst_n_function);
+			}
+		}
 	}
 	vPortFree(data.dest);
 #else