新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 同步串行外設(shè)接口總線(SPI)的簡介

        同步串行外設(shè)接口總線(SPI)的簡介

        作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
        SPI
        這個庫可以讓你將Arduino作為主設(shè)備,其他外圍設(shè)備作為從設(shè)備與主設(shè)備以串行方式進行通信及交換信息。
        同步串行外設(shè)接口總線(SPI)的簡介
        同步串行外設(shè)接口總線(SPI)是用于MCU(微控制器)與一個或多個外圍設(shè)備進行短距離快速通訊的同步串行數(shù)據(jù)協(xié)議。它也可以用于兩個微控制器之間的通信。 SPI的連接始終是由一個主設(shè)備(通常是一個微控制器)來控制外圍設(shè)備來進行。通常在所有設(shè)備上都有三條線,
        Master In Slave Out (MISO) -主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出,
        Master Out Slave In (MOSI) -主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入,
        Serial Clock(SCK)-串行時鐘,數(shù)據(jù)傳輸?shù)臅r鐘基于主處理器產(chǎn)生的時鐘脈沖,
        Slave Select(SS) -從屬選擇,從設(shè)備的管腳控制信號線,由主設(shè)備進行使能控制。當從設(shè)備的SS引腳置為低電平時,它與主設(shè)備進行通信。當從設(shè)備的SS引腳置為高電平時,斷開與主設(shè)備的通信。因此,SPI允許一個主設(shè)備和多個從設(shè)備進行通信,主設(shè)備通過不同的SS信號線選擇不同的從設(shè)備進行通信。
        給一個新的SPI設(shè)備寫程序,你需要注意以下幾點:
        串行數(shù)據(jù)傳輸時,是先傳輸高位(MSB)還是先傳輸?shù)臀唬↙SB),這是由 SPI.setBitOrder()函數(shù)來控制的。
        數(shù)據(jù)時鐘SCK在空閑時,是高電平還是低電平?
        采樣時,是在時鐘脈沖的上升沿還是下降沿?這是由 SPI.setDataMode() 函數(shù)來控制的
        SPI是在怎樣速度下運行的,即SCLK提供多大的時鐘脈沖使SPI運行?這是由 SPI.setClockDivider() 函數(shù)來控制的。
        SPI標準是不嚴格的,所以每個設(shè)備實現(xiàn)功能時稍有不同。這意味著當你寫代碼時,要特別注意設(shè)備的數(shù)據(jù)表。一般來說,有三種傳輸模式。這些模式控制著數(shù)據(jù)是在SCK的上升沿采樣,還是在SCK的下降沿采樣(稱為時鐘相位),時鐘信號在空閑時,是高電平還是低電平(稱為時鐘極性)。由相位和極性組合得到三種模式。SPI.setDataMode() 函數(shù)用于控制時鐘極性和相位,根據(jù)此表:
        模式 時鐘極性(CPOL) 時鐘相位 (CPHA)
        0 0 0
        1 0 1
        2 1 0
        3 1 1
        當你的SPI參數(shù)設(shè)置正確,你只需要選擇好需要的函數(shù)去控制你的設(shè)備,然后開始你的作品制作。這將被解釋為您的設(shè)備數(shù)據(jù)表。
        連接
        在Arduino Duemilanove和其他基于ATmega168 / 328的板子上,SPI總線使用引腳10(SS),引腳11(MOSI),引腳12(MISO)和引腳13(SCK)。而在Arduino Mega板上,使用的是引腳50(MISO),引腳51(MOSI),引腳52(SCK)和引腳53(SS)。需要注意的是,即使你不使用SS引腳,必須將它的模式設(shè)置為輸出;否則,SPI系統(tǒng)將會認為有一個外部主機將自己選擇為從設(shè)備(從屬模式),從而使庫文件的控制失效。
        它有可能使用其他腳比10腳,作為從機選擇引腳SS。例如,Arduino的以太網(wǎng)擴展板使用引腳4來控制的SPI連接到主板上的SD卡,用引腳10來控制連接到以太網(wǎng)控制器。
        函數(shù)
        begin()
        end()
        setBitOrder()
        setClockDivider()
        setDataMode()
        transfer()
        例子
        BarometricPressureSensor: Read air pressure and temperature from a sensor using SPI
        SPIDigitalPot: Control a digital potentiometer using SPI
        參見
        shiftOut()
        shiftIn()


        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 岳普湖县| 西安市| 望城县| 察雅县| 玛沁县| 新沂市| 桃源县| 大关县| 泗阳县| 明溪县| 雅安市| 鄂托克前旗| 子长县| 梅河口市| 磐石市| 湖州市| 哈尔滨市| 信阳市| 夏邑县| 星座| 长泰县| 本溪市| 丰顺县| 化德县| 灵武市| 常熟市| 丹寨县| 惠安县| 定边县| 安国市| 荣成市| 那曲县| 凤城市| 许昌县| 探索| 应用必备| 海城市| 鲁山县| 武平县| 泗阳县| 广昌县|