SPI基本原理
spi 它是一种最常用的同步串行接口:同步的意思就是利用时钟线对串行数据进行同步在时钟的上升沿或下降沿极性锁存数据.所以它的线至少有时钟线和数据线.
一、同步串行口
二、4线SPI:全双工
三、3线SPI:半双工(半双工,收和发 用同一根 DIO )
四、SPI时序图
五、按照时序图编写IO程序
一、上升沿:
PORTB &= ~(1<<5);
asm("NOP");
PORTB |= (1<<5);
二、下降沿:
PORTB |=(1<<5);
asm("NOP");
PORTB &= ~(1<<5);
下图是DS1302的时序图
读操作:
然后单片机就可以用I/O将这8位数据一位一位的读回来,一帧2个字节16位结束之后呢?CE这根线就要拉低,表示这一帧结束了
写操作:
这个是DS1302的时序图,下面看看ATmega16的SPI接口的时序图
等后面操作详细讲说时序。
解释:相对于串行数据,SCK的相位合极性有4种组合。CPHA和CPOL控制组合的方式。SPI数据传输格式见Figture 67与Figure 68,每一位数据的移出和移入发生于SCK不同的信号跳变沿,以保证有足够的时间使数据稳定。这个过程在Table 56 和Table 57 有清楚的说明:sample(采样)rising(上升) setup(设置)falling(下降) 呵呵英语不好。
Figure 67 是CPHA =0 时候的传输格式
Figure 68 是CPHA =1 时候的传输格式
ATmega 16 支持以上四种全部的模式 有的是上升沿锁存有的是下降沿锁存这四种模式,这四种模式我们一会在说到ATmega
16 的SPI接口的时候会详细给你们菜鸟说:
好了再看了SPI的时序图之后要怎样按照时序对它编程呢?
在基本的逻辑里面同步都是靠时钟的上升沿来进行同步,也就是说我们需要掌握这个I/O口让他产生一个时钟,它上升沿或者下降沿的方法,上升沿就是低跳变到高,我们以PORTB
它的第五位作为输出口为例来进行讲解,产生上升沿首先它原先必须要是低输出一个低电平0
DS1302的接口时序图与AVR的接线图
- 时序图
-
与AVR之间的接线图
这个时序图上面已经说过了,那么这个DS1302属于3线的SPI 而ATmega 16
是4线的SPI接口那么3线合4线之间怎样进行互联呢?我们看以采用下面的这种方法。
来看下电路图
上图的PB5
PB5可以看到MOSI
同理PB6 MISO