forked from xuos/xiuos
1、 feat add lwext4 submodule for XiZi,compile ok; 2、feat add sd card auto-check-attach function for ok1052 and xidatong from Liu_Weichao
it is OK
This commit is contained in:
commit
3aa7e1a8de
|
@ -13,3 +13,6 @@
|
||||||
[submodule "Ubiquitous/Nuttx_Fusion_XiUOS/nuttx"]
|
[submodule "Ubiquitous/Nuttx_Fusion_XiUOS/nuttx"]
|
||||||
path = Ubiquitous/Nuttx_Fusion_XiUOS/nuttx
|
path = Ubiquitous/Nuttx_Fusion_XiUOS/nuttx
|
||||||
url = https://code.gitlink.org.cn/wgzAIIT/incubator-nuttx.git
|
url = https://code.gitlink.org.cn/wgzAIIT/incubator-nuttx.git
|
||||||
|
[submodule "Ubiquitous/XiZi/fs/lwext4/lwext4_submodule"]
|
||||||
|
path = Ubiquitous/XiZi/fs/lwext4/lwext4_submodule
|
||||||
|
url = https://gitlink.org.cn/xuos/lwext4_filesystem_support_XiUOS.git
|
||||||
|
|
|
@ -44,7 +44,6 @@ menu "ok1052-c feature"
|
||||||
config MOUNT_SDCARD
|
config MOUNT_SDCARD
|
||||||
bool "mount cd card"
|
bool "mount cd card"
|
||||||
default n
|
default n
|
||||||
select BSP_USING_SDIO
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -41,30 +41,6 @@ extern int ExtSramInit(void);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(FS_VFS) && defined(MOUNT_SDCARD)
|
|
||||||
#include <iot-vfs.h>
|
|
||||||
|
|
||||||
// SD card mount flag 1: OK
|
|
||||||
int sd_mount_flag = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description: Mount SD card
|
|
||||||
* @return 0
|
|
||||||
*/
|
|
||||||
int MountSDCard(void)
|
|
||||||
{
|
|
||||||
if (MountFilesystem(SDIO_BUS_NAME, SDIO_DEVICE_NAME, SDIO_DRIVER_NAME, FSTYPE_FATFS, "/") == 0)
|
|
||||||
{
|
|
||||||
sd_mount_flag = 1;
|
|
||||||
KPrintf("sd card mount to '/'");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
KPrintf("sd card mount to '/' failed!");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
|
#if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
|
||||||
#include "fsl_lpi2c.h"
|
#include "fsl_lpi2c.h"
|
||||||
#endif /* SDK_I2C_BASED_COMPONENT_USED */
|
#endif /* SDK_I2C_BASED_COMPONENT_USED */
|
||||||
|
|
|
@ -27,11 +27,14 @@
|
||||||
#include <clock_config.h>
|
#include <clock_config.h>
|
||||||
#include <fsl_gpio.h>
|
#include <fsl_gpio.h>
|
||||||
#include <fsl_common.h>
|
#include <fsl_common.h>
|
||||||
|
#include <connect_gpio.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define SD_CARD_STACK_SIZE 2048
|
||||||
|
|
||||||
int Imxrt1052HwSdioInit(void);
|
int Imxrt1052HwSdioInit(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -10,4 +10,15 @@ if BSP_USING_SDIO
|
||||||
config SDIO_DEVICE_NAME
|
config SDIO_DEVICE_NAME
|
||||||
string "sdio device name"
|
string "sdio device name"
|
||||||
default "sdio_dev"
|
default "sdio_dev"
|
||||||
|
|
||||||
|
config MOUNT_SDCARD_FS
|
||||||
|
bool "mount cd card file system"
|
||||||
|
default n
|
||||||
|
select MOUNT_SDCARD
|
||||||
|
|
||||||
|
if MOUNT_SDCARD_FS
|
||||||
|
config MOUNT_SDCARD_FS_TYPE
|
||||||
|
int "choose file system type : FATFS(0) LWEXT4(3)"
|
||||||
|
default 0
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -104,9 +104,6 @@ static const sdmmchost_card_switch_voltage_func_t s_sdcard_voltage_switch = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*! @brief SD card detect flag */
|
|
||||||
static volatile bool s_card_inserted = false;
|
|
||||||
|
|
||||||
/*! @brief Card descriptor. */
|
/*! @brief Card descriptor. */
|
||||||
static sd_card_t g_sd;
|
static sd_card_t g_sd;
|
||||||
static int sd_lock = -1;
|
static int sd_lock = -1;
|
||||||
|
@ -142,11 +139,6 @@ static void BoardPowerOnSdCard(void)
|
||||||
BOARD_USDHC_SDCARD_POWER_CONTROL(1);
|
BOARD_USDHC_SDCARD_POWER_CONTROL(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SdcardDetectCallBack(bool is_inserted, void *user_data)
|
|
||||||
{
|
|
||||||
s_card_inserted = is_inserted;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CardInformationLog(sd_card_t *card)
|
static void CardInformationLog(sd_card_t *card)
|
||||||
{
|
{
|
||||||
NULL_PARAM_CHECK(card);
|
NULL_PARAM_CHECK(card);
|
||||||
|
@ -261,6 +253,19 @@ static uint32 SdioWrite(void *dev, struct BusBlockWriteParam *write_param)
|
||||||
return write_param->size;
|
return write_param->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int SdioControl(struct HardwareDev *dev, struct HalDevBlockParam *block_param)
|
||||||
|
{
|
||||||
|
NULL_PARAM_CHECK(dev);
|
||||||
|
|
||||||
|
if (OPER_BLK_GETGEOME == block_param->cmd) {
|
||||||
|
block_param->dev_block.size_perbank = g_sd.blockSize;
|
||||||
|
block_param->dev_block.block_size = g_sd.blockSize;
|
||||||
|
block_param->dev_block.bank_num = g_sd.blockCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
|
||||||
static struct SdioDevDone dev_done =
|
static struct SdioDevDone dev_done =
|
||||||
{
|
{
|
||||||
SdioOpen,
|
SdioOpen,
|
||||||
|
@ -269,10 +274,126 @@ static struct SdioDevDone dev_done =
|
||||||
SdioRead,
|
SdioRead,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(FS_VFS) && defined(MOUNT_SDCARD_FS)
|
||||||
|
#include <iot-vfs.h>
|
||||||
|
|
||||||
|
int sd_mount_flag = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: Mount SD card
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
static int MountSDCardFs(enum FilesystemType fs_type)
|
||||||
|
{
|
||||||
|
if (MountFilesystem(SDIO_BUS_NAME, SDIO_DEVICE_NAME, SDIO_DRIVER_NAME, fs_type, "/") == 0) {
|
||||||
|
sd_mount_flag = 1;
|
||||||
|
KPrintf("Sd card mount to '/'");
|
||||||
|
} else {
|
||||||
|
KPrintf("Sd card mount to '/' failed!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void SdCardAttach(void)
|
||||||
|
{
|
||||||
|
bool is_read_only;
|
||||||
|
static sd_card_t *card = &g_sd;
|
||||||
|
|
||||||
|
KPrintf("\r\nCard inserted.\r\n");
|
||||||
|
/* reset host once card re-plug in */
|
||||||
|
SD_HostReset(&(card->host));
|
||||||
|
/* power on the card */
|
||||||
|
SD_PowerOnCard(card->host.base, card->usrParam.pwr);
|
||||||
|
KPrintf("Power on done\n");
|
||||||
|
|
||||||
|
/* Init card. */
|
||||||
|
if (SD_CardInit(card)) {
|
||||||
|
KPrintf("\r\nSD card init failed.\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* card information log */
|
||||||
|
CardInformationLog(card);
|
||||||
|
|
||||||
|
/* Check if card is readonly. */
|
||||||
|
is_read_only = SD_CheckReadOnly(card);
|
||||||
|
|
||||||
|
#ifdef MOUNT_SDCARD_FS
|
||||||
|
/*mount file system*/
|
||||||
|
MountSDCardFs(MOUNT_SDCARD_FS_TYPE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SdCardDetach(void)
|
||||||
|
{
|
||||||
|
/*unmount file system*/
|
||||||
|
KPrintf("\r\nCard detect extracted.\r\n");
|
||||||
|
|
||||||
|
#ifdef MOUNT_SDCARD_FS
|
||||||
|
UnmountFileSystem("/");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8 SdCardReadCd(void)
|
||||||
|
{
|
||||||
|
BusType pin;
|
||||||
|
|
||||||
|
pin = BusFind(PIN_BUS_NAME);
|
||||||
|
|
||||||
|
pin->owner_haldev = BusFindDevice(pin, PIN_DEVICE_NAME);
|
||||||
|
|
||||||
|
struct PinStat PinStat;
|
||||||
|
|
||||||
|
struct BusBlockReadParam read_param;
|
||||||
|
read_param.buffer = (void *)&PinStat;
|
||||||
|
|
||||||
|
PinStat.pin = IMXRT_GET_PIN(2, 28);
|
||||||
|
|
||||||
|
return BusDevReadData(pin->owner_haldev, &read_param);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SdCardTask(void* parameter)
|
||||||
|
{
|
||||||
|
static int sd_card_status = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (!SdCardReadCd()) {
|
||||||
|
if (!sd_card_status) {
|
||||||
|
SdCardAttach();
|
||||||
|
sd_card_status = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (sd_card_status) {
|
||||||
|
SdCardDetach();
|
||||||
|
sd_card_status = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef MOUNT_SDCARD
|
||||||
|
int MountSDCard()
|
||||||
|
{
|
||||||
|
int sd_card_task = 0;
|
||||||
|
sd_card_task = KTaskCreate("sd_card", SdCardTask, NONE,
|
||||||
|
SD_CARD_STACK_SIZE, 8);
|
||||||
|
if(sd_card_task < 0) {
|
||||||
|
KPrintf("sd_card_task create failed ...%s %d.\n", __FUNCTION__,__LINE__);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
StartupKTask(sd_card_task);
|
||||||
|
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int Imxrt1052HwSdioInit(void)
|
int Imxrt1052HwSdioInit(void)
|
||||||
{
|
{
|
||||||
x_err_t ret = EOK;
|
x_err_t ret = EOK;
|
||||||
bool is_read_only;
|
|
||||||
|
|
||||||
static struct SdioBus sdio_bus;
|
static struct SdioBus sdio_bus;
|
||||||
static struct SdioDriver sdio_drv;
|
static struct SdioDriver sdio_drv;
|
||||||
|
@ -305,35 +426,6 @@ int Imxrt1052HwSdioInit(void)
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
KPrintf("\r\nPlease insert a card into board.\r\n");
|
|
||||||
|
|
||||||
/* power off card */
|
|
||||||
SD_PowerOffCard(card->host.base, card->usrParam.pwr);
|
|
||||||
|
|
||||||
if (SD_WaitCardDetectStatus(SD_HOST_BASEADDR, &s_sdcard_detect, true) == kStatus_Success) {
|
|
||||||
KPrintf("\r\nCard inserted.\r\n");
|
|
||||||
/* reset host once card re-plug in */
|
|
||||||
SD_HostReset(&(card->host));
|
|
||||||
/* power on the card */
|
|
||||||
SD_PowerOnCard(card->host.base, card->usrParam.pwr);
|
|
||||||
KPrintf("power on done\n");
|
|
||||||
} else {
|
|
||||||
KPrintf("\r\nCard detect fail.\r\n");
|
|
||||||
return ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init card. */
|
|
||||||
if (SD_CardInit(card)) {
|
|
||||||
KPrintf("\r\nSD card init failed.\r\n");
|
|
||||||
return ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* card information log */
|
|
||||||
CardInformationLog(card);
|
|
||||||
|
|
||||||
/* Check if card is readonly. */
|
|
||||||
is_read_only = SD_CheckReadOnly(card);
|
|
||||||
|
|
||||||
ret = SdioBusInit(&sdio_bus, SDIO_BUS_NAME);
|
ret = SdioBusInit(&sdio_bus, SDIO_BUS_NAME);
|
||||||
if (ret != EOK) {
|
if (ret != EOK) {
|
||||||
KPrintf("Sdio bus init error %d\n", ret);
|
KPrintf("Sdio bus init error %d\n", ret);
|
||||||
|
@ -352,6 +444,7 @@ int Imxrt1052HwSdioInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
sdio_dev.dev_done = &dev_done;
|
sdio_dev.dev_done = &dev_done;
|
||||||
|
sdio_dev.haldev.dev_block_control = SdioControl;
|
||||||
ret = SdioDeviceRegister(&sdio_dev, SDIO_DEVICE_NAME);
|
ret = SdioDeviceRegister(&sdio_dev, SDIO_DEVICE_NAME);
|
||||||
if (ret != EOK) {
|
if (ret != EOK) {
|
||||||
KPrintf("Sdio device register error %d\n", ret);
|
KPrintf("Sdio device register error %d\n", ret);
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
File name: usb_misc.h
|
File name: host_msd_command.c
|
||||||
Description: modify usb_echo to KPrintf
|
Description: modify usb msd command test function
|
||||||
Others: take SDK_2.6.1_MIMXRT1052xxxxB/boards/evkbimxrt1050/usb_examples/usb_host_msd_command for references
|
Others: take SDK_2.6.1_MIMXRT1052xxxxB/boards/evkbimxrt1050/usb_examples/usb_host_msd_command for references
|
||||||
History:
|
History:
|
||||||
1. Date: 2022-02-10
|
1. Date: 2022-02-10
|
||||||
|
|
|
@ -42,9 +42,8 @@ menu "xidatong feature"
|
||||||
|
|
||||||
menu "config board peripheral"
|
menu "config board peripheral"
|
||||||
config MOUNT_SDCARD
|
config MOUNT_SDCARD
|
||||||
bool "mount cd card"
|
bool "mount sd card"
|
||||||
default n
|
default n
|
||||||
select BSP_USING_SDIO
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -29,24 +29,6 @@ Modification:
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "pin_mux.h"
|
#include "pin_mux.h"
|
||||||
|
|
||||||
#if defined(FS_VFS) && defined(MOUNT_SDCARD)
|
|
||||||
#include <iot-vfs.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description: Mount SD card
|
|
||||||
* @return 0
|
|
||||||
*/
|
|
||||||
int MountSDCard(void)
|
|
||||||
{
|
|
||||||
if (MountFilesystem(SDIO_BUS_NAME, SDIO_DEVICE_NAME, SDIO_DRIVER_NAME, FSTYPE_FATFS, "/") == 0)
|
|
||||||
KPrintf("sd card mount to '/'");
|
|
||||||
else
|
|
||||||
KPrintf("sd card mount to '/' failed!");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
|
#if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
|
||||||
#include "fsl_lpi2c.h"
|
#include "fsl_lpi2c.h"
|
||||||
#endif /* SDK_I2C_BASED_COMPONENT_USED */
|
#endif /* SDK_I2C_BASED_COMPONENT_USED */
|
||||||
|
|
|
@ -27,11 +27,14 @@
|
||||||
#include <clock_config.h>
|
#include <clock_config.h>
|
||||||
#include <fsl_gpio.h>
|
#include <fsl_gpio.h>
|
||||||
#include <fsl_common.h>
|
#include <fsl_common.h>
|
||||||
|
#include <connect_gpio.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define SD_CARD_STACK_SIZE 2048
|
||||||
|
|
||||||
int Imxrt1052HwSdioInit(void);
|
int Imxrt1052HwSdioInit(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -10,4 +10,15 @@ if BSP_USING_SDIO
|
||||||
config SDIO_DEVICE_NAME
|
config SDIO_DEVICE_NAME
|
||||||
string "sdio device name"
|
string "sdio device name"
|
||||||
default "sdio_dev"
|
default "sdio_dev"
|
||||||
|
|
||||||
|
config MOUNT_SDCARD_FS
|
||||||
|
bool "mount cd card file system"
|
||||||
|
default n
|
||||||
|
select MOUNT_SDCARD
|
||||||
|
|
||||||
|
if MOUNT_SDCARD_FS
|
||||||
|
config MOUNT_SDCARD_FS_TYPE
|
||||||
|
int "choose file system type : FATFS(0) LWEXT4(3)"
|
||||||
|
default 0
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -104,9 +104,6 @@ static const sdmmchost_card_switch_voltage_func_t s_sdcard_voltage_switch = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*! @brief SD card detect flag */
|
|
||||||
static volatile bool s_card_inserted = false;
|
|
||||||
|
|
||||||
/*! @brief Card descriptor. */
|
/*! @brief Card descriptor. */
|
||||||
static sd_card_t g_sd;
|
static sd_card_t g_sd;
|
||||||
static int sd_lock = -1;
|
static int sd_lock = -1;
|
||||||
|
@ -142,11 +139,6 @@ static void BoardPowerOnSdCard(void)
|
||||||
BOARD_USDHC_SDCARD_POWER_CONTROL(1);
|
BOARD_USDHC_SDCARD_POWER_CONTROL(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SdcardDetectCallBack(bool is_inserted, void *user_data)
|
|
||||||
{
|
|
||||||
s_card_inserted = is_inserted;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CardInformationLog(sd_card_t *card)
|
static void CardInformationLog(sd_card_t *card)
|
||||||
{
|
{
|
||||||
NULL_PARAM_CHECK(card);
|
NULL_PARAM_CHECK(card);
|
||||||
|
@ -261,6 +253,19 @@ static uint32 SdioWrite(void *dev, struct BusBlockWriteParam *write_param)
|
||||||
return write_param->size;
|
return write_param->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int SdioControl(struct HardwareDev *dev, struct HalDevBlockParam *block_param)
|
||||||
|
{
|
||||||
|
NULL_PARAM_CHECK(dev);
|
||||||
|
|
||||||
|
if (OPER_BLK_GETGEOME == block_param->cmd) {
|
||||||
|
block_param->dev_block.size_perbank = g_sd.blockSize;
|
||||||
|
block_param->dev_block.block_size = g_sd.blockSize;
|
||||||
|
block_param->dev_block.bank_num = g_sd.blockCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
|
||||||
static struct SdioDevDone dev_done =
|
static struct SdioDevDone dev_done =
|
||||||
{
|
{
|
||||||
SdioOpen,
|
SdioOpen,
|
||||||
|
@ -269,10 +274,121 @@ static struct SdioDevDone dev_done =
|
||||||
SdioRead,
|
SdioRead,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(FS_VFS) && defined(MOUNT_SDCARD_FS)
|
||||||
|
#include <iot-vfs.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: Mount SD card
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
static int MountSDCardFs(enum FilesystemType fs_type)
|
||||||
|
{
|
||||||
|
if (MountFilesystem(SDIO_BUS_NAME, SDIO_DEVICE_NAME, SDIO_DRIVER_NAME, fs_type, "/") == 0)
|
||||||
|
KPrintf("Sd card mount to '/'");
|
||||||
|
else
|
||||||
|
KPrintf("Sd card mount to '/' failed!");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void SdCardAttach(void)
|
||||||
|
{
|
||||||
|
bool is_read_only;
|
||||||
|
static sd_card_t *card = &g_sd;
|
||||||
|
|
||||||
|
KPrintf("\r\nCard inserted.\r\n");
|
||||||
|
/* reset host once card re-plug in */
|
||||||
|
SD_HostReset(&(card->host));
|
||||||
|
/* power on the card */
|
||||||
|
SD_PowerOnCard(card->host.base, card->usrParam.pwr);
|
||||||
|
KPrintf("Power on done\n");
|
||||||
|
|
||||||
|
/* Init card. */
|
||||||
|
if (SD_CardInit(card)) {
|
||||||
|
KPrintf("\r\nSD card init failed.\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* card information log */
|
||||||
|
CardInformationLog(card);
|
||||||
|
|
||||||
|
/* Check if card is readonly. */
|
||||||
|
is_read_only = SD_CheckReadOnly(card);
|
||||||
|
|
||||||
|
#ifdef MOUNT_SDCARD_FS
|
||||||
|
/*mount file system*/
|
||||||
|
MountSDCardFs(MOUNT_SDCARD_FS_TYPE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SdCardDetach(void)
|
||||||
|
{
|
||||||
|
/*unmount file system*/
|
||||||
|
KPrintf("\r\nCard detect extracted.\r\n");
|
||||||
|
|
||||||
|
#ifdef MOUNT_SDCARD_FS
|
||||||
|
UnmountFileSystem("/");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8 SdCardReadCd(void)
|
||||||
|
{
|
||||||
|
BusType pin;
|
||||||
|
|
||||||
|
pin = BusFind(PIN_BUS_NAME);
|
||||||
|
|
||||||
|
pin->owner_haldev = BusFindDevice(pin, PIN_DEVICE_NAME);
|
||||||
|
|
||||||
|
struct PinStat PinStat;
|
||||||
|
|
||||||
|
struct BusBlockReadParam read_param;
|
||||||
|
read_param.buffer = (void *)&PinStat;
|
||||||
|
|
||||||
|
PinStat.pin = IMXRT_GET_PIN(2, 28);
|
||||||
|
|
||||||
|
return BusDevReadData(pin->owner_haldev, &read_param);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SdCardTask(void* parameter)
|
||||||
|
{
|
||||||
|
static int sd_card_status = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (!SdCardReadCd()) {
|
||||||
|
if (!sd_card_status) {
|
||||||
|
SdCardAttach();
|
||||||
|
sd_card_status = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (sd_card_status) {
|
||||||
|
SdCardDetach();
|
||||||
|
sd_card_status = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef MOUNT_SDCARD
|
||||||
|
int MountSDCard()
|
||||||
|
{
|
||||||
|
int sd_card_task = 0;
|
||||||
|
sd_card_task = KTaskCreate("sd_card", SdCardTask, NONE,
|
||||||
|
SD_CARD_STACK_SIZE, 8);
|
||||||
|
if(sd_card_task < 0) {
|
||||||
|
KPrintf("sd_card_task create failed ...%s %d.\n", __FUNCTION__,__LINE__);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
StartupKTask(sd_card_task);
|
||||||
|
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int Imxrt1052HwSdioInit(void)
|
int Imxrt1052HwSdioInit(void)
|
||||||
{
|
{
|
||||||
x_err_t ret = EOK;
|
x_err_t ret = EOK;
|
||||||
bool is_read_only;
|
|
||||||
|
|
||||||
static struct SdioBus sdio_bus;
|
static struct SdioBus sdio_bus;
|
||||||
static struct SdioDriver sdio_drv;
|
static struct SdioDriver sdio_drv;
|
||||||
|
@ -304,35 +420,6 @@ int Imxrt1052HwSdioInit(void)
|
||||||
KPrintf("\r\nSD host init fail\r\n");
|
KPrintf("\r\nSD host init fail\r\n");
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
KPrintf("\r\nPlease insert a card into board.\r\n");
|
|
||||||
|
|
||||||
/* power off card */
|
|
||||||
SD_PowerOffCard(card->host.base, card->usrParam.pwr);
|
|
||||||
|
|
||||||
if (SD_WaitCardDetectStatus(SD_HOST_BASEADDR, &s_sdcard_detect, true) == kStatus_Success) {
|
|
||||||
KPrintf("\r\nCard inserted.\r\n");
|
|
||||||
/* reset host once card re-plug in */
|
|
||||||
SD_HostReset(&(card->host));
|
|
||||||
/* power on the card */
|
|
||||||
SD_PowerOnCard(card->host.base, card->usrParam.pwr);
|
|
||||||
KPrintf("power on done\n");
|
|
||||||
} else {
|
|
||||||
KPrintf("\r\nCard detect fail.\r\n");
|
|
||||||
return ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init card. */
|
|
||||||
if (SD_CardInit(card)) {
|
|
||||||
KPrintf("\r\nSD card init failed.\r\n");
|
|
||||||
return ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* card information log */
|
|
||||||
CardInformationLog(card);
|
|
||||||
|
|
||||||
/* Check if card is readonly. */
|
|
||||||
is_read_only = SD_CheckReadOnly(card);
|
|
||||||
|
|
||||||
ret = SdioBusInit(&sdio_bus, SDIO_BUS_NAME);
|
ret = SdioBusInit(&sdio_bus, SDIO_BUS_NAME);
|
||||||
if (ret != EOK) {
|
if (ret != EOK) {
|
||||||
|
@ -352,6 +439,7 @@ int Imxrt1052HwSdioInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
sdio_dev.dev_done = &dev_done;
|
sdio_dev.dev_done = &dev_done;
|
||||||
|
sdio_dev.haldev.dev_block_control = SdioControl;
|
||||||
ret = SdioDeviceRegister(&sdio_dev, SDIO_DEVICE_NAME);
|
ret = SdioDeviceRegister(&sdio_dev, SDIO_DEVICE_NAME);
|
||||||
if (ret != EOK) {
|
if (ret != EOK) {
|
||||||
KPrintf("Sdio device register error %d\n", ret);
|
KPrintf("Sdio device register error %d\n", ret);
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
File name: usb_misc.h
|
File name: host_msd_command.c
|
||||||
Description: modify usb_echo to KPrintf
|
Description: modify usb msd command test function
|
||||||
Others: take SDK_2.6.1_MIMXRT1052xxxxB/boards/evkbimxrt1050/usb_examples/usb_host_msd_command for references
|
Others: take SDK_2.6.1_MIMXRT1052xxxxB/boards/evkbimxrt1050/usb_examples/usb_host_msd_command for references
|
||||||
History:
|
History:
|
||||||
1. Date: 2022-02-10
|
1. Date: 2022-02-10
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
config CONFIG_USE_DEFAULT_CFG
|
||||||
|
int
|
||||||
|
default 1
|
||||||
|
|
||||||
|
config CONFIG_HAVE_OWN_OFLAGS
|
||||||
|
int
|
||||||
|
default 0
|
|
@ -1,4 +1,3 @@
|
||||||
|
SRC_DIR := lwext4_submodule
|
||||||
|
|
||||||
|
include $(KERNEL_ROOT)/compiler.mk
|
||||||
|
|
||||||
include $(KERNEL_ROOT)/compiler.mk
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 1eba3cfeda305e5c735827805e90f5f1c8043394
|
|
@ -24,6 +24,9 @@ enum FilesystemType
|
||||||
FSTYPE_FATFS = 0,
|
FSTYPE_FATFS = 0,
|
||||||
FSTYPE_IOTDEVICEFILE,
|
FSTYPE_IOTDEVICEFILE,
|
||||||
FSTYPE_CH376,
|
FSTYPE_CH376,
|
||||||
|
#ifdef FS_LWEXT4
|
||||||
|
FSTYPE_LWEXT4,
|
||||||
|
#endif
|
||||||
FSTYPE_END,
|
FSTYPE_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ extern int FlashW25qxxSpiDeviceInit(void);
|
||||||
extern int LoraSx12xxSpiDeviceInit(void);
|
extern int LoraSx12xxSpiDeviceInit(void);
|
||||||
extern int FatfsInit(void);
|
extern int FatfsInit(void);
|
||||||
extern int Ch376fsInit(void);
|
extern int Ch376fsInit(void);
|
||||||
|
extern int Lwext4Init(void);
|
||||||
extern int LibcSystemInit(void);
|
extern int LibcSystemInit(void);
|
||||||
extern int RtcNtpSyncInit(void);
|
extern int RtcNtpSyncInit(void);
|
||||||
extern int MountSDCard(void);
|
extern int MountSDCard(void);
|
||||||
|
|
|
@ -95,6 +95,9 @@ struct InitSequenceDesc components_init[] =
|
||||||
#endif
|
#endif
|
||||||
#ifdef FS_CH376
|
#ifdef FS_CH376
|
||||||
{ "ch376", Ch376fsInit },
|
{ "ch376", Ch376fsInit },
|
||||||
|
#endif
|
||||||
|
#ifdef FS_LWEXT4
|
||||||
|
{ "lwext4", Lwext4Init },
|
||||||
#endif
|
#endif
|
||||||
{ "libc_system", LibcSystemInit },
|
{ "libc_system", LibcSystemInit },
|
||||||
#ifdef RTC_SYNC_USING_NTP
|
#ifdef RTC_SYNC_USING_NTP
|
||||||
|
|
|
@ -354,6 +354,12 @@ ifeq ($(CONFIG_LIB_NEWLIB),y)
|
||||||
KERNELPATHS += -I$(KERNEL_ROOT)/lib/newlib/include #
|
KERNELPATHS += -I$(KERNEL_ROOT)/lib/newlib/include #
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_FS_LWEXT4),y)
|
||||||
|
KERNELPATHS += -I$(KERNEL_ROOT)/fs/lwext4/lwext4_submodule/blockdev/xiuos #
|
||||||
|
KERNELPATHS += -I$(KERNEL_ROOT)/fs/lwext4/lwext4_submodule/include #
|
||||||
|
KERNELPATHS += -I$(KERNEL_ROOT)/fs/lwext4/lwext4_submodule/include/misc
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(ARCH), risc-v)
|
ifeq ($(ARCH), risc-v)
|
||||||
KERNELPATHS +=-I$(KERNEL_ROOT)/arch/risc-v/shared
|
KERNELPATHS +=-I$(KERNEL_ROOT)/arch/risc-v/shared
|
||||||
|
|
Loading…
Reference in New Issue