SPI串行外设接口是一个全双工、同步及串行数据通信接口,已经被广泛应用于微处理器、微控制器和外设中,它允许在处理器与外设或处理器之间进行通信。SPI系统很灵活,可以与许多通用外设接口。本节描述的是在CoolRunner-II CPLD中实现一个SPI主控制器,通过它可以为不具有SPI主控制器的处理器(如8051)增加一个SPI接口,以方便连接其他SPI设备。如图1所示为此设计的顶层框图。此控制器中的微控制器选用了一款被广泛应用,却不具有SPI接口的8051。此设计经过修改,可以应用于其他处理器中。
如图1 SPI主设备顶层框图
SPI包括4根线,分别是串行时钟SCK、主出从入线MOSI、主入从出线MISO和从片选线SS N。SCK线由主SPI驱动,并控制数据位流。主SPI可以以多种波特率发送数据,在SCK线边沿,数据发送一位。可以是在SCK上升沿,也可以是在SCK下降沿。SCK有4种频率,用一个边沿发送数据,用另一个边沿接收数据。所有SPI设备的SCK、MOSI和MISO都被连接在一起,但仅有一个被配置为主SPI,其他设备都为从SPI。
SS_N控制线片选从SPI,没有被选中的从SPI设备会忽略SCK信号,并且驱动MISO为高阻状态。连接到主SPI的SS_IN_N线,为SPI总线争夺标志线。它有效时,表明有其他SPI设备申请总线控制。SCK的相位和极性可以配置,CPOL为时钟极性选择信号,当CPOL=“0”,IDLE状态时SCK=“0”;当CPOL=“1”,IDLE状态时SCK=“1”。CPHA为时钟相位选择信号,当CPHA=“0”,数据在第1个SCK边沿有效;当CPHA=“1”,数据在第2个SCK边沿有效,时钟极性和相位对于主从SPI来说应该保持一致。
以主SPI为例,当主从SPI进行数据传输时,一个8位数据MOSI引脚移位输出。同时,另一个不同的8位数据在M[SO引脚移入。相当于主SPI有一个8位的移位寄存器,从SPI也有一个8位的移位寄存器,这两个寄存器连接在一起形成一个环形16位移位寄存器。对于完整的通信,16位移位寄存器移8个位置。这样一来,主从SPI的8位数据完成交换,即完成通信。
SPI协议描述了SPI总线上的字节传输时序和波形,但是并没有规定数据通信协议,如未指定第1个字节包含地址或读/写命令。如此一来,在具体的应用中要清楚数据手册规定的通信协议。在本设计中,CPLD实现的主SPI设备,也没有规定具体的通信协议,这个协议可以通过8051微控制器中的软件解决。
如图2和如图3所示分别为SPI数据传输时序,图中的SS_N在传输过程中保持有效。
如图2 CPHA=0时SPI总线上数据传输时序
如图3 CPHA=1时SPI总线上数据传输时序
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。