新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機 arm 常用的接口總結

        單片機 arm 常用的接口總結

        作者: 時間:2016-11-26 來源:網絡 收藏
        常用的接口有spi,I2c,uart等,他們都有自己的協議規定,下面談談它們之間的聯系與區別:

        1 I2C總線

        本文引用地址:http://www.104case.com/article/201611/321770.htm

        涉及到I2C的編程主要涉及到兩種情況:有專用控制器的arm芯片,無控制器的單片機芯片。有控制器的arm芯片,主要就是依據數據手冊,通過設置相應的寄存器(控制寄存器,狀態寄存器等)來實現相應的操作;然而對于沒有控制器的單片機芯片,只有通過相應的引腳根據I2c協議來予以模擬實現。

        首先來談談I2c協議。涉及到的信號主要分為三類:開始信號,停止信號,發送數據。既然是協議,就是雙方事先約定好的規定,通信雙方按照這個標準來進行數據的傳輸就可以了。保證數據傳輸的一致性的話,還有在某些時候發送一些附帶的檢查信息,例如ack信號,非ack信號;

        開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。
        結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數據。
        應答信號:接收數據的IC在接收到8bit數據后,向發送數據的IC發出特定的低電平脈沖,表示已收到數據。CPU向受控單元發出一個信號后,等待受控單元發出一個應答信號,CPU接收到應答信號后,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷為受控單元出現故障。

        基于單片機的模擬I2C的信號,應該嚴格按照以上的時序進行研究實現。

        接下來看看帶有I2C的控制器的arms3c2410,s3c2440芯片的i2c的控制。主要包括四個相關的寄存器的設置:通過它們之間的相互配合,實現i2c的數據傳輸。

        IICON:控制寄存器。主要是用于控制是否發出ACK信號,設置發送器的時鐘,開啟I2c中斷,并標示中斷是否發生。

          IISTAT: 狀態寄存器。選擇I2C的工作模式,發出S信號,P信號,使能接受/發送功能,并標示各種狀態,比如總線仲裁是否成功,作為從機時是否被尋址,是否接收到0地址,是否接收到ACK信號。

        IICADD:多主機I2C地址寄存器;

        IICDS:發送、接受數據移位寄存器;

        接下來按照數據手冊,根據其主機發送器的工作流程來編寫相應的代碼。

        三個函數就可以實現簡單的I2C協議: 讀取,寫入,中斷;

        編程思路如下:

        寫函數,讀函數,僅僅是啟動I2C傳輸,然后等待,直到數據在中斷服務程序中傳輸完畢后再返回。

        2 SPI總線協議的認識(SPI中的極性CPOL和相位CPHA)

        【背景】

        最近在看關于Silicon Labs的C8051F347的某個驅動中,關于SPI部分初始化的代碼,看到其對于SPI的設置為CPOL=1,CPHA=0,對于CPOL及CPHA的含義不了解,想要搞懂,這兩個參數到底是什么意思,以及為何要這么設置。所以才去找了SPI的極性和相位的相關資料,整理如下。

        【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由于接口相對簡單(只需要4根線),用途算是比較廣泛,主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。即一個SPI的Master通過SPI與一個從設備,即上述的那些Flash,ADC等,進行通訊。
        而主從設備之間通過SPI進行通訊,首先要保證兩者之間時鐘SCLK要一致,互相要商量好了,要匹配,否則,就沒法正常通訊了,即保證時序上的一致才可正常訊。而這里的SPI中的時鐘和相位,指的就是SCLk時鐘的特性,即保證主從設備兩者的時鐘的特性一致了,以保證兩者可以正常實現SPI通訊。

        【SPI相關的縮寫或說法】

        先簡單說一下,關于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 0CPOL=0, CPHA=0
        Mode 1CPOL=0, CPHA=1
        Mode 2CPOL=1, CPHA=0
        Mode 3CPOL=1, CPHA=1

        結合這個圖已經很清楚的認識到,極性和相位主要是控制什么東東了.cpol等于0時,時鐘的空閑電平就是0;cpol等于1時,空閑電平就是1;而cpha決定了數據采樣的時刻,是第一個邊沿的時候,還是第二個邊沿的時候。

        【如何看懂和記憶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:

        SSD1289- 240 RGB x 320 TFT LCD Controller Driver的datasheet中提到:

        “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.

        (2)可配置的,由軟件自己設定

        從設備也是一個SPI控制器,4種模式都支持,此時只要自己設置為某種模式即可。

        然后知道了從設備的模式后,再去將SPI主設備的模式,設置為和從設備模式一樣,即可。

        對于如何配置SPI的CPOL和CPHA的話,不多細說,多數都是直接去寫對應的SPI控制器中對應寄存器中的CPOL和CPHA那兩位,寫0或寫1即可。


        上一頁 1 2 下一頁

        關鍵詞: 單片機arm接口總

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 诸暨市| 定安县| 岳普湖县| 蒙城县| 民县| 黔南| 嘉峪关市| 石渠县| 仙游县| 潜江市| 南投市| 孙吴县| 安义县| 西峡县| 凭祥市| 永宁县| 葵青区| 青海省| 黄龙县| 元阳县| 崇信县| 罗甸县| 新津县| 揭阳市| 瑞金市| 循化| 泽普县| 平昌县| 安陆市| 清水河县| 灯塔市| 雷波县| 永济市| 江安县| 文登市| 三亚市| 贡山| 龙江县| 璧山县| 汉沽区| 友谊县|