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

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

时间:10-07 来源:本站整理 点击:

单元,他们都受控制适配器寄存器组。时钟管理子单元产生和控制时钟信号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),如下图:

  

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

  回应:

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

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

  48位的短回应(short response)

  136位的长回应(long response)

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

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

  


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

  


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

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

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

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

网站地图

Top