朱国钟
【摘要】便携小音箱一般包括模拟音频输入AUX、外放喇叭、SD卡接口、USB接口和按键。在实际使用中,一般不会同时进行USB和SD通信,如果能够将USB接口和SD接口的引脚复用起来,节省2个引脚,那么用8pin封装的主控来实现便携小音箱功能,将会是一个非常有价值的解决方案。
【关键词】USB;SD卡;分时复用;插入检测
1.引言
随着电子技术的发展,应用需求的迅速膨胀,终端芯片的集成功能越来越多,导致芯片引出管脚不断增加。另一方面,为减少封装成本和制造成本,生产商对封装成本和应用成本的控制是越来越严格,这就要求减少封装引脚数目。显然人们的需求和成本是矛盾的。
在消费电子领域,便携小音箱因为体积小、音效好、功能全、使用方便等特点,广受消费者的欢迎。便携小音箱一般包括模拟音频输入AUX、外放喇叭、SD卡接口、USB接口和按键。为了支持这些功能,便携小音箱的主控芯片一般包括1个AUX输入引脚、3个SD卡接口引脚、2个USB接口引脚、1个DAC输出引脚、1个按键检测引脚,2个电源引脚,共10个引脚。常见的16pin封装对这种功能需求,显得冗余。为了节省主控芯片成本,去选择8pin封装时候,又无法完全实现便携小音箱的功能需求。
当前消费电子产品的USB接口和SD接口与MCU的连接关系如图1所示。
图1 现有USB/SD接口结构示意图
便携小音箱在实际使用中,一般不会同时进行USB和SD通信,如果能够将USB接口和SD接口的引脚复用起来,节省2个引脚,那么用8pin封装的主控来实现便携小音箱功能,将会是一个非常有价值的解决方案。
2.USB和SD接口复用硬件电路
如图2所示,本文以便携小音箱的应用方案为例,描述一种USB和SD接口复用电路设计,包括MCU主控芯片,USB接口和SD接口。MCU主控芯片包括CPU,SD模块,USB模块,定时器,电平检测模块,通用输入输出引脚IOA、IOB、IOC和IOD,复用控制模块;USB接口包括第一数据引脚USB_DM和第二数据引脚USB_DP;SD接口包括命令引脚SD_CMD、时钟引脚SD_CLK、数据引脚SD_DATA、插入检测引脚SD_DET;SD_CLK引脚和IOA引脚连接,SD_DAT引脚和IOB引脚连接,SD_CMD引脚和IOC引脚连接,SD_DET引脚与IOD引脚连接;USB_DM和USB_DP分别与IOA和IOB两个引脚连接。
复用控制模块用于控制SD模块、USB模块、电平检测模块和通用输入输出引脚IOA、IOB、IOC、IOD的连接关系;SD模块通过复用控制模块,和通用输入输出引脚IOA、IOB、IOC连接; USB模块通过复用控制模块,和通用输入输出引脚IOA、IOB连接;电平检测模块通过服用控制模块,和通用输入输出引脚IOA、IOB、IOD连接。
3.USB和SD接口复用软件控制流程
为了实现USB和SD接口复用方法,MCU软件需要设置6个USB接口状态,6个SD接口状态和3个工作流程。接口状态如图3所示。
6个USB接口状态:USB离线状态、USB在线状态、USB挂起状态、USB激活状态、USB空闲状态、USB通信状态。USB离线状态和USB在线状态同一时间只有一个状态有效,USB在线状态为USB挂起状态和USB激活状态的前提条件。USB挂起状态和USB激活状态同一时间最多只有一个状态有效,USB激活状态为USB空闲状态和USB通信状态的前提条件。USB空闲状态和USB通信状态同一时间最多只有一个状态有效。
图3 USB/SD 工作状态示意图
6个SD接口状态:SD离线状态、SD在线状态、SD挂起状态、SD激活状态、SD空闲状态、SD通信状态。SD离线状态和USB在线状态同一时间只有一个状态有效,SD在线状态为SD挂起状态和SD激活状态的前提条件。SD挂起状态和SD激活状态同一时间最多只有一个状态有效,SD激活状态为SD空闲状态和SD通信状态的前提条件。SD空闲状态和SD通信状态同一时间最多只有一个状态有效。
USB激活状态和SD激活状态同一时间最多只有一个状态有效。
利用CPU,SD模块,USB模块,定时器,电平检测模块,通用输入输出引脚IOA、IOB、IOC和IOD,复用控制模块等硬件结构,配合软件操作流程,实现USB和SD接口检测切换流程。
下面举例说明具体实现检测切换的过程及步骤。
假设通电开机时,没有插入SD卡和U盘,开机后先插入SD卡播放,再插入U盘播放。
开机后,USB接口和SD接口均处于离线状态。软件设置使能定时器每50ms产生一次中断。CPU进入定时中断子程序后,按既定流程检测USB接口和SD接口的连接情况。根据检测的结果,设置USB接口和SD接口的状态。
插入SD卡后,定时器产生定时中断,CPU执行如下检测和设置步骤:(1)流程a检测“USB是否处于通信状态”。USB不在通信状态,进入流程b;(2)流程b检测“SD是否处于通信状态”。SD卡不在通信状态,进入流程c;(3)流程c检测“USB是否处于空闲状态”。USB不在空闲状态,进入流程d;(4)流程d检测“SD是否处于空闲状态”。SD不在空闲状态,进入流程e;(5)流程e检测“SD是否处于挂起状态”。SD不在挂起状态,进入流程o;(6)流程o检测“SD是否在线”。此时已经插入SD卡,SD卡在线,进入流程p;(7)流程p里面,CPU配置复用控制模块,建立SD模块和IOA、IOB、IOC的连接。设置SD接口为激活状态,进入流程s;(8)退出中断子程序后,根据音箱系统的需要,进行SD通信。
此后,再插入U盘。定时器产生定时中断,CPU执行如下检测和设置步骤:(1)流程a检测“USB是否处于通信状态”,USB不在通信状态,进入流程b;(2)流程b检测“SD是否处于通信状态”,如果SD卡处于通信状态,则退出中断子程序,等待定时器再次中断,如果SD卡不处于通信状态,因为SD接口已经被激活,则必然处于空闲状态,进入流程c;(3)流程c检测“USB是否处于空闲状态”,USB不在空闲状态,进入流程d;(4)流程d检测“SD是否处于空闲状态”,SD接口处于空闲状态,进入流程k;(5)流程k检测“USB是否处于挂起状态”,USB不在挂起状态,进入流程l;(6)流程l里面,为了避免USB检测动作影响SD模块和SD卡,将SD设置为挂起状态,再检测“USB是否在线”,此时U盘已经插入在线,进入流程m;(7)流程m将USB设置为激活状态后,进入流程s;(8)退出中断子程序后,根据音箱系统的需要,进行USB通信。
对于先插入U盘,再插入SD卡的情况,可以参考上述过程,实现在线检测和状态设置。
如果SD接口正处于激活状态,SD卡也仍然连接在线,系统需要进行SD通信时,CPU执行如下步骤:(1)流程a检测SD卡是否在线。因为SD没有被拔出,进入流程b;(2)流程b里面,将SD接口设置为通信状态。然后进入流程c,开始SD通信;(3)SD通信结束后,进入流程d;(4)流程d将SD接口设置为空闲状态后,进入流程f,退出SD通信流程。
如果USB接口正处于激活状态,但U盘已经被拔出。当系统尝试再进行USB通信时,CPU执行如下步骤:(1)流程a检测USB盘是否在线,因为U盘已经被拔出离线,进入流程e;(2)流程e将USB接口设置为离线状态后,进入流程f,退出USB通信流程。
结合上述硬件电路和软件流程,即可实现USB接口和SD卡接口的分时复用功能。
4.总结
本文所述的USB和SD接口复用电路,通过配置MCU主控芯片内复用控制模块控制设定和通用输入输出接口状态,配合软件的处理流程,分时复用IOA、IOB、IOC、IOD引脚,进行USB通信或SD通信。SD设备和USB设备插拔动作和连线状态,都不会干扰当前正在使用的USB设备或者SD设备。与现有设计相比,在不影响MCU主控芯片应用功能的同时减少了引脚数量需求,降低产品的生产成本。
参考文献
[1]单片机接口技术.
[2]SD Specifications Part 1 Physical Layer Specification Revision3.01.
[3]Universal Serial Bus Specification Revision 2.0.
[4]USB开发大全(第4版).
[5]新概念51单片机C语言教程.