SPI菊花链原理和配置

更新时间:2023-05-17 21:55:25 阅读: 评论:0

摘要:在一个主机和多个从器件的典型SPI系统中,通常采用专门的片选信号来寻址从器件。随着从器件数量不断增加,片选线也随之增多。这种情况将给电路板布板带来很大的挑战。
一个布板方法就是采用菊链结构。本文详细讲述了SPI系统的菊链配置,并展示如何使用软件向串联从器件发送命令。 
标准SPI™/QSPI™/MICROWIRE™兼容微控制器通过3线/4线串口与从器件通信。典型接口包括片选信号(/CS)、串行时钟(SCLK)和数据输入信号(DIN),有时还会有数据输出信号(DOUT)。如同I²C系统中一样,单独寻址的器件能轻易的和总线上的其它器件通信。 
基本串行通信接口
dweep
很多SPI器件并不是单独寻址的。因此,这些器件和总线上其它单个器件通信时,就需要进行额外的硬件或者软件处理。图1所示是一个微控制器和多个从器件通信的系统。
螳螂捕蝉翻译
图1. 带有多个从器件独立片选信号的微控制器。
costco怎么读
在上述系统中,微控制器通过一个串行时钟输出(SCLK)和一个主机输出/从机输入(MOSI)信号线向各从器件发送命令。主机为每个器件分配了一个独立的片选信号(/SS_),从而实现各个从器件的独立寻址。由于所有从器件共享同一个时钟和数据线,只有/CS输入变低的从器件才会应答串行时钟和数据线。当从器件数目较少时,该系统较易实现。如果系统中从器件数较多,微控制器需要提供和从器件一样多的/SS_输出,这种结构就增加了硬件和布板的复杂程度。
可圈可点试题网菊链方法
pron是什么意思
硬件空间方面的限制往往会使图1所示的电路无法实现或难以实现。可采用菊链法替代实现串行接口。图2是一个有N个从器件的菊链系统结构。
图2. 微控制器连接多个从器件
采用一个/SS (或者/CS)信号控制所有从器件的/CS输入;所有从器件接收同一个时钟信号。只有链上的第一个从器件(SLAVE 1)从微控制器直接接收命令。其他所有从器件都从链上前一个器件的DOUT输出获得其DIN数据。
要保证菊链正常工作,每一个从器件就必须能在给定的命令周期内(定义为每一个命令所需的时钟数)从DIN引脚读入命令,而在下一个命令周期从DOUT引脚输出同样的命令。显然,
从DIN到DOUT会有一个命令周期的延迟。另外,各个从器件只能在/CS的上升沿执行写入的命令。这意味着只要/CS保持低电平,从器件将不会执行命令,并且会在下一个命令周期将命令通过DOUT引脚输出。如果在给定命令周期之后/CS变高,所有从器件将立即执行写入DIN引脚的命令。如果/CS变高,数据将不会从DOUT输出,这就使得链上每个从器件可以执行不同的命令。只要菊链的这些要求能够满足,微控制器只需三个信号(/SS、SCK和MOSI)就能控制网络上的所有从器件。
如何实现菊链
在菊链系统中(图2),SLAVE 1从微控制器直接接收数据。该数据在时钟驱动下进入SLAVE 1的内部移位寄存器。只要/CS (或/SS)仍然保持低电平,该数据将通过SLAVE 1的DOUT引脚输出。SLAVE 1的DOUT引脚接至SLAVE 2的DI引脚,因此当数据通过SLAVE 1的DOUT引脚端输出时,同时也被同步移入SLAVE 2的内部移位寄存器。同理,当SLAVE 2接收来自SLAVE 1的数据的时候,微控制器可同时向SLAVE 1发送另一个命令。该新命令将覆盖SLAVE 1移位寄存器中原来的数据。只要/CS保持为低,数据会在整条菊链上传递,直到每一个从器件都接收了相应的命令。存储在每一个从器件移位寄存器中的命令将在/CS的上升沿执行。下面例子使用MAX5233和MAX5290构成菊链。
banger
电路图范例#1clockwerk
图3给出的菊链结构中连接了3个MAX5233。MAX5233为双路、10位DAC (包含两个DAC通道,通道A和B)。将RSTV接至VDD,模拟输出的上电状态被设置到中点。
cuisine
图3. 菊链电路#1
图4给出了将IC1 (A1和B1)、IC2 (A2和B2)和IC3 (A3和B3)的输出分别设为零点、中点和满
刻度的命令序列图。在这个例子中,使用了以下的命令:
0x7FF8—将满刻度数据加载到IC3 DAC寄存器,并将两路输出(A3、B3)设置到满刻度
0x7000—将满刻度数据加载到IC2 DAC寄存器,并将两路输出(A2、B2)设置到中点
0x6000—将满刻度数据加载到IC1 DAC寄存器,并将两路输出(A1、B1)设置到零点
admittance
图4. 电路#1—命令时序A
在第一个命令周期(16个SCLK脉冲序列),将0x7FF8载入IC1的移位寄存器。当/CS保持低电平,这一数据将在IC1内传递,并且在下一个命令周期内通过DOUT1输出。在第二个命令周期内,IC1输出端DOUT1上的数据输入到DIN2,将0x7FF8载入IC2的移位寄存器中。同时,新的命令0x7000将载入IC1移位寄存器,覆盖了前一个命令。
第三个命令周期内,第一个命令0x7FF8将载入IC3的移位寄存器,而第二个命令0x7000将载入IC2的移位寄存器,同时IC1将接收到新的命令0x6000。此时,三个IC都从菊链上接收到命令并存储在他们的移位寄存器中。一旦/CS变高,将执行已存储的命令;A1和B1被设为零点、A2和B2被设为中点、A3和B3被设为满刻度。
图5给出了更为复杂的命令序列。在这个例子中,使用以下的命令(更多详细信息,请参考MAX5233数据资料):
0x3FF8—将满刻度数据加载到输入寄存器A,不改变DAC寄存器和输出
0x3000—将中点数据加载到输入寄存器A,不改变DAC寄存器和输出
然而
0x2000—将零点数据加载到输入寄存器A,不改变DAC寄存器和输出
0xBFF8—将满刻度数据加载到输入寄存器B,不改变DAC寄存器和输出
0xB000—将中点数据加载到输入寄存器B,不改变DAC寄存器和输出
0xA000—将零点数据加载到输入寄存器B,不改变DAC寄存器和输出
0x0000—空操作
图5. 电路#1—命令序列B
在第一个三命令周期内,菊链上三个IC中的各个器件的移位寄存器军接收到一条命令。IC1、IC2、IC3接收到的命令分别为0xB000、0xBFF8和0xBFF8。 器件将在/CS的上升沿执行这些命令(第一次执行)。执行完之后,IC1、IC2、IC3的输入寄存器B中分别加载了中点、满刻度和满刻度的数据。此时,由于各IC的DAC寄存器B保持不变,因此B1、B2、B3均未改变。
在接下来的三命令周期内,每个IC的移位寄存器中均写入了仅向输入寄存器A加载数据的命令。DAC寄存器A和输出保持不变。在/CS的上升沿,IC1、IC2、IC3的输入寄存器A分别加载了满刻度、零点和中点数据。此时,由于只更新了输入寄存器A而不是DAC寄存器A,因此A1、A2、A3均保持不变。
在第二次执行命令之后,硬件/LDAC命令(驱动/LDAC为低)将输入寄存器中的数据加载到相应的DAC寄存器中。这样,DAC的输出就被刷新为相应的DAC寄存器中的数据。A1、B2和B3变为满刻度。A2变为零点而A3仍为中点状态。

本文发布于:2023-05-17 21:55:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/673018.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:器件   命令   寄存器   数据   菊链   输出
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图