硬件总线基础03:SPI总线(2)

说在开头:关于宇宙的结局(2)

那么,最重要的是智慧生命在宇宙生命末期,是否有可能幸免于难?

当宇宙中温度开始普遍下降时,起初生物将试图利用基因工程降低自身体温,这样将能够大大提高能源利用效率;但当体温继续下降至0℃(水结冰点温度)时,智慧生命不得不放弃脆弱的血肉之躯,换上机器身体( “变形金刚”来了);但是机器身体也必须遵循“信息理论”和“热力学定律”(有能量的流动才能完成机械任务,当宇宙中所有温度几乎一样并接近绝对零度时,将不可能再做功),其生存条件也将变的异常艰辛。所有智慧生命将不得不再次放弃其机器躯体,转变为纯意识,根据信息理论:可以发送和接受的最小单位与温度成正比;所以随着温度继续下降,唯一活命的办法是将“思维”放慢,通过将处理信息所需的时间拉长,并通过蛰伏保持能量,这样智慧生命还将能够无限期的进行“思维”,虽然思维和信息处理的时间可能达到几十亿年,但其感受的“主观时间”仍将保持不变。他们可能时常目睹“泡泡宇宙”从虚无中产生出来,或量子跃迁进入另类宇宙。

但根据最新的发现,宇宙正在加速:温度不会无止境地下降(根据热力学第三定律,绝对零度不可能达到),而是会最终达到一个下限(10⁻²⁹k),一旦达到这个温度,整个宇宙各处的温度将完全一样;所以如果最终宇宙各处的温度完全一样,智慧生命将无法利用温差提取有用的能量,一切信息处理过程都将静止,也注定了一切智慧生命的消亡。所以从宇宙角度来看,生命所拥有的生存条件不过是一个瞬息即逝的小插曲,只有一扇微小的“窗口”,那里的温度既不太冷、也不太热,正合适支持生命。

当然宇宙温度的下降会经过数百亿年时间,在这个过程中,先进文明会不会试图拯救自己?通过他所拥有的一切技术和能量,能不能逃过不可避免的消亡命运呢?

根据物理学定律,逃往另一个宇宙是可以做到的。而我们是否能拥有足够的资源和技术来实现,则只能留给几百亿年后面临着大冻结的那些文明来解决。从理论上来说,想要离开目前这个宇宙,必须克服一系列的障碍(看过《星际穿越》电影的同学应该会更加熟悉):

1. 创立万物理论,并对其进行测试;不管是不是弦论或则M-理论,都必须有一种办法来对爱因斯坦方程做出可靠的量子修正;找到了万物理论(量子引力理论),并对这个理论所能带来的后果进行测试,回答有关爱因斯坦方程和虫洞的重要问题:

1,虫洞稳定吗?

2,是否存在奇异点?

3,是否能够找到大量的负能量?

2. 找到自然出现的虫洞和白洞;

3. 发射探测器穿越黑洞;用探测器进行试验,并用超级计算机计算宇宙中的物质分布情况,计算出穿过虫洞时所需要的对爱因斯坦方程的量子修正;

4. 建立一个慢动作黑洞;

5. 建立一个婴儿宇宙:将空间的一小块区域加热到10²⁹k的温度,然后冷却,据推测这个温度上,空间-时间变得不稳定,微小的泡泡宇宙开始形成,因此创造出一个假真空;

6. 建造巨型原子击破器;掌握普朗克能量,建造一架可以离开宇宙的机器;原子击破器的规模需要加大到太阳系大小,其能量可以打通平行宇宙之间的膜(打洞);

7. 利用来自压缩态的负能量;激光束可以创造出“压缩态”,用来产生负物质,负物质可以用来开启和稳定虫洞;

8. 等待量子跃迁;生命体只需等待虫洞出现和量子跃迁发生,就可以逃入另一宇宙;但这些量子时间完全不可预知,如果不能准确的知道:出入口何时打开,并通往何处;那么迁移另一个宇宙就很困难;可能不得不在虫洞打开的时候抓住机会离开,来不及充分分析这个虫洞的性状。

如此,宇宙末日的“智慧生命”们迎来了最后的希望,稳定的虫洞只存在纤维尺寸至亚原子尺寸之间,即使将生命体包裹在钛合金中也无法承受;他们可能只剩下最后一项选择:向新的宇宙中注入足够的信息,从而在虫洞另一边再造我们的文明。如果虫洞是原子大小,则可以发送单个原子做的纳米管,其中蕴含了大量信息,足以在虫洞的另一边再造整个种群。(参考自:加来道雄-平行宇宙)

二,SPI工作寄存器定义

SPI总线要正常工作,必须对SPI总线进行配置;举个栗子,上一章节所介绍的CPOLCPHA对应SPI的数据采样工作模式。SPI总线工作寄存器如下图所示,SPI_V04.01协议规范中总共定义了8组寄存器。

  1. 寄存器描述

1. 控制寄存器1SPICR1;具体寄存器内容如下所示;

1SPIESPI Interrupt Enable BitSPI中断使能);如果SPIF或者MODF中断状态标志被置位,那么将设置SPIE = 1:使能SPI 中断;

2SPESPI System Enable BitSPI系统使能);如果该位被置位,则端口管脚被用于SPI总线,如果清除则SPI被禁止并进入Idle状态,状态位SPISR寄存器被复位;

1SPE = 1:启用SPI系统,相关管脚被用于SPI总线功能;

2SPE = 0:禁止SPI系统。

3SPTIESPI Transmit Interrupt EnableSPI发送中断使能);

1SPTIE = 1STPEF中断使能;

2SPTIE = 0STPEF中断禁用。

4MSTRSPI Master/Slave Mode Select BitSPI主、从模式选择),用于选择SPI器件工作与主设备或则从设备模式;

1MSTR = 1SPI工作与主设备模式;

2MSTR = 0SPI工作与从设备模式。

5CPOLSPI Clock Polarity BitSPI时钟极性设置);具体定义如上一节所述;

6CPHASPI Clock Phase BitSPI时钟相位设置);具体定义如上一节所述;

7SSOESlave Select Output Enable(从设备选择输出使能);只有在主设备模式下/SS才能被设置为输出,结合MODFEN位和SSOE位的设置,对/SS工作模式进行设置;如下图所示;

8LSBFELSB-First Enable(大小端工作模式设置);该寄存器位的设置并不影响LSBMSB在数据寄存器中的位置,读、写数据寄存器一直是MSBbit7的位置;

1LSBFE = 1:数据先传最低有效位。

  1. LSBFE = 0:数据先传输最高位。

2. 控制寄存器2SPICR2;具体寄存器内容如下所示;

1MODFENMode Fault Enable Bit(模式故障使能);先检测MODF故障,如果SPIMaster模式并且MODFEN设为0,那么/SS引脚没有被SPI使用;如果在Slave模式下,/SS则只能作为输入,而不考虑MODFEN的值;该寄存器位配合SSOE一起使用;具体如上表;

2BIDIROEOutput enable in the Bidirectional mode of operation(在全双工模式下输出使能);当在双向操作模式下(设置了SPC0),该位控制SPIMOSIMISO输出缓冲区,在主模式下:该位控制MOSI端口的输出缓冲区;在从模式下:控制MISO端口的输出缓冲区;

1BIDIROE = 1:输出缓冲使能;

2BIDIROE = 0:输出缓冲禁止。

3SPISWAISPI Stop in Wait Mode BitSPI总线在等待模式下停止);该位用于等待模式下的节能应用;

1SPISWAI = 1SPI时钟在等待模式下停止输出;

2SPISWAI = 0SPI时钟在等待模式下正常工作。

4SPC0Serial Pin Control Bit 0(串行管脚控制位0);该位用于使能双向管脚的配置,如下图所示;

3. SPI波特率寄存器:SPIBR;具体寄存器内容如下所示;

1SPPR2–SPPR0SPI Baud Rate Preselection BitsSPI 波特率预选择位);

2SPR2–SPR0SPI Baud Rate Selection BitsSPI波特率选择位);具体如下表格,只截取了部分的波特率设置,具体请参考《SPI-V04.01》规范。

4. SPI状态寄存器:SPIBR;具体寄存器内容如下所示;

1SPIFSPIF Interrupt FlagSPIF中断标志);在总线上接收到的数据存满SSPSR 移位寄存器后进行置位,通过读取移位寄存器来清除;

1SPIF = 1有新数据需要读取;

2SPIF = 0数据传输还未完成。

2SPTEFSPI Transmit Empty Interrupt FlagSPI发送为空标志);该位指示数据寄存器(SPIDR)为空,允许新的数据写入数据寄存器;任何写入数据寄存器的操作,必须先读取SPTEF状态,否则将不能被写入;

1SPTEF = 1SPI的数据寄存器为空;

2SPTEF = 0SPI的数据寄存器非空。

3MODFMode Fault Flag(模式错误标志);如果设备被设置为主设备,而且/SS管脚信号被拉低,那么当MODF被置位时,会输出模式错误检测使能;该位结合MODFEN位一起使用。

1MODF = 1:模式错误发生;

2MODF = 0:模式错误没有发生。

5. SPI数据寄存器:SPIDR;具体寄存器内容如下所示;

SPI数据寄存器既是SPI数据的输入寄存器,也是SPI数据的输出寄存器。

1,当设置了SPIF时,在SPIDR中接收的数据是有效的,所以该寄存器一般在SPIF位被置位(数据寄存器满)时读出:

1)如果清除了SPIF,并且已经接收到一个字节数据,则接收到的数据将从接收移位寄存器转移到SPIDR,并置位SPIF

2)如果设置了SPIF,并且在接收移位寄存器中有一个有效的字节,并且在第三次传输开始前,SPIF已被处理,则接收移位寄存器中的字节被转移到SPIDR中,并且SPIF保持设置,如下左图所示;

3)如果SPIF设置和有效字节接收移位寄存器和SPIF服务开始后的第三个传输,接收移位寄存器的字节已成为无效的和不转入SPIDR,如下右图所示。

2,对寄存器的写入:对于配置为主设备的SPI:在前一次传输完成后立即传输队列中的数据字节;SPI发送器空标志:SPTEFSPISR寄存器中表示SPI数据寄存器何时准备接受新数据;

3,如下图所示为设备接收和发送的工作时序流程图,图中RXNE标志:接收缓冲器非空(即:SPIF);TXE表示:发送缓冲器为空(即:SPTEF)。

三,SPI总线总结

一个SPI主设备可以连接多个SPI从设备,具体有两种方法:

1. 每个从设备都需要有一条/SSNSS)信号线:如果同特定的从设备通信,那么将连接该从设备的/SS信号拉低,而保持其它从设备的/SS信号为高电平;如果同时将多个从设备的/SS信号拉低,那么会出现总线冲突;如下左图所示;

2. 菊花链的连接方式:在数据信号以串行的方式从一个从设备依次传到下一个从设备,不断循环直到数据到达目标设备;其最大缺点是因为是信号串行传输,所以一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务;如上右图所示;

——距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况。

3. 我们一般选择第一种方式进行SPI从设别的扩展,而且对从设备扩展数量是有限制的。

——一般情况下SPI总线的/SS数量不大于4个,如果需要更多的SPI从上设备,有些器件的SPI总线片选支持4->16译码模式,从而支持更多的SPI从器件

我们在上一章分析了IIC总线,SPI总线相对于IIC来说:

1. 结构更加的直观简单、容易实现;

2. 软件配置简单;

3. 有很好的扩展性;

4. 支持全双工;

5. 数据传输速率更高(支持50MHz,支持4bit数据传输模式等等)。

SPI也有缺点:

1. 连接每个从设备需要单独的片选;

2. 只支持单主设备工作;

3. 而且没有应答机制;

4. 没有硬件级别的错误检查机制(例如:UARTCRC位);

5. 总线传输距离相对较短。

写在最后

在X86系统中最开始使用的是IBM推出的ISA总线,这个总线下挂了鼠标、键盘、串口在内的低速I/O设备,但随着CPU频率的提升,ISA总线就不够用了(信号数量多、总线速率低、内存占用率高);于是IBM可忍,Intel不可忍:Intel在1997年推出了LPC(Low Pin Count)总线来取代ISA总线的接口方案(当年LPC是取代低速的并行总线ISA而非PCI,PCI总线属于高速接口总线),并且采取免费开放授权的方式。同ISA总线地址/数据分离译码的工作方式不同,新总线采取了类似PCI的地址/数据共享译码的方式,信号数量大大降低(7必选+6可选),其工作速率同PCI总线同步驱动(33MHz);LPC面世20多年来,基本上是低速外设和芯片组之间的专用接口,面向的设备包括但不限于SuperIO/BMC/EC/80port Debug Card等等(早些时候,x86的Flash接口也是LPC的,后来基本上被SPI Flash所替代)。

随着芯片技术的发展,LPC也逐渐捉襟见肘,首先,7+6 = 13个的管脚数量还是过多,管脚资源紧张的系统架构急需管脚数量更少的总线;其次,LPC基于3.3V电平,不利于低功耗设计;最后LPC总线时钟频率固定是33MHz,总线带宽最大是133Mbps,成为系统的瓶颈。

到了2016年,Intel又推出了新一代总线接口规范:eSPI(Enhanced Serial Peripheral)用于取代LPC。eSPI总线借鉴和复用了SPI总线的电气时钟规范,但是在协议层使用了全新的定义,所以二者无论是从功能还是从应用上完全不同。除了全面兼容LPC总线的作用和功能外,eSPI总线还把OOB(out of band)的SMBUS和SideBand(边带)的GPIO都转化给可以在eSPI Bus上传递的In Band Message,除此以外还可以和Chipset实时共享Flash。

本章部分相关内容和图片参考自:SPI总线规范-《SPI Block Guide V04.01》;曾小庆-知乎-《SPI通信协议详解(spi总线)》;小麦大叔-CSDN-《SPI协议详解(图文并茂+超详细)!》。下一章《LPC & eSPI总线》。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值