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的时序图
从上图可以看到它是属于3线的SPI接口
读操作:
写操作:
这个是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
- 时序图
与AVR之间的接线图
这个时序图上面已经说过了,那么这个DS1302属于3线的SPI 而ATmega 16 是4线的SPI接口那么3线合4线之间怎样进行互联呢?我们看以采用下面的这种方法。
来看下电路图
上图的PB5
PB5可以看到MOSI
同理PB6 MISO
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。