單片機 arm 常用的接口總結
1 I2C總線
本文引用地址:http://m.ptau.cn/article/201611/321770.htmIISTAT: 狀態(tài)寄存器。選擇I2C的工作模式,發(fā)出S信號,P信號,使能接受/發(fā)送功能,并標示各種狀態(tài),比如總線仲裁是否成功,作為從機時是否被尋址,是否接收到0地址,是否接收到ACK信號。
2 SPI總線協(xié)議的認識(SPI中的極性CPOL和相位CPHA)
最近在看關于Silicon Labs的C8051F347的某個驅動中,關于SPI部分初始化的代碼,看到其對于SPI的設置為CPOL=1,CPHA=0,對于CPOL及CPHA的含義不了解,想要搞懂,這兩個參數(shù)到底是什么意思,以及為何要這么設置。所以才去找了SPI的極性和相位的相關資料,整理如下。
設備與設備之間通過某種硬件接口通訊,目前存在很多種接口,SPI接口是其中的一種。
SPI中分Master主設備和Slave從設備,數(shù)據(jù)發(fā)送都是由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,其實經(jīng)過上面解釋,就很容易看懂了:
去看時序圖,如果起始的始終SCLK的電平是0,那么CPOL=0,如果是1,那么CPOL=1,
然后看數(shù)據(jù)采樣時刻,即時序圖數(shù)據(jù)線上的數(shù)據(jù)那個矩形區(qū)域的中間所對應的位置,對應到上面SCLK時鐘的位置,對應著是第一個邊沿或是第二個邊沿,即CPHA是0或1。(對應的是上升沿還是還是下降沿,要根據(jù)對應的CPOL的值,才能確定)。
即:
(1)如何判斷CPOL:SCLK的空閑時候的電壓,是0還是1,決定了CPOL是0還是1;
(2)如何判斷CPHA:而數(shù)據(jù)采樣時刻對應著的SCLK的電平,是第一個邊沿還是第二個邊沿,對應著CPHA為0還是1。
【軟件中如何設置SPI的極性和相位】
SPI分主設備和從設備,兩者通過SPI協(xié)議通訊。
而設置SPI的模式,是從設備的模式,決定了主設備的模式。
所以要先去搞懂從設備的SPI是何種模式,然后再將主設備的SPI的模式,設置和從設備相同的模式,即可正常通訊。
對于從設備的SPI是什么模式,有兩種:
(1)固定的,有SPI從設備硬件決定的
SPI從設備,具體是什么模式,相關的datasheet中會有描述,需要自己去datasheet中找到相關的描述,即:
關于SPI從設備,在空閑的時候,是高電平還是低電平,即決定了CPOL是0還是1;
然后再找到關于設備是在上升沿還是下降沿去采樣數(shù)據(jù),這樣就是,在定了CPOL的值的前提下,對應著可以推算出CPHA是0還是1了。
舉例1:
CC2500- Low-Cost Low-Power 2.4 GHz RF Transceiver的datasheet中SPI的時序圖是:
從圖中可以看到,最開始的SCLK和結束時候的SCLK,即空閑時刻的SCLK,是低電平,推導出CPOL=0,然后可以看到數(shù)據(jù)采樣的時候,即數(shù)據(jù)最中間的那一點,對應的是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.”
意思是,數(shù)據(jù)是在上升沿采樣,所以可以斷定是CPOL=0,CPHA=0,或者CPOL=1,CPHA=1的模式,但是至于是哪種模式。
按理來說,接下來應該再去確定SCLK空閑時候是高電平還是低電平,用以確定CPOL是0還是1,但是datasheet中沒有提到這點。
所以,此處,目前不太確定,是兩種模式都支持,還是需要額外找證據(jù)卻確定CPOL是0還是1.
從設備也是一個SPI控制器,4種模式都支持,此時只要自己設置為某種模式即可。
然后知道了從設備的模式后,再去將SPI主設備的模式,設置為和從設備模式一樣,即可。
對于如何配置SPI的CPOL和CPHA的話,不多細說,多數(shù)都是直接去寫對應的SPI控制器中對應寄存器中的CPOL和CPHA那兩位,寫0或寫1即可。
評論