微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯(三)

工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯(三)

时间:05-11 来源:互联网 点击:
STM32的SDIO控制SD卡

  一、STM32的SDIO适配器的结构

  STM32的SDIO适配器包括与AHB总线接口和SD卡接口两个大块儿。如下面图中两个灰色阴影区域。

  左侧的阴影部分又细分两个子单无,适配器寄存器组和FIFO。适配器寄存器组包含了所有SDIO所有的寄存器,这些寄存器用于配置一些参数,以实现一些SD协议中的时序,最终于实现SD卡的命令传输。FIFO则是为了实现数据的传输,这两者部分分别代表者对SD卡的两种传输操作,即命令的传输和数据的传输。

  右侧的阴影部分,即SDIO适配器的SD卡接口大块儿,又细分为三个子单元。控制单元(Control Unit),命令通道和数据通道(Command Path and Data Path)。控制单元主要实现电源和时钟的控制。它根据适配器寄存器组中寄存器的配置,开启和关闭SDIO适配器模块的电源,改变工作的时钟源(直接使用 SDIO_CLK还是其分频后的时钟等)。命令通道连接CMD线,控制命令的传输。数据通道连接数据线(DAT0~DAT7),控制数据的传输。

  


  二、分单元详述

  下面按照上面一章提到的五个子单元的划分,对各子单元进行详细的描述。

  1、适配器寄存器组

  The adapter register block contains all system registers. This block also generates the signals that clear the static flags in the multimedia card. The clear signals are generated when 1 is written into the corresponding bit location in the SDIO Clear register.

  这个STM32数据手册上关于这一部分的全部描述,大体上就是说:适配器寄存器组包含了所有的系统寄存器。它还产生用于清除MMC卡的静态标志位的信号。当向SDIO Clear register(清除寄存器)的对应位写1,即产生这个信号。

  2、控制单元

  这一单元又在内部分为电源管理和时钟管理两个子单元,他们都受控制适配器寄存器组。时钟管理子单元产生和控制时钟信号SDIO_CK,也就是SD卡最络接收到的SCK。时钟管理子单元工作于两种模式时钟分频模式和时钟直通模式(Bypass,标准的翻译不知是什么,似乎可以是“旁路”,但“直通”更容易理解些)。当工作在直通模式进,SDIO_CK==SDIO_CLK.工作于分频模块时,SDIO_CK==SDIO_CLK/div.

  在如下情形下,时钟是不输出时钟信号的:

  复位后

  上电和掉电期间

  省电模式下总线处于空闲模式时

  电源管理子单元在上电和掉电时关继时适配器的输出信号。

  

  3、命令通道

  命令通道向卡发送命令和接收回应。

  


  如图所示,图上左侧阴影部分是属于适配器寄存器组子单元里的两个寄存器,分别为SDIO_ARG和SDIO_CMD,后者用于添加想要发送的命令,前者用于添加所要发送的命令的参数,将两个添好之后使能命令发送,命令就会自动发送出去。适配器上述两个寄存器的内容进行组合,并最终形成48位长的命令,这48 位首先进入移位寄存器,即图中的Shift register,在这里由并转串一位一位的发送,由图可见,这些位要经过CRC后,才发送出去。实际上,前面讲的总位数并非48,在这里经过CRC,生成那些位的CRC较验值,并追加到其尾部,最络才是48位。命令分为有回应的和没有回应的两种。如果发送的是没有回应的命令,发送之后会对标志位中的相送位置位,通知系统,命令发送正常,然后进入空闭状态。如果发送的命令是有回应的命令,则要等待回应。接收到回应之后,会对回应进行CRC校验,并设定相关位。下面是命令通道的状态机:

  


  进入等待状态后,命令时钟(command timer)开始计时,如果到达超时时间CPSM状态机还没移动到接收状态,则置位超时标志并进入空闲状态。

  注意:命令超时时间是固定值,为64个SDIO_CK。

  如果在命令寄存器中设置了中断位(interrupt bit),就不会启用上面讲到的超时时钟,CPSM状态机会一直等待来自卡的中断请求。如果在命令寄存器中置位了悬停位(pending bit),CPSM状态机会进入悬停状态(所谓的挂起状态),并等待来自数据通道子单元的CmdPend信号。检测到CmdPend位以为,CPSM状态机会移动到发送状态(Send state),这将使数据计数器停止命令的传输。

  注意:CPSM会在空闲模式停留至少8个SDIO_CK时间,以满足Ncc和Nrc的时间要求。Ncc时两次主机命令传输的最小延迟,而Nrc时主机命令与卡的回应之间的最小延迟。如下图:

  


  命令的格式:

  命令即是开始传输的一个标记。命令由主机发送给单个卡(寻址性命令)或是所有的卡(广播性命令,MMC V3.31及更早的MMC卡标准中支持)。命令通过CMD信号线串行传输,所有的命令都有一个固定的长度,即48位。命令的格式如下图:

  


  命令通道工作于半双工模式,所以可以发送,也可以接收命令或回应。如果CPSM状态机不在发送状态(Send State),SDIO_CMD为高阻状态(Hi-Z state),如下图:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top