常用的接口有spi,I2c,uart等,他们都有自己的协议规则,下面谈谈它们之间的联络与差异:
1 I2C总线
IISTAT: 状况寄存器。挑选I2C的作业形式,宣布S信号,P信号,使能承受/发送功用,并标明各种状况,比方总线裁定是否成功,作为从机时是否被寻址,是否接纳到0地址,是否接纳到ACK信号。
2 SPI总线协议的知道(SPI中的极性CPOL和相位CPHA)
最近在看关于Silicon Labs的C8051F347的某个驱动中,关于SPI部分初始化的代码,看到其关于SPI的设置为CPOL=1,CPHA=0,关于CPOL及CPHA的意义不了解,想要搞懂,这两个参数到底是什么意思,以及为何要这么设置。所以才去找了SPI的极性和相位的相关材料,收拾如下。
设备与设备之间经过某种硬件接口通讯,现在存在很多种接口,SPI接口是其间的一种。
SPI平分Master主设备和Slave从设备,数据发送都是由Master操控。
一个master能够接一个或多个slave。
常见用法是一个Master接一个slave,只需求4根线:
SCLK:Serial Clock,(串行)时钟
MISO:Master In Slave Out,主设备输入,从设备输出
MOSI:Master Out Slave In,主设备输出,从设备输入
SS: Slave Select,选中从设备,片选
先简略说一下,关于SPI中一些常见的说法:
SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简略总结如下:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity =(时钟)极性;
(2) CKPHA (Clock Phase) = CPHA = PHA = Phase =(时钟)相位;
(3) SCK=SCLK=SPI的时钟;
(4) Edge=边缘,即时钟电平改变的时间,即上升沿(rising edge)或许下降沿(falling edge);
关于一个时钟周期内,有两个edge,别离称为:
Leading edge=前一个边缘=第一个边缘,关于开端电压是1,那么便是1变成0的时分,关于开端电压是0,那么便是0变成1的时分;
Trailing edge=后一个边缘=第二个边缘,关于开端电压是1,那么便是0变成1的时分(即在第一次1变成0之后,才可能有后边的0变成1),关于开端电压是0,那么便是1变成0的时分;
本文选用如下用法:
极性=CPOL
相位=CPHA
SCLK=时钟
第一个边缘和第二个边缘
【SPI的相位和极性】
CPOL和CPHA,别离都能够是0或时1,对应的四种组合便是:
Mode 0 | CPOL=0, CPHA=0 |
Mode 1 | CPOL=0, CPHA=1 |
Mode 2 | CPOL=1, CPHA=0 |
Mode 3 | CPOL=1, CPHA=1 |
【怎么看懂和回忆CPOL和CPHA】
所以,关于在其他当地介绍的,看似多么杂乱难明难回忆的CPOL和CPHA,其实经过上面解说,就很简单看懂了:
去看时序图,假如开端的一直SCLK的电平是0,那么CPOL=0,假如是1,那么CPOL=1,
然后看数据采样时间,即时序图数据线上的数据那个矩形区域的中心所对应的方位,对应到上面SCLK时钟的方位,对应着是第一个边缘或是第二个边缘,即CPHA是0或1。(对应的是上升沿仍是仍是下降沿,要依据对应的CPOL的值,才干确认)。
即:
(1)怎么判别CPOL:SCLK的闲暇时分的电压,是0仍是1,决议了CPOL是0仍是1;
(2)怎么判别CPHA:而数据采样时间对应着的SCLK的电平,是第一个边缘仍是第二个边缘,对应着CPHA为0仍是1。
【软件中怎么设置SPI的极性和相位】
SPI分主设备和从设备,两者经过SPI协议通讯。
而设置SPI的形式,是从设备的形式,决议了主设备的形式。
所以要先去搞懂从设备的SPI是何种形式,然后再将主设备的SPI的形式,设置和从设备相同的形式,即可正常通讯。
关于从设备的SPI是什么形式,有两种:
(1)固定的,有SPI从设备硬件决议的
SPI从设备,详细是什么形式,相关的datasheet中会有描绘,需求自己去datasheet中找到相关的描绘,即:
关于SPI从设备,在闲暇的时分,是高电平仍是低电平,即决议了CPOL是0仍是1;
然后再找到关于设备是在上升沿仍是下降沿去采样数据,这样便是,在定了CPOL的值的前提下,对应着能够推算出CPHA是0仍是1了。
举例1:
CC2500- Low-Cost Low-Power 2.4 GHz RF Transceiver的datasheet中SPI的时序图是:
从图中能够看到,最开端的SCLK和完毕时分的SCLK,即闲暇时间的SCLK,是低电平,推导出CPOL=0,然后能够看到数据采样的时分,即数据最中心的那一点,对应的是SCLK的第一个边缘,所以CPHA=0(此刻对应的是上升沿)。
举例2:
“SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.”
意思是,数据是在上升沿采样,所以能够断定是CPOL=0,CPHA=0,或许CPOL=1,CPHA=1的形式,可是至所以哪种形式。
按理来说,接下来应该再去确认SCLK闲暇时分是高电平仍是低电平,用以确认CPOL是0仍是1,可是datasheet中没有说到这点。
所以,此处,现在不太确认,是两种形式都支撑,仍是需求额外找依据却确认CPOL是0仍是1.
从设备也是一个SPI操控器,4种形式都支撑,此刻只需自己设置为某种形式即可。
然后知道了从设备的形式后,再去将SPI主设备的形式,设置为和从设备形式相同,即可。
关于怎么装备SPI的CPOL和CPHA的话,不多细说,大都都是直接去写对应的SPI操控器中对应寄存器中的CPOL和CPHA那两位,写0或写1即可。