首页 > 其他分享 >初学STM32 SDIO (三)

初学STM32 SDIO (三)

时间:2024-04-08 22:13:23浏览次数:28  
标签:命令 适配器 STM32 SDIO 初学 寄存器 数据 时钟

1. STM32的SDIO功能框图

​ STM32控制器有一个SDIO,由两部分组成: SDIO适配器和APB2接口, SDIO适配器提供SDIO主机功能,可以提供SD时钟、发送命令和进行数据传输。 APB2接口用于控制器访问SDIO适配器寄存器并且可以产生中断和DMA请求信号。

image-20240408214526509

​ SDIO使用两个时钟信号,一个是SDIO适配器时钟(SDIOCLK=48MHz),另外一个是APB2总线时钟(PCLK2,一般为84MHz)。STM32控制器的SDIO是针对MMC卡和SD卡的主设备,所以预留有8根数据线,对于SD卡最多用四根数据线。

2. SDIO适配器

​ SDIO适配器是SD卡系统主机部分,是STM32控制器与SD卡数据通信中间设备。 SDIO适配器由五个单元组成,分别是控制单元、命令路径单元、数据路径单元、寄存器单元以及FIFO。

image-20240408215013880

2.1 命令路径

​ 命令路径控制命令发送,并接收卡的响应, 当SD卡处于某一状态时,SDIO适配器必然处于特定状态与之对应。STM32控制器以命令路径状态机(CPSM)来描述SDIO适配器状态变化, 并加入了等待超时检测功能,以便退出永久等待的情况。

image-20240408215146768

  • CPSM状态机

image-20240408215226552

2.2 数据路径

​ 数据路径部件负责与SD卡相互数据传输, SDIO适配器以数据路径状态机(DPSM)来描述SDIO适配器状态变化情况。并加入了等待超时检测功能,以便退出永久等待情况。发送数据时, DPSM处于等待发送(Wait_S)状态,如果数据FIFO不为空, DPSM变成发送状态并且数据路径部件启动向卡发送数据。接收数据时, DPSM处于等待接收状态,当DPSM收到起始位时变成接收状态,并且数据路径部件开始从卡接收数据。

image-20240408215315432

  • DPSM状态机

image-20240408215339675

2.3 数据FIFO

​ 数据FIFO(先进先出)部件是一个数据缓冲器,带发送和接收单元。控制器的FIFO包含宽度为32bit、深度为32字的数据缓冲器和发送/接收逻辑。
​ SDIO状态寄存器(SDIO_STA)的TXACT位用于指示当前正在发送数据, RXACT位指示当前正在接收数据, 这两个位不可能同时为1。

  • 当TXACT为1时,可以通过APB2接口将数据写入到传输FIFO。
  • 当RXACT为1时,接收FIFO存放从数据路径部件接收到的数据。
    根据FIFO空或满状态会把SDIO_STA寄存器位值1,并可以产生中断和DMA请求。

2.4 适配器寄存器

​ 适配器寄存器包含了控制SDIO外设的各种控制寄存器及状态寄存器,内容较多,可以通过SDIO提供的各种结构体来了解,这些寄存器的功能都被整合到了结构体或ST标准库之中。

3. SDIO相关结构体

​ 标准库函数对SDIO外设建立了三个初始化结构体,分别为SDIO初始化结构体SDIO_InitTypeDef、 SDIO命令初始化结构体SDIO_CmdInitTypeDef和SDIO数据初始化结构体SDIO_DataInitTypeDef。

  • 初始化结构体成员用于设置SDIO工作环境参数,并由SDIO相应初始化配置函数或功能函数调用,这些参数将会被写入到SDIO相应的寄存器,达到配置SDIO工作环境的目的。
  • SDIO命令初始化结构体用于设置命令相关内容,比如命令号、命令参数响应类型等等。
  • SDIO数据初始化结构体用于配置数据发送和接收参数,比如传输超时、数据长度、传输模式等等。

3.1 SDIO初始化结构体

​ SDIO初始化结构体用于配置SDIO基本工作环境,比如时钟分频、时钟沿、数据宽度等等。

image-20240408215711913

  • SDIO_ClockEdge: 主时钟SDIOCLK产生CLK引脚时钟有效沿选择,可选上升沿或下降沿,它设定SDIO时钟控制寄存器(SDIO_CLKCR)的NEGEDGE位的值,一般选择设置为高电平。

  • SDIO_ClockBypass: 时钟分频旁路使用,可选使能或禁用,它设定SDIO_CLKCR寄存器的BYPASS位。如果使能旁路, SDIOCLK直接驱动CLK线输出时钟;如果禁用,使用SDIO_CLKCR寄存器的CLKDIV位值分频SDIOCLK,然后输出到CLK线。一般选择禁用时钟分频旁路。

  • SDIO_ClockPowerSave: 节能模式选择,可选使能或禁用,它设定SDIO_CLKCR寄存器的PWRSAV位的值。如果使能节能模式, CLK线只有在总线激活时才有时钟输出;如果禁用节能模式,始终使能CLK线输出时钟。

  • SDIO_BusWide: 数据线宽度选择,可选1位数据总线、 4位数据总线或8为数据总线,系统默认使用1位数据总线,操作SD卡时在数据传输模式下一般选择4位数据总线。它设定SDIO_CLKCR寄存器的WIDBUS位的值。

  • SDIO_HardwareFlowControl: 硬件流控制选择,可选使能或禁用,它设定SDIO_CLKCR寄存器的HWFC_EN位的值。硬件流控制功能可以避免FIFO发送上溢和下溢错误

  • SDIO_ClockDiv: 时钟分频系数,它设定SDIO_CLKCR寄存器的CLKDIV位的值,设置SDIOCLK与CLK线输出时钟分频系数:
    CLK线时钟频率=SDIOCLK/([CLKDIV+2])。

3.2 SDIO命令初始化结构体

​ SDIO命令初始化结构体用于设置命令相关内容,比如命令号、命令参数、响应类型等等。

image-20240408215953432

  • SDIO_Argument: 作为命令的一部分发送到卡的命令参数,它设定SDIO参数寄存器(SDIO_ARG)的值。

  • SDIO_CmdIndex: 命令号选择,它设定SDIO命令寄存器(SDIO_CMD)的CMDINDEX位的值。

  • SDIO_Response: 响应类型, SDIO定义两个响应类型:长响应和短响应。根据命令号选择对应的响应类型。 SDIO定义了四个32位的SDIO响应寄存器(SDIO_RESPx,x=1..4),短响应只用到SDIO_RESP1。

  • SDIO_Wait: 等待类型选择,有三种状态可选,一种是无等待状态,超时检测功能启动;一种是等待中断,另外一种是等待传输完成。它设定SDIO_CMD寄存器的WAITPEND位和WAITINT位的值。

  • SDIO_CPSM: 命令路径状态机控制,可选使能或禁用CPSM。它设定SDIO_CMD寄存器的CPSMEN位的值。

3.3 SDIO数据初始化结构体

image-20240408220251650

  • SDIO_DataTimeOut: 设置数据传输以卡总线时钟周期表示的超时周期,它设定SDIO数据定时器寄存器(SDIO_DTIMER)的值。在DPSM进入Wait_R或繁忙状态后开始递减,直到0还处于以上两种状态则将超时状态标志置1

  • SDIO_DataTimeOut: 设置数据传输以卡总线时钟周期表示的超时周期,它设定SDIO数据定时器寄存器(SDIO_DTIMER)的值。在DPSM进入Wait_R或繁忙状态后开始递减,直到0还处于以上两种状态则将超时状态标志置1

  • SDIO_DataBlockSize: 设置数据块大小,有多种尺寸可选,不同命令要求的数据块可能不同。它设定SDIO数据控制寄存器(SDIO_DCTRL)寄存器的DBLOCKSIZE位的值。

  • SDIO_TransferDir: 数据传输方向,可选从主机到卡的写操作,或从卡到主机的读操作。它设定SDIO_DCTRL寄存器的DTDIR位的值。

  • SDIO_TransferMode: 数据传输模式,可选数据块或数据流模式。对于SD卡操作使用数据块类型。它设定SDIO_DCTRL寄存器的DTMODE位的值。

  • SDIO_DPSM: 数据路径状态机控制,可选使能或禁用DPSM。它设定SDIO_DCTRL寄存器的DTEN位的值。要实现数据传输都必须使能SDIO_DPSM。

标签:命令,适配器,STM32,SDIO,初学,寄存器,数据,时钟
From: https://www.cnblogs.com/lyk-23/p/18122763

相关文章

  • 配置STM32单片机的两个高速输入端子接受AB相高速脉冲信号输入的方法
    目录1.配置GPIO引脚:2.配置TIM计数器:3.配置中断:4.计数器值的获取:        要使用STM32单片机的两个高速输入端子接受AB相高速脉冲信号输入,并使用TIM计数器的不同通道对每相的计数,请按照以下步骤操作:1.配置GPIO引脚:        首先,需要将两个高速输入......
  • 初学STM32 SDIO (二)
    ​ SD命令由主机发出,以广播命令和寻址命令为例,广播命令是针对与SD主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。1.SD命令格式SD命令格式固定为48bit,都是通过CMD线连续传输的,数据线不参与。起始位和终止位:命令的主体包含在起始位与终止位之间,它......
  • 初学STM32 SDIO(一)
    1.SDIO协议简介​ SDIO全称是安全数字输入/输出接口,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。多媒体卡(MMC)、SD卡、SDI/O卡都有SDIO接口。STM32F407系列控制器有一个SDIO主机接口,它可以与MMC卡、SD卡、SDI/O卡以及C......
  • 基于STM32单片机智能垃圾桶红外感应雨滴检测语音设计21-766
    21-766、STM32智能垃圾桶设计-E18-KEY-红外对管-ISD1820-水滴-电磁锁产品功能描述:本设计有STM32F103C8T6单片机核心板电路+红外避障传感器电路+按键电路+红外对管电路+ISD1820语音模块电路+水滴传感器电路+电磁锁电路组成。1、通过红外避障传感器和按键均可以控制电磁锁的开......
  • 基于STM32单片机汽车防盗GPS定位GSM短信加速度检测设计21-880
    21-880、STM32汽车防盗系统设计-震动-ADXL345-GPS-GSM-RELAY产品功能描述:本设计由STM32F103C8T6单片机核心板电路+震动传感器电路+ADXL345重力加速度传感器电路+GPS模块电路+GSM模块电路+继电器控制电路组成。1、系统将是否有震动以及是否有倾倒以及对应的GPS经纬度信息,每隔......
  • Proteus8.0仿真应用设计(二十六)基于FreeRTOS、STM32F103C8、HAL库、4x4矩阵键盘应用设
    一、仿真原理图:二、部分代码:        按键采集uint8_tKeyScan(void){ uint8_tvalue=0x00; KeyPort->ODR=0x00; KeyPort->ODR=0xf7; if((KeyPort->IDR&0xf0)!=0xf0) { HAL_Delay(50); if((KeyPort->IDR&0xf0)!=0xf0) { value=......
  • 如何使用Git和GitHub - 初学者和有经验开发者的指南
    欢迎来到初学者的Git和GitHub!这份综合指南旨在帮助您探索版本控制和协作的世界。无论您是刚开始的新手还是经验丰富的开发者想要提升技能,这个指南都提供了逐步的方法来理解和有效使用Git和GitHub。通过本次旅程,您将建立起对Git和GitHub的坚实基础。您将具备实用知识,以简化您的编......
  • STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)
    一、前言目前有一个关于通过STM32F411CEUx的I2S总线接口控制SSS1700芯片进行音频输入输出的研究。SSS1700是具有片上振荡器的3S高度集成的USB音频控制器芯片。SSS1700功能支持96KHz24位采样率,带外部音频编解码器(24位/96KHzI2S输入和输出)并具有内置立体声16/24......
  • Vscode+gcc-arm+openocd搭建STM32开发环境
    1简介尝试使用Vscode搭建STM32开发环境,自己记录一下详细的配置过程2工具下载设计到的相关软件以及资源包括Vscode软件、STM32CubeMX、mingw64以及openocd,相应的软件介绍以及下载链接如下:Vscode软件:宇宙第一编辑器,开源,插件丰富CubeMx:初始化代码生产器,HAL库mingw64:因......
  • 3-STM32+W5500远程升级篇OTA(阿里云物联网平台)-STM32通过W5500使用http下载程序文件,
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/STM32W5500AIR202A/alyota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  ......