标签:
SPI主要使用4个信号:MISO(主机输入/从机输出)、MOSI(主机输出/从机输入)、 SCLK(串行时钟)、或(外设片选或从机选择)。
MISO信号由从机在主机的控制下产生。信号用于禁止或使能外设的收发功能。为高电平时,禁止外设接收和发送数据;为低电平时,允许外设接收和发送数据。图1所示是微处理器通过SPI与外设连接的示意图。
主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机(如图2所示)。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。
如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。
当主机发送一个连续的数据流时,有些外设能够进行多字节传输。多数具有SPI接口的存储芯片就以这种方式工作。在这种传输方式下,从机的片选端必须在整个传输过程中保持低电平。此时,一次传输可能会涉及到成千上万字节的信息,而不必在每个字节的数据发送的前后都去检测其起始位和结束位,这正是同步传输方式优于异步传输方式的原因所在。
虽然SPI有以上优点,然而在图像传输中却很少用到,原因主要是其抗干扰能力差。SPI采用的是单端非平衡的传输方式,即传输的数据位的电压电平是以公共地作为参考的。在这种传输方式中,对于已进入信号中的干扰是无法消除和减弱的。而信号在传输过程中总会受到干扰,而且距离越长干扰越严重,以致于信号传输产生错误。在这种条件下,信号传输就变得毫无意义了。另外,由于单端非平衡传输方式以公共地作为参考点,地线作为信号回流线,因此也存在信号电流。当传输线两端的系统之间存在交流电位差时,这个电位差将直接窜到信号中,形成噪声干扰。所以,为了解决抗干扰问题,通常采用平衡传输(balanced transmission)方式,这里采用比较常见的RS-422。
例程:
/* ================================================================================= SPI_ExchangeByte( ); Function : Exchange a byte via the SPI bus INTPUT : input, The input byte OUTPUT : The output byte from SPI bus ================================================================================= */ ui08 SPI_ExchangeByte(ui08 input) { unsigned char i; ui08 Temp_byte,RxByte; Temp_byte = input; for(i = 0; i < 8; i++) { if(Temp_byte&0x80) MOSI_Set;//SDI = 1; else MOSI_Clr;//SDI = 0; RxByte=RxByte<<1; SCK_Clr;// SCK = 1; SCK_Set;//SCK = 0; Temp_byte <<= 0x01; if(MISO_STA==1) { RxByte|=BYTE_BIT0; } else { RxByte&=~BYTE_BIT0; } } return(RxByte); }
标签:
原文地址:http://www.cnblogs.com/BinB-W/p/5039563.html