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