串行接口的工作原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行接口的工作原理【摘】
2008-12-10 09:41
图10 1示出了一种8通道多路转换12位串行式模数转换器(ADC)AD7890与一种带串行接口的数字信号处理器(DSP)ADSP 2105接线图。图中还示出了使用DSP与ADC通信的时序图。通过一根线以串行数据流的形式传输12位转换结果。串行数据流还包括3位地址,用来表示
AD7890当前被选中的多路转换器中的输入通道。为了区分不同组的数据串行位流,必须提供时钟信号(SCLK),通常由DSP提供。有时ADC作为输出信号提供这种时钟信号。DSP通常(但不总是)提供一个附加的成帧脉冲,它要么在通信开始第一个周期有效,要么在通信期间(例如TFS/R FS)有效。
图10 1串行式ADC与DSP之间的接线图
在这个实例中,利用DSP的串行端口来设置ADC内部5位寄存器。这个寄存器的位控功能包括:选择通道、设定ADC处于电源休眠方式和起动转换。显然,这种情况下串行接口必须双向工作。
从另一方面来说,并行式ADC的数据总线直接(或可能通过缓冲器)与带接口的处理器的数据总线相连。图10 2示出了并行式ADC AD7892与ADSP 2101的接线图。当AD7892完成一次转换后,中断该
图10 2并行式ADC AD7892与ADSP 2001接线图
DSP,DSP响应后,按照ADC的译码内存地址读一次数据。串行式数据转换器与并行式数据转换器之间的重要差别在于需要的连接线数。从节省空间的角度来看,串行式数据转换器有明显的优点。因为它减少了器件的引脚数目,从而有可能做成8脚DIP或SO封装的12位串行式ADC或DAC。更重要的是它节省了印制线路板的空间,因为串行接口只需连接几根线条。
问:我的数模转换器(DAC)必须离中心处理器及其它处理器距离很远。我最好采用何种方法?
答:首先你必须确定是使用串行式DAC还是并行式DAC。当使用并行式DAC时,你应该确定每个DAC进入存储器I/O端口的地址,如图10.3所示。然后你应该对每个DAC编程,将写命令直接写入适当的I/O口地址。但这种结构具有明显的缺点。它不但需要并行数据总线,而且到所有远处的端口都需要一些控制信号线。然而串行接口只需要为数不多的两条
图10 3多个并行式DAC接线图
线,显然它比并行接口经济得多。一般说来,虽然串行式数据转换器不能对处理器的存储器寻址,但是可以把许多串行DAC接到处理器的串行端口上,然后利用处理器的其它端口产生片选信号来逐一地启动每个DAC。片选信号虽然仅需要一条线就能将每个DAC都接到串行接口上,但是接到处理器上传输片选信号线的数目可能受到限制。
解决这个问题的一种方法是采用菊花链(daisy chained)式结构,将所用的串行式DAC都连在一起。图10.4示出了如何将多个DAC连接到一个I/O端口上。每个DAC都有一个串行数据输出(SDO)脚,将第一个DAC(即DAC0)的SDO脚接到本菊花链中的下一个DAC(即DAC1)的串行数据输入(SDI)脚。LDAC和SCLK以并行方式被送到本菊花链中的所有DAC。因为在时钟作用下送入SDI的数据最终都要到达SDO(N个时钟周期之后),所以一个I/O端口能够寻址多个DAC。但是这个I/O端口必须输出很长的数据流(每个DAC占的N位乘以本菊花链中DAC的数目)。这种结构的最大优点是不需要对寻址的DAC进行译码。所有的DAC在相同
的I/O端口上都有效。菊花链式结构的主要缺点是可达性(accessibility)或等待时间长。即使要改变某一个DAC 的状态,处理器也必须从该I/O端口输出全部数据流。
图10 4多个串行式DAC菊花链式结构
问:既然串行式数据转换器节省许多空间和线路,那么为什么不在每个要求节省空间的应用场合都使用它们呢?
答:串行式数据转换器的主要缺点是为了节省空间从而降低了速度。例如,对并行DAC编程,只用一个写脉冲便可以把数据总线上的数据在时钟作用下送入DAC。然而,如果要把数据写入串行DAC,那么DAC
的位数必须等于相继的时钟脉冲数(N位DAC需要N个时钟脉冲),每个时钟脉冲后还要跟随一个装入脉冲。所以这种处理器的I/O端口与串行数据转换器通信要花费相当多的时间。因此吞吐率高于500ksps 的串行式DAC平常是少见的。
问:我的8位处理器没有串行接口,有什么办法可以把一个12位串行式ADC(例如AD7993)接到该8位处理器总线上?
答:当然我可以使用外部移位寄存器,将数据用串行(和异步)方式装入移位寄存器,然后在时钟作用下进入处理器的并行端口。但是,如果这个问题的着眼点是“没有外部逻辑”,那么可以把这个串行式ADC看作1位并行式ADC来连接。将该ADC的SDATA脚接到该处理器数据总线的一条数据线上,这里接到数据线D0。如图10.5所示。使用某种译码逻辑电路,能使该ADC的口地址看作是该处理器的一个存储器地址,以便用12个逐次读命令读取ADC的转换结果。然后用附加的软件命令把12个字节的LSB组合起来,拼成一个12位的并行字。
图10 5没有串行口的8位处理器与串行式ADC的接口
上面介绍的方法有时称作“位拆裂”(bit banging)。从软件的观点来看,这种方法是很不经济的,但是当处理器的运行速度远远高于ADC的转换速度时,这种方法可以采用。
问:在前面的例子中,利用了处理器的写信号门控方式来起动AD7893转换。请问这种方法是否有问题?
答:我很高兴你看出这一点。在这个例子中,每转换一次都要对AD7893的寻址存储器发出一个空操作的写命令。虽然没有数据交换,但是处理器仍然提供开始转换所需要的写脉冲。从硬件的观点来看,这种结构非常简单,因为它不必再产生一个转换信号。
但是,对信号必须进行周期性采样的交流数据采集应用场合,不推荐这种方法。即使程控处理器,对ADC 发出周期性写命令,写脉冲的相位抖动将会严重降低实际得到的信噪比。经过门控之后写脉冲会抖动得更坏。例如,假设采样时钟相拉抖动仅仅1ns,对一个理想的100kHz正弦波来说,其信噪比会降到大约600dB(低于10有效位分辨率)。另外一个缺点是,过冲和采样信号噪声都会进一步降低模数转换的完整性。
问:我应该在什么时候选择具有异步串行接口的数据转换器?
答:异步通信方式允许设备之间交换信息,不必借助于时钟。为了使用相同的数据格式,必须对设备初始化,其中包括设置一种传输速率(通常用波特率表示,或位数每秒)。还应该规定转换结果如何开始传送和结束传送。我们使用容易识别的带有起始位和停止位的数据序列来传送数据。传送过程还包括奇偶校验位,用来检测设备出错。
图10 6示出了AD1B60数字化信号调节器与PC机异步通信端口之间的接线图。这是一种3线双向接口(为了简明,地线省去未画)。应该注意发送线与接收线在线路的另一端位置交换。
图10 6AD1B60与PC机之间的异步通信接口
异步通信线路对仅限于设备分散式通信应用场合是很有用的。因为在每次传送中都包括起始位和停止位,所以设备在任何时间只要输出其数据就可以开始通信。另外设备之间的接线数目也减少了,因为时钟和控制信号线都不需要了。
问:有一种ADC产品说明在串行接口中推荐使用非连续时钟,为什么?
答:这种技术要求可能是指ADC在转换过程期间要求其时钟信号无效。有的ADC有这种要求,因为连续的时钟信号能够馈送到ADC的模拟部分,反过来会影响转换结果。如果I/O端口有一个帧脉冲,那么连续的时钟信号在转换期间可能变成不连续。这个帧脉冲用作门控信号,只有在数据传递时才允许将串行时钟送到ADC。
问:如何使设备与SPI或MICROWIRE接口标准兼容?
答:SPI(串行外围接口)与MICROWIRE分别是美国摩托罗拉公司和国家半导体公司研制的串行接口标准。大多数同步串行式数据转换器都很容易与这两种接口连接,但是在有些情况下可能需要附加连接逻辑(glue logic)。
问:好,我放弃偏见,在我的当前设计中决定使用串行ADC。我按照产品说明的技术要求刚刚把线路接好。当用MICROWIRE标准转换结果时,ADC的输出好像总是FFF HEX(不论模拟输入电压如何变化),这是怎么回事?
答:这或许是通信问题。首先我们需要检查ADC与处理器之间的连接问题,即定时和控制信号线是否接好。我们还需要检查一下处理器的中断结构。与时序有关的可能误差有许多。你要想检查这个问题,首先将所有