SPI因为接口相对简单(只须要4根线),用途算是比较普遍,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间.即一个SPI的Master经过SPI与一个从设备,即上述的那些Flash,ADC等,进行通信.而主从设备之间经过SPI进行通信,首先要保证二者之间时钟SCLK要一致,互相要商量好了,要匹配,不然,就无法正常通信了,即保证时序上的一致才可正常讯.而这里的SPI中的时钟和相位,指的就是SCLk时钟的特性,即保证主从设备二者的时钟的特性一致了,以保证二者能够正常实现SPI通信..net
时钟的极性Polarity和相位Phase,和一些英文简写标识以下: 3d
一个时钟周期内,有两个edge,分别称为前沿(第一个边沿)和后沿(第二个边沿):blog
CPOL和CPHA,分别均可以是0或时1,对应的四种组合就是:接口
下面详细介绍.get
CPOL极性it
先说什么是SCLK时钟的空闲时刻,其就是当SCLK在发送8个bit比特数据以前和以后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工做的时候,是有效active的时刻.其英文精简解释为:Clock Polarity = IDLE state of SCK.ast
SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0仍是高电平1:im
如上图所示,(CPOL=0)的SCK波形,它有(传输)8个脉冲,而在脉冲传输前和完成后都保持在低电平状态.此时的状态就是时钟的空闲状态或无效状态,由于此时没有脉冲,也就不会有数据传输.同理得出,(CPOL=)1的图,时钟的空闲状态或无效状态时SCK是保持高电平的.数据
CPHA相位英文
首先说明,capture strobe=latch=read=sample,均示数据采样,数据有效的时刻.相位,对应数据采样是前沿仍是后沿,0标识第一个边沿(前沿),1标识第二个边沿(后沿).
对于:
CPHA=0,表示第一个边沿:
对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,因此是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,因此是降低沿;
CPHA=1,表示第二个边沿:
对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,因此是降低沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,因此是上升沿;
咱们看上面的图,发现数据SI是对应SCK的第一个时钟沿,再仔细看,数据是在SCK的第一个时钟边沿保持稳定[数据被采样捕获],在下一个边沿改变[SCK的降低沿数据改变]所以咱们得出结论:该系列FLASH是[数据在第一个时钟沿被采样捕获]或[数据在SPCK起始边沿捕获,在SPCK下一个边沿改变]
如何判断CPOL和CPHA?
若是起始的SCLK的电平是0,那么CPOL=0,若是是1,那么CPOL=1,而后看数据采样时刻,即时序图数据线上的数据那个矩形区域的中间所对应的位置,对应到上面SCLK时钟的位置,对应着是第一个边沿或是第二个边沿,即CPHA是0或1.(对应的是上升沿仍是仍是降低沿,要根据对应的CPOL的值,才能肯定).
最后来看一下S3C2440的SPI的CPOL和CPHA,结合前面讲的理论知识,下面的图就很好理解啦!
本文转自:http://blog.csdn.net/ce123_zhouwei/article/details/6923293