提交 51f638ad 编写于 作者: L liu2guang

[BSP][RT1050] improve sdio stability and speed. | 优化SDIO接口稳定性和速度.

1.格式化代码.
2.优化SDIO接口稳定性和速度: 将SDIO时钟树中分频数增大, 提高内部时钟的稳定性, 同时SDIO速度提高到30M. 并且通过USB拷贝12M MP3文件测试, 多次拷贝数据稳定.
上级 236fd82e
...@@ -76,7 +76,8 @@ static int enable_log = 1; ...@@ -76,7 +76,8 @@ static int enable_log = 1;
ALIGN(USDHC_ADMA2_ADDR_ALIGN) uint32_t g_usdhcAdma2Table[USDHC_ADMA_TABLE_WORDS] SECTION("NonCacheable"); ALIGN(USDHC_ADMA2_ADDR_ALIGN) uint32_t g_usdhcAdma2Table[USDHC_ADMA_TABLE_WORDS] SECTION("NonCacheable");
struct imxrt_mmcsd { struct imxrt_mmcsd
{
struct rt_mmcsd_host *host; struct rt_mmcsd_host *host;
struct rt_mmcsd_req *req; struct rt_mmcsd_req *req;
struct rt_mmcsd_cmd *cmd; struct rt_mmcsd_cmd *cmd;
...@@ -93,7 +94,7 @@ struct imxrt_mmcsd { ...@@ -93,7 +94,7 @@ struct imxrt_mmcsd {
uint32_t *usdhc_adma2_table; uint32_t *usdhc_adma2_table;
}; };
static void _mmcsd_gpio_init(struct imxrt_mmcsd * mmcsd) static void _mmcsd_gpio_init(struct imxrt_mmcsd *mmcsd)
{ {
gpio_pin_config_t sw_config; gpio_pin_config_t sw_config;
...@@ -199,7 +200,7 @@ static void SDMMCHOST_ErrorRecovery(USDHC_Type *base) ...@@ -199,7 +200,7 @@ static void SDMMCHOST_ErrorRecovery(USDHC_Type *base)
} }
} }
static void _mmcsd_host_init(struct imxrt_mmcsd * mmcsd) static void _mmcsd_host_init(struct imxrt_mmcsd *mmcsd)
{ {
usdhc_host_t *usdhc_host = &mmcsd->usdhc_host; usdhc_host_t *usdhc_host = &mmcsd->usdhc_host;
...@@ -214,28 +215,28 @@ static void _mmcsd_host_init(struct imxrt_mmcsd * mmcsd) ...@@ -214,28 +215,28 @@ static void _mmcsd_host_init(struct imxrt_mmcsd * mmcsd)
USDHC_Init(usdhc_host->base, &(usdhc_host->config)); USDHC_Init(usdhc_host->base, &(usdhc_host->config));
} }
static void _mmcsd_clk_init(struct imxrt_mmcsd * mmcsd) static void _mmcsd_clk_init(struct imxrt_mmcsd *mmcsd)
{ {
CLOCK_EnableClock(mmcsd->ip_clock); CLOCK_EnableClock(mmcsd->ip_clock);
CLOCK_SetDiv(mmcsd->usdhc_div, 0U); CLOCK_SetDiv(mmcsd->usdhc_div, 5U);
} }
static void _mmcsd_isr_init(struct imxrt_mmcsd * mmcsd) static void _mmcsd_isr_init(struct imxrt_mmcsd *mmcsd)
{ {
//NVIC_SetPriority(USDHC1_IRQn, 5U); //NVIC_SetPriority(USDHC1_IRQn, 5U);
} }
static void _mmc_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req) static void _mmc_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req)
{ {
struct imxrt_mmcsd * mmcsd; struct imxrt_mmcsd *mmcsd;
struct rt_mmcsd_cmd * cmd; struct rt_mmcsd_cmd *cmd;
struct rt_mmcsd_data * data; struct rt_mmcsd_data *data;
status_t error; status_t error;
usdhc_adma_config_t dmaConfig; usdhc_adma_config_t dmaConfig;
usdhc_transfer_t fsl_content = {0}; usdhc_transfer_t fsl_content = {0};
usdhc_command_t fsl_command = {0}; usdhc_command_t fsl_command = {0};
usdhc_data_t fsl_data = {0}; usdhc_data_t fsl_data = {0};
rt_uint32_t * buf = NULL; rt_uint32_t *buf = NULL;
RT_ASSERT(host != RT_NULL); RT_ASSERT(host != RT_NULL);
RT_ASSERT(req != RT_NULL); RT_ASSERT(req != RT_NULL);
...@@ -430,7 +431,7 @@ static void _mmc_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req) ...@@ -430,7 +431,7 @@ static void _mmc_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req)
static void _mmc_set_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg) static void _mmc_set_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg)
{ {
struct imxrt_mmcsd * mmcsd; struct imxrt_mmcsd *mmcsd;
unsigned int usdhc_clk; unsigned int usdhc_clk;
unsigned int bus_width; unsigned int bus_width;
uint32_t src_clk; uint32_t src_clk;
...@@ -443,7 +444,7 @@ static void _mmc_set_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *i ...@@ -443,7 +444,7 @@ static void _mmc_set_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *i
usdhc_clk = io_cfg->clock; usdhc_clk = io_cfg->clock;
bus_width = io_cfg->bus_width; bus_width = io_cfg->bus_width;
if(usdhc_clk > IMXRT_MAX_FREQ) if (usdhc_clk > IMXRT_MAX_FREQ)
usdhc_clk = IMXRT_MAX_FREQ; usdhc_clk = IMXRT_MAX_FREQ;
src_clk = (CLOCK_GetSysPfdFreq(kCLOCK_Pfd2) / (CLOCK_GetDiv(mmcsd->usdhc_div) + 1U)); src_clk = (CLOCK_GetSysPfdFreq(kCLOCK_Pfd2) / (CLOCK_GetDiv(mmcsd->usdhc_div) + 1U));
...@@ -492,7 +493,8 @@ FINSH_FUNCTION_EXPORT(log_toggle, toglle log dumple); ...@@ -492,7 +493,8 @@ FINSH_FUNCTION_EXPORT(log_toggle, toglle log dumple);
// //
//} //}
static const struct rt_mmcsd_host_ops ops = { static const struct rt_mmcsd_host_ops ops =
{
_mmc_request, _mmc_request,
_mmc_set_iocfg, _mmc_set_iocfg,
RT_NULL,//_mmc_get_card_status, RT_NULL,//_mmc_get_card_status,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册