嵌入式开发中经常会用到对外部sd卡进行相关的读写操作。下图是cpu硬件连接示意图
cpu硬件连接 引脚配置瑞如下:
void sd_lowlevel_deinit(void){ gpio_inittypedef gpio_initstructure; /*!< disable sdio clock */ sdio_clockcmd(disable); /*!< set power state to off */ sdio_setpowerstate(sdio_powerstate_off); /*!< deinitializes the sdio peripheral */ sdio_deinit(); /*!< disable the sdio ahb clock */ rcc_ahbperiphclockcmd(rcc_ahbperiph_sdio, disable); /*!< configure pc.08, pc.09, pc.10, pc.11, pc.12 pin: d0, d1, d2, d3, clk pin */ gpio_initstructure.gpio_pin = gpio_pin_8 | gpio_pin_9 | gpio_pin_10 | gpio_pin_11 | gpio_pin_12; gpio_initstructure.gpio_mode = gpio_mode_in_floating; gpio_init(gpioc, &gpio_initstructure); /*!< configure pd.02 cmd line */ gpio_initstructure.gpio_pin = gpio_pin_2; gpio_init(gpiod, &gpio_initstructure);}
dma部分配置如下:
void sd_lowlevel_dma_txconfig(uint32_t *buffersrc, uint32_t buffersize){ dma_inittypedef dma_initstructure; dma_clearflag(sd_sdio_dma_flag_tc | sd_sdio_dma_flag_te | sd_sdio_dma_flag_ht | sd_sdio_dma_flag_gl); /*!< dma2 channel4 disable */ dma_cmd(sd_sdio_dma_channel, disable); /*!< sdio dma channel config */ dma_initstructure.dma_peripheralbaseaddr = (uint32_t)sdio_fifo_address; dma_initstructure.dma_memorybaseaddr = (uint32_t)buffersrc; dma_initstructure.dma_dir = dma_dir_peripheraldst; dma_initstructure.dma_buffersize = buffersize / 4; dma_initstructure.dma_peripheralinc = dma_peripheralinc_disable; dma_initstructure.dma_memoryinc = dma_memoryinc_enable; dma_initstructure.dma_peripheraldatasize = dma_peripheraldatasize_word; dma_initstructure.dma_memorydatasize = dma_memorydatasize_word; dma_initstructure.dma_mode = dma_mode_normal; dma_initstructure.dma_priority = dma_priority_high; dma_initstructure.dma_m2m = dma_m2m_disable; dma_init(sd_sdio_dma_channel, &dma_initstructure); dma_itconfig(sd_sdio_dma_channel, dma_it_tc, enable); /*!< sdio dma channel enable */ dma_cmd(sd_sdio_dma_channel, enable); }void sd_lowlevel_dma_rxconfig(uint32_t *bufferdst, uint32_t buffersize){ dma_inittypedef dma_initstructure; dma_clearflag(sd_sdio_dma_flag_tc | sd_sdio_dma_flag_te | sd_sdio_dma_flag_ht | sd_sdio_dma_flag_gl); /*!< sdio dma channel disable */ dma_cmd(sd_sdio_dma_channel, disable); /*!< sdio dma channel config */ dma_initstructure.dma_peripheralbaseaddr = (uint32_t)sdio_fifo_address; dma_initstructure.dma_memorybaseaddr = (uint32_t)bufferdst; dma_initstructure.dma_dir = dma_dir_peripheralsrc; dma_initstructure.dma_buffersize = buffersize / 4; dma_initstructure.dma_peripheralinc = dma_peripheralinc_disable; dma_initstructure.dma_memoryinc = dma_memoryinc_enable; dma_initstructure.dma_peripheraldatasize = dma_peripheraldatasize_word; dma_initstructure.dma_memorydatasize = dma_memorydatasize_word; dma_initstructure.dma_mode = dma_mode_normal; dma_initstructure.dma_priority = dma_priority_high; dma_initstructure.dma_m2m = dma_m2m_disable; dma_init(sd_sdio_dma_channel, &dma_initstructure); dma_itconfig(sd_sdio_dma_channel, dma_it_tc, enable); /*!< sdio dma channel enable */ dma_cmd(sd_sdio_dma_channel, enable); } uint32_t sd_dmaendoftransferstatus(void){ return (uint32_t)dma_getflagstatus(dma2_flag_tc4);} sdio函数中断部分
等离子体刻蚀工艺简介
详解控制器的示波器使用
华为mate10发布在即!旧款华为P10倍感压力,华为P10再降至新低价,你是继续等待华为mate10还是入手华为P10?
部署物联网将需关注的六个必备要素
怎样修复Fusion 360中的自相交T样条错误
基于库函数的SD卡硬件驱动层代码实现方案
四川高温热到限电 宁德时代被迫停产
WinRAR目录穿越漏洞快速解决方案
人工智能时代与教育的融合
CRC和Checksum信号的区别 Checksum信号在CAPL中实现的方法
NUAIR加入AiRXOS,扩大无人机系统交通管理解决方案的应用
Holtek推出新一代的BS83xxxC系列Touch Flash MCU
硬朗造型+智能科技感 北通蝙蝠4游戏手柄即将震撼来临!
DFRobot DF9GMS 180° 微型舵机介绍
你会让LED来关注你的皮肤健康吗?
患者监护中的经胸阻抗测量
MDD辰达半导体携全新产品亮相深圳慕尼黑华南电子展
中国正寻求打破美国在芯片设计工具领域近乎垄断的局面
影像游戏双重升级, OPPO Reno5 Pro+登场
TI家电领域电机驱动分类及应用介绍