用CPLD 支持多个 SD 器件
在一个系统中添加多个安全数字 (SD) 器件的需求日益增长。然而,问题是大多数主机器件(如 Intel PXA270、TI OMAP 和 Qualcomm MSM 处理器)都只提供一个 SD 接口。幸运的是,使用复杂可编程逻辑器件(CPLD)即可使主机器件支持任意数量的 SD器件。本文详细讲述一种基于可缩放自动侦测双向多路复用器的设计。
图 1 所示为通用的 CPLD使用模型,可以为仅自带一个 SD 接口的给定主机器件集成任意数量的 SD 端口。CPLD 处于主机控制器和 SD 器件之间。这样,CPLD 器件便起到双向多路复用器的作用,使主机器件能够与选定的任意 SD 器件通信。更重要的是,这种设计没有方向控制引脚,也就是说CPLD自动检测数据流方向。
这种实现方法极其灵活且可缩放,允许随意增减 SD 端口数量。这种设计还支持 SPI 模式、1位数据模式和 4 位数据模式中任一种定义的 SD 卡模式。
在此类应用中使用CPLD器件,主要目的是为主机控制器提供更多的 SD 端口,而次要作用是在主机器件与 SD 卡之间实现电平转换和逻辑隔离。图 1 所示为主机器件是1.8V 而 SD 器件是 3.3V 的情形。业界最新CPLD 的待机电流微不足道,而动态功耗极低。因此,在系统中集成一个复杂可编程逻辑器件不会显著影响功率预算。
符合 SDA 规范
根据SDA(安全数字协会) 规范的规定,一条 SD 总线只能支持一个 SD 器件。时钟引脚可以共用,但 DAT[3:0] 和 CMD 线则必须由每个 SD 器件独占。有关详情,请见图 2。
此参考设计完全符合 SDA 规范。下一部分讲解当使用只有一条总线的控制器支持任意数量的SD 器件时如何满足上述要求。
CPLD 设计
图 3 所示框图为用此设计实现两个 SD 器件共用同一 SD 主机接口时的典型用法。从概念上讲,可以将这种设计视为和用作双向多路复用器。主机器件通过 “选择”信号控制 CPLD,从而指示与哪个 SD 器件通信。一旦选中某个 SD 器件,CPLD 器件中的逻辑便自动检测数据流的方向,并且让数据相应流动(从主机器件流向 SD 卡,或者从 SD 卡流向主机器件)。此设计不需要方向控制引脚,因此使用方便。
当多路复用器相应切换时,主机器件可分别访问各 SD 器件,而不会影响另一 SD 器件的状态。如果主机器件和 SD 器件都未驱动数据,则 CPLD 让系统处于默认的呈弱上拉状态的高阻抗。此电路的主要用途是加强主机器件的 SD 能力,但也可用此电路提供电平转换和 / 或逻辑隔离。
实现细节
图 4 所示为 1:2 双向多路复用器设计的实际逻辑电路,该设计可用VHDL 语言描述。在初始或空闲状态下,主机器件和 SD 卡应处于呈弱上拉状态的高阻抗。因此,图 4 中的电路设计成对 CPLD的输出缓冲器进行三态控制,从而使外部上拉电阻起作用。寄存器 A (A_REG) 和寄存器 B (B_REG) 都设计成在上电时初始化为逻辑“0”。
通过向 CPLD 输入 “选择”信号来选择 SD 卡。当 “选择”信号为逻辑 “0”时选择 SD1,而当 “选择”信号为逻辑 “1”时选择 SD1 器件。为电路叙述简明起见,我们假设在以下讨论中主机器件只选择与 SD1 通信。
此设计的自动方向控制方面的实现方式为:当主机器件与 SD1 器件二者之一置为低时启动事务。例如,如果主机器件准备向 SD1 器件传送数据,则主机器件通过将 A 侧置为低来开始传送。在置为低时,电路中的逻辑检测到置低的下降沿,并且通过启用 “B”输出缓冲器置为有效来响应,而 “A”输出缓冲器仍保持无效状态。尤其是当 A 置为低时,会向 A_REG 的时钟输入传送一个上升沿。继时钟控制之后,A_REG 的 Q 输出变为逻辑 “1”,从而阻止 B_REG 接收时钟控制事件。当 A 变为低时,逻辑门 B1 在 A_REG 时钟控制与触发的同时输出一个逻辑“1”。这样便可启用 “B”输出缓冲器,而 B 最终会跟随 A 置为低。
反之,当 A 从低转为高时,逻辑门 B1 输出一个低信号,对 B 输出缓冲器进行三态控制。这样便通过外部上拉电阻强制B 变为高。一旦 A 侧和 B 侧都变为高,则 A_REG 和 B_REG 复位到 0。此过程无限次重复。当 SD1 要向主机器件传送数据时,情况相反。另外,如果主机器件准备与 SD2 器件通信,则电路的 “选择”信号输入置为逻辑 “1”,其事件顺序与上述相似。
设计验证
仿真结果
对于此电路,用 ModelSim 进行了广泛的功能和时序仿真,测试激励已经包括在 VHDL 下载中。图 5 所示为部分仿真结果。
在图 5 的第一部分中,“选择”信号输入保持为低。白色虚线指示 “弱 1”状态,换言之就是表示上拉状态。在第一个事务中,主机器件尝试向 SD1 传送数据,SD1 随即响应。紧接着,SD1 器件尝试向主机器件传送数据,主机器件随即响应。当 “选择”信号输入置为低时,会发生类似事件。主机器件向 SD2 器件传送数据,然后 SD2 器件向主机器件传送数据。
硬件结果
Xilinx制作了一块 SD 多路复用器演示板,并用该电路板验证了此双向多路复用设计。图 6 所示为该演示板,在中间位置有一个CoolRunner-II XC2C32A CPLD。沿该板的上边缘是两个 SD 卡插槽。该板的最下部分是依照 SD 卡的实际尺寸设计的。图 7 所示为插在 USB SD 卡读卡器中的演示板。不出所料,无论是第一张卡还是第二张卡,XC2C32A 都能使 PC 与之完美地通信。
器件资源占用率
表 1 列出了各种实现的器件资源占用率统计数据。如 SDA 规范中所述,SD 卡有三种定义的信令模式,即:SPI 模式、1 位数据传输模式和 4 位数据传输模式。此设计可轻松地适用于任意一种选定模式。该设计还允许使用任意数量的 SD 扩展端口,默认的VHDL代码设置为两个端口。
电压和电流考虑事项
SDA 规范对 SD 卡规定了严格的电压和电流要求。可编程逻辑器件功耗极低并且具有 I/O分组等功能,因此非常适合这种应用。I/O 可以配置成 1.5V、1.8V、2.5V 或3.3V,因此可以连接任何 SD 器件。CPLD 还包含 I/O 组,因而具有在处理器与 SD 卡之间进行电压转换的功能。
现代复杂可编程逻辑器件的极低功耗特性使待机工作电流低达 15 μA。在系统中增加一个 低功耗 CPLD对电流预算影响甚微。
VHDL 下载
用于对这些设计进行编译和仿真的 VHDL 文件位于:
www.xilinx.com/cn/products/silicon_solutions/cplds/resources/coolvhdlq.htm
结论
随着 SD 器件的推广,将越来越需要用主机控制器支持多个 SD 器件的方法。本文针对手头问题提供了一种经过验证的解决方案。此解决方案让设计人员能够灵活地选择在一个系统中实现两个或更多 SD 器件。
作者:Mark Ng
Xilinx公司
CPLD应用工程主管应用工程师