新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯(三)

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

作者:时间:2013-05-11来源:网络收藏
的SDIO控制SD卡

  一、的SDIO适配器的结构

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

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

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

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


  二、分单元详述

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

  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.

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

  复位后

  上电和掉电期间

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

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

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

  3、命令通道

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

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


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

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


  进入等待状态后,命令时钟(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时主机命令与卡的回应之间的最小延迟。如下图:

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


  命令的格式:

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

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


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

  

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

  SDIO_CMD在SDIO_CK的上升沿进行同步。

  回应:

  回应是由被寻址的卡发出的一个标记(或是在MMC V3.31及以前标准中,所有连接在适配器上的卡同步发送),此标记由卡发给主机,是对刚刚接收到的命令的回答。回应是在CMD信号线上串行传输的。

  SDIO支持两种回应类型,都是进行CRC校验的:

  48位的短回应(short response)

  136位的长回应(long response)

  注意:如果回应不包含CRC校验信息(如CMD1的回应),设备驱动就必须忽略CRC错误的状态。

  下面两张表是两种回应的格式:

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


  前面讲到,SDIO适配器包含两个大块儿,详见本帖开头,这里只拿出图来:

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


 其中,与AHB接口相连的有两个块儿,就是上图中左侧阴影部分,Adapter registers 和FIFO,即适配器寄存器组和数据FIFO。前者包含了适配器所有的寄存器,用于配置相应时序,产生相应的信号。

  这里面,用于控制命令通道产生命令时序的就有两个寄存器,名为SDIO_ARG和SDIO_CMD,SDIO_ARG的三十二位全部用来存储命令参数,也就没什么好讲的了。SDIO_CMD则不同,它有六个位,用来识别不同的命令,总共可以区别64个,但实际上SD卡的命令集没有那么多。 SDIO_CMD还有一些位,用来表示些命令时否有回应,是长回应还是短回应,命令的类型是什么等等。适配器最终根据这些,加上CRC组合成一个48位的命令。

  另外,我们还提到过命令发送之后,如果这是一个没有回应的命令,那么就很简单,命令通道直接置位CMDSENT标志,或进入空闲状态。如果是有回应的,则要等待回应,并设定相关的标志位。命令通道的相关标志位如下:

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


  CRC 产生器计算的是CRC码前面的所有位的校验和。这包括开始位,传输位,命令索引(command index)和命令参数(和卡状态)。对长回应格式来说,CRC校验和计算的是CID或CSD的前120位。这里不包括开始位,传输位和六个保留位。 CRC是一个7位的值,其计算方法如下:

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

pwm相关文章:pwm是什么


pwm相关文章:pwm原理




关键词: STM32 单片机 PWM

评论


相关推荐

技术专区

关闭