<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > SPI、IIC、UART、can區(qū)別

          SPI、IIC、UART、can區(qū)別

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          例子:
          假設(shè)主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數(shù)據(jù)情況演示一遍:假設(shè)上升沿發(fā)送數(shù)據(jù)

          本文引用地址:http://www.ex-cimer.com/article/201611/322756.htm

          脈沖主機sbuff從機sbuffsdisdo
          0101010100101010100
          1上0101010x1010101x01
          1下010101001010101101
          2上1010100x0101011x10
          2下101010010101011010
          3上0101001x1010110x01
          3下010100101010110101
          4上1010010x0101101x10
          4下101001010101101010
          5上0100101x1011010x01
          5下010010101011010101
          6上1001010x0110101x10
          6下100101010110101010
          7上0010101x1101010x01
          7下001010101101010101
          8上0101010x1010101x10
          8下010101011010101010

          這樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對于主機而言的。其中ss引腳作為主機的時候,從機可以把它拉底被動選為從機,作為從機的是時候,可以作為片選腳用。根據(jù)以上分析,一個完整的傳送周期是16位,即兩個字節(jié),因為,首先主機要發(fā)送命令過去,然后從機根據(jù)主機的名準(zhǔn)備數(shù)據(jù),主機在下一個8位時鐘周期才把數(shù)據(jù)讀回來

          SPI 總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,一條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線MISO;用于CPU與各種外圍器件進行全雙工、同步串行通訊。SPI主要特點有:可以同時發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機或從機工作;提供頻率可編程時鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護;總線競爭保護等。圖3示出SPI總線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式(實線表示):

          圖2SPI總線四種工作方式

          SPI模塊為了和外設(shè)進行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)音時鐘相位和極性應(yīng)該一致。SPI接口時序如圖3、圖4所示。

          二,.SPI功能模塊的設(shè)計

          根據(jù)功能定義及SPI的工作原理,將整個IP Core分為8個子模塊:uC接口模塊、時鐘分頻模塊、發(fā)送數(shù)據(jù)FIFO模塊、接收數(shù)據(jù)FIFO模塊、狀態(tài)機模塊、發(fā)送數(shù)據(jù)邏輯模塊、接收數(shù)據(jù)邏輯模塊以及中斷形式模塊。

          深入分析SPI的四種傳輸協(xié)議可以發(fā)現(xiàn),根據(jù)一種協(xié)議,只要對串行同步時鐘進行轉(zhuǎn)換,就能得到其余的三種協(xié)議。為了簡化設(shè)計規(guī)定,如果要連續(xù)傳輸多個數(shù)據(jù),在兩個數(shù)據(jù)傳輸之間插入一個串行時鐘的空閑等待,這樣狀態(tài)機只需兩種狀態(tài)(空閑和工作)就能正確工作。

          SPI協(xié)議心得

          SPI接口時鐘配置心得:
          在主設(shè)備這邊配置SPI接口時鐘的時候一定要弄清楚從設(shè)備的時鐘要求,因為主設(shè)備這邊的時鐘極性和相位都是以從設(shè)備為基準(zhǔn)的。因此在時鐘極性的配置上一定要搞清楚從設(shè)備是在時鐘的上升沿還是下降沿接收數(shù)據(jù),是在時鐘的下降沿還是上升沿輸出數(shù)據(jù)。但要注意的是,由于主設(shè)備的SDO連接從設(shè)備的SDI,從設(shè)備的SDO連接主設(shè)備的SDI,從設(shè)備SDI接收的數(shù)據(jù)是主設(shè)備的SDO發(fā)送過來的,主設(shè)備SDI接收的數(shù)據(jù)是從設(shè)備SDO發(fā)送過來的,所以主設(shè)備這邊SPI時鐘極性的配置(即SDO的配置)跟從設(shè)備的SDI接收數(shù)據(jù)的極性是相反的,跟從設(shè)備SDO發(fā)送數(shù)據(jù)的極性是相同的。下面這段話是Sychip Wlan8100 Module Spec上說的,充分說明了時鐘極性是如何配置的:
          The 81xx module will always input data bits at the rising edge of the clock, and the host will always output data bits on the falling edge of the clock.
          意思是:主設(shè)備在時鐘的下降沿發(fā)送數(shù)據(jù),從設(shè)備在時鐘的上升沿接收數(shù)據(jù)。因此主設(shè)備這邊SPI時鐘極性應(yīng)該配置為下降沿有效。
          又如,下面這段話是摘自LCD Driver IC SSD1289:
          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è)備SSD1289在時鐘的上升沿接收數(shù)據(jù),而且是按照從高位到地位的順序接收數(shù)據(jù)的。因此主設(shè)備的SPI時鐘極性同樣應(yīng)該配置為下降沿有效。
          時鐘極性和相位配置正確后,數(shù)據(jù)才能夠被準(zhǔn)確的發(fā)送和接收。因此應(yīng)該對照從設(shè)備的SPI接口時序或者Spec文檔說明來正確配置主設(shè)備的時鐘。

          posted @2009-02-22 22:51陳廣強 閱讀(195) |評論(0)| 編輯
          IIC一例子

          IIC

          型號容量器件/業(yè)面尋址字節(jié)可尋址位模塊

          24C01128B(1010)(A2)(A1)(A0)(0或1)3128B
          24C02256B(1010)(A2)(A1)(A0)(0或1)3256B
          24C04512B(1010)(A2)(A1)(P0)(0或1)22X256B
          24C081024B(1010)(A2)(P1)(P0)(0或1)14X256B
          24C162048B(1010)(P2)(P1)(P0)(0或1)08X256B


          解析:IIC總線接口器件24C系列非易失性存儲器與89C51接口采用軟件模擬IIC。24C系列
          存儲器器件地址統(tǒng)一為1010XXXX,不要問為什么,這是廠家出廠的時候規(guī)定好的了。至
          于24C的引腳功能和89C51的接口我就不多說了,本文的重點主要是如何應(yīng)用。
          上面說了,器件的地址字節(jié)的高位是1010,那么低4位呢?先說最后一位吧,最后一
          位為0的時候表示89C51要寫數(shù)據(jù)入存儲器,1的時候表示要從存儲器讀數(shù)據(jù)。還剩下中
          三位A2,A1和A0。它們的高低電平取決于24C的A2,A1,A0是接高電平還是接地。A2,
          A1 和A0有8個組合,因此可以擴展8個相同的器件,根據(jù)A2、A1、A0的不同,一樣的器件
          也會有不同的地址。那么是不是每一個24C都可以擴展8個呢?不是的。注意上表,24C01
          有三個可尋址位,A2,A1,A0,所以可以擴展8個,24C02也一樣。而04則只可以擴展4個
          08只可以擴展2個,16就沒有擴展了,只可以掛一片24C16。為什么呢?因為訪問24C系列
          除了訪問器件地址外,還要訪問器件內(nèi)的字節(jié)的地址。例如24C01,要對其操作,就先選
          選中它的地址,然后操作第一個字節(jié)或其他字節(jié),這些字節(jié)也是有地址的,分模塊,用
          一個字節(jié)表示,最多可以操作256個字節(jié)。24C01和24C02不大于256個字節(jié),對其操作就
          簡單得多了。但24C04,08和16呢?他們都大于256個字節(jié),怎么辦?分模塊。注意到上
          表的P0,P1,P3沒有?把04分成兩個模塊,2X256B,08四個模塊,16就八個模塊。究竟
          怎么
          模塊操作呢?拿24C08為例,有A2 P1 P0。A2只可以0或1,所以只能擴展2個24C08,其
          內(nèi)有4個256字節(jié)的模塊,要操作哪個模塊取決于P1,P0的組合。例如,24C08的地址字節(jié)
          為1010000X第一個字節(jié)地址為0,第256個地址為255,如果地址字節(jié)是1010001X,那么第
          256個字節(jié)的地址為0,第512個字節(jié)的地址為255。就如此。
          再用24C08舉例說明如何擴展,當(dāng)兩個24C08的A2腳分別接高電平和地的時候,就可
          以了,這樣就擴展了,他們的器件地址分別是1010000X和1010100X。當(dāng)要讀第一個(A2
          接地)
          24C08的的第一個模塊的數(shù)據(jù)時候,單片機先發(fā)送地址字節(jié)10100001;當(dāng)要把數(shù)據(jù)寫
          進第二個(A2接高電平)24C08的第二個模塊的時候,應(yīng)發(fā)送10101010地址字節(jié)。
          不再說了,再說我瘋了,看程序吧。這是對24C16操作的例子。*/
          復(fù)制內(nèi)容到剪貼板
          代碼:
          #include

          #define WRITE 0xA0
          #define READ0xA1
          #define BLOCK_SIZE100
          #define uchar unsigned char
          #define HIGH 1
          #define LOW 0
          #define FALSE 0
          #define TRUE ~FALSE

          sbit SCL=P3^4;//T0
          sbit SDA=P3^5;//T1

          uchar xdata EAROMImage[BLOCK_SIZE]={0};


          void delayi2c( void ) {
          ;
          }


          void I_start( void ) {
          SCL = HIGH ;
          delayi2c() ;
          SDA = LOW ;
          delayi2c() ;
          SCL = LOW ;
          delayi2c() ;
          }


          void I_stop( void ) {
          SDA = LOW ;
          delayi2c() ;
          SCL = HIGH ;
          delayi2c() ;
          SDA = HIGH ;
          delayi2c() ;
          SCL = LOW ;
          delayi2c() ;
          }

          //初始化
          void I_init( void ) {
          SCL = LOW ;
          I_stop() ;
          }


          bit I_clock( void ) {
          bit sample ;
          SCL = HIGH ;
          delayi2c() ;
          sample = SDA ;
          SCL = LOW ;
          delayi2c() ;
          return ( sample ) ;
          }


          //發(fā)送8位數(shù)據(jù)
          bit I_send( uchar I_data ) {
          uchar i ;

          for ( i=0 ; i<8 ; i++ ) {
          SDA = (bit)( I_data & 0x80 ) ;
          I_data = I_data << 1 ;
          I_clock() ;
          }

          SDA = HIGH ;
          return ( ~I_clock() );
          }

          //接受8位數(shù)據(jù)
          uchar I_receive( void ) {
          uchar I_data = 0 ;
          register uchar i ;
          for ( i=0 ; i<8 ; i++ ) {
          I_data *= 2 ;
          if (I_clock()) I_data++ ;
          }
          return ( I_data ) ;
          }

          //應(yīng)答
          void I_Ack( void ) {
          SDA = LOW;
          I_clock();
          SDA = HIGH;
          }



          關(guān)鍵詞: SPIIICUARTca

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();