新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > SPI的應用領(lǐng)悟

        SPI的應用領(lǐng)悟

        作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
        最近在做一個使用SPI協(xié)議對ADS1298芯片進行數(shù)據(jù)讀取的項目。通過這個項目也漸漸的了解了SPI的一些皮毛知識。在此記錄,以后可用。

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

        SPI串口協(xié)議的工作原理是時鐘信號控制移位寄存器的輸入輸出。主機發(fā)送時鐘信號(SCLK),控制主機的寄存器和從機寄存器的移位。

        最常用的全雙工模式是這樣工作的:

        主機控制片選信號,使能我們要操作的從機。

        然后主機寫一個數(shù)據(jù),寫數(shù)據(jù)的時候,會發(fā)送相應的SCLK,同時主機按照SCLK,將寄存器位中的數(shù)據(jù)一一移位發(fā)送出來,從機也按照SCLK將從機寄存器的數(shù)據(jù)一一移位出來。到最后一個時鐘的時候,他們兩個寄存器的數(shù)據(jù)互換了。

        如果主機發(fā)送數(shù)據(jù)的時候,從機也會發(fā)送數(shù)據(jù),從機發(fā)送的數(shù)據(jù)也許并不是有效數(shù)據(jù),但是我們?nèi)ス芩墒裁茨亍N屹I你將這次的數(shù)據(jù)放棄就是了。也就是說發(fā)送的時候肯定會有接收。要想接收那就必須要發(fā)送一個數(shù)據(jù)(無論是不是有效數(shù)據(jù))。換句話講,從機并不知道自己什么時候要移位發(fā)送數(shù)據(jù),只是根據(jù)SCLK來發(fā)送數(shù)據(jù)。

        我們也可以這么理解,因為單片機內(nèi)部設(shè)置的是,發(fā)送數(shù)據(jù)時候才會產(chǎn)生相應的SCLK,這時候從機知道了就會把寄存器中的數(shù)據(jù)發(fā)出來。我們?nèi)绻约哼M行模擬的話,控制單片機或者FPGA發(fā)送SCLK就可以將從機的數(shù)據(jù)讀出來,而不用使用主機的發(fā)送數(shù)據(jù)命令。即:SCLK控制和協(xié)調(diào)一切。

        我們以 ADS1298的讀取寄存器 這樣一個操作為例,主機使用STM32F103。

        ADS1298讀取寄存器命令是這樣的:



        我們用單片機控制的話,不能控制SCLK的產(chǎn)生,那我們就用寫數(shù)據(jù),來產(chǎn)生SCLK,讀取后面的REG DATA。至于OPCODE,我們就是直接發(fā)送了,為主機的有效數(shù)據(jù),就是說前兩個發(fā)送有效數(shù)據(jù),接收到的數(shù)據(jù)丟棄。第三個發(fā)送過程,發(fā)送數(shù)據(jù)隨便填寫,無效,而接受的數(shù)據(jù)為有效數(shù)據(jù),我們留起來用。

        程序是這樣子寫的:

        這是主程序里面的段落。

        下面是讀寫子程序。




        1、發(fā)送讀寄存器的地址

        2、發(fā)送讀寄存器的個數(shù)

        3、讀發(fā)回來的數(shù)據(jù)(如果讀寄存器的個數(shù)為n,那個就要有n個此條命令)


        關(guān)于ADS1298,具體的還是要仔細閱讀其說明文檔。像我自己在做實驗的時候,總是無法讀取出來正常的命令。通過示波器看到輸入線上的數(shù)據(jù)不對,完全為0.。后來仔細的閱讀了其說明文檔,發(fā)現(xiàn)ADS1298在連續(xù)讀數(shù)據(jù)模式下,無法有效實現(xiàn)讀寄存器。然后在前面關(guān)閉了連續(xù)讀模式,就能夠成功的讀取到寄存器的數(shù)據(jù)了。

        留此,以后翻閱。



        關(guān)鍵詞: SPI應用領(lǐng)

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 凤庆县| 达日县| 瓦房店市| 文山县| 宜春市| 乌拉特中旗| 南宫市| 定结县| 铁岭县| 衡南县| 新津县| 柯坪县| 泗阳县| 海阳市| 黔江区| 蒲江县| 汉川市| 盘锦市| 巩留县| 温宿县| 罗江县| 汶上县| 武夷山市| 明光市| 汉中市| 仁布县| 哈尔滨市| 贵南县| 广元市| 南投市| 辉县市| 大城县| 阳朔县| 大埔区| 新沂市| 仪陇县| 麻江县| 司法| 盐池县| 科技| 祥云县|