新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > 深入了解PSoC?4A :基于SCB的串行通信設計

        深入了解PSoC?4A :基于SCB的串行通信設計

        作者: 時間:2014-10-16 來源:電子產品世界 收藏

          4. 基于模塊的I2C實現

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

          ① I2C簡介

          I2C(Inter Integrated Circuit)是一種兩線制的協議,被廣泛應用于嵌入式設備中芯片之間的低速互連通路,如單片機,ADC,DAC,EEPROM,溫度傳感器, 電源檢測器等,與UART只能實現點到點通信模式不同,I2C總線可以方便的構成多機系統和外圍器件擴展系統,器件地址采用硬件設置方法,并通過軟件進行尋址。圖6給出了I2C總線拓撲示意圖。

          圖6:I2C總線拓撲示意圖

          由圖2可以看出,I2C總線共有兩根信號線,SDA串行數據線與SCL串行時鐘線。SCL保證了總線上所有器件的時鐘同步,可實現較快的傳輸速率(標準模式為100Kbps,高速模式可達3.4Mbps)。I2C總線可以同時連接多個節點設備,并支持多主從設備模式,但同一時刻只能由一個主設備,負責產生SCL同步時鐘和發起與結束一次數據傳輸。且主設備和從設備均可作為發送器(寫數據)和接收器(讀數據)。

          由于只有一根SDA數據線,因此I2C總線只能實現半雙工傳輸模式。數據的讀/寫均由主設備發起與結束。以讀數據為例,首先主設備發起數據傳輸,輸出START事件并輸出7bit的從設備地址和讀標志’1’;接下來主設備釋放SDA,被尋址的從設備拉低SDA作為對主設備的應答(ACK)。然后從設備將通過SDA向主設備發送8位數據,主設備接收完成后發送應答(ACK)信號。當主設備讀完所有的數據,輸出STOP事件,結束本次傳輸。過程示意如圖7所示。

          圖7:I2C總線主設備讀數據示意

          當總線上多個主設備在同一時刻發起數據傳輸時,沖突檢測和仲裁機制能夠保證數據不被丟失。當主設備偵測到SDA 上的邏輯值與自身驅動的值不符時,則檢測到總線沖突,并放棄對總線的控制。更多I2C 協議的知識請參考官方的I2C 協議標準。

          ② 基于的I2C通信實現

          在圖2所示的配置框中,將配置為I2C模式,點開出現的” I2C”菜單,配置基本的I2C通信參數,如圖8所示;需要注意的是,當配置為Master模式的時候,不需要設置地址,只有在配置為Slave模式時,才需要7位地址。

          I2C只能支持半雙工通信,因此在同一時刻,數據發送和接收模式只能選擇一種。與UART相似,數據的發送和接收都可以用中斷與輪詢兩種方式來完成。

           Creator 3.0 本身帶有I2C半雙工數據處理的Example Project;點擊菜單File->Example Project,選擇 4 Architecture,然后選擇”SCB_I2cCommMaster”(主設備模式)或”SCB_I2cCommSlave”(從設備模式)即可打開I2C通信例程。本文以”SCB_I2cCommMaster”為例,打開后的原理圖界面如圖9所示。

          圖 8:I2C通信參數配置

          本例程中的主設備通過I2C總線發送0,1,2,3四個數字給下位機來控制RGB三色LED燈的循環點亮。

          圖 9: SCB_I2cCommMaster

          發送數據的函數代碼如下:

          uint32 WriteCommandPacket(uint8 cmd)

          {

          uint8 buffer[BUFFER_SIZE];

          uint32 status = TRANSFER_ERROR;

          /* Initialize buffer with packet */

          buffer[PACKET_SOP_POS] = PACKET_SOP;

          buffer[PACKET_CMD_POS] = cmd;

          buffer[PACKET_EOP_POS] = PACKET_EOP;

          (void) I2CM_I2CMasterWriteBuf(I2C_SLAVE_ADDR, buffer, PACKET_SIZE, I2CM_I2C_MODE_COMPLETE_XFER);

          while (0u == (I2CM_I2CMasterStatus() & I2CM_I2C_MSTAT_WR_CMPLT))

          {

          /* Waits until master completes write transfer */

          }

          /* Displays transfer status */

          if (0u == (I2CM_I2C_MSTAT_ERR_XFER & I2CM_I2CMasterStatus()))

          {

          RGB_LED_ON_GREEN;

          /* Check if all bytes was written */

          if(I2CM_I2CMasterGetWriteBufSize() == BUFFER_SIZE)

          {

          status = TRANSFER_CMPLT;

          }

          }

          else

          {

          RGB_LED_ON_RED;

          }

          (void) I2CM_I2CMasterClearStatus();

          return (status);

          }

          函數發送三個字節長度的buffer數組給從設備,第一個字節為起始符字節”PACKET_SOP”,第二個字節為數據字節”cmd”, 第三個字節為結束符字節”PACKET_EOP”。數據的發送通過函數” I2CM_I2CMasterWriteBuf”來執行,它尋址從設備并自動將數據加載到總線上。接下來是不斷輪詢數據發送的狀態,直到成功發送完成。接收數據的過程與此類似,您可參考本例程中的數據讀取函數。

          5. 基于SCB模塊的SPI串行通信實現

          ① SPI串行通信簡介

          SPI(Serial Peripheral Interface:串行外設接口)總線是Motorola公司 推出的 一種同步串行接口技術。SPI總線允許MCU以全雙工的同步串行方式,與各種外圍設備進行高速數據通信。主要應用在EEPROM,Flash,RTC(實時時鐘),ADC,DSP以及數字信號解碼器之間。

          SPI數據傳輸共有四根信號線:SCLK為串行時鐘信號,由主設備產生,并傳輸到從設備作為同步時鐘;MOSI/SIMO為主出從入數據信號,由主設備輸出,輸入到從設備。MISO/SOMI為主入從出信號,由從設備輸出,輸入到主設備。SELECTx為從設備選擇信號,由主設備輸出,輸入到從設備,一般為低電平有效。

          SPI總線擁有最高的傳輸速率,最低標準速率為500Kbps,最高可達8Mbps,且為全雙工模式,因此特別適合于MCU用來讀寫諸如EEPROM等片外設備中的數據。

          圖10給出了一主三從的SPI總線串行通信系統框圖。SPI總線一般為”一主多從”拓撲結構,進行數據傳輸時,主設備首先控制相應的一根SELECTx來選擇從設備,然后主設備向從設備同時傳輸時鐘(通過SCLK)和數據(通過MOSI/SIMO),從設備對該數據進行采樣;如果主設備需要讀數據時,從設備將數據發送到MISO/SOMI線上,主設備對該數據進行采樣。

          圖10:SPI總線串行通信系統框圖

          在連續傳輸多幀數據時,SELECT 信號一直被拉低。從設備就無法利用SELECT 的狀態來區分每一幀,從而需要一直監測數據,根據主從設備之間約定的協議找出幀頭和幀尾。當總線結束數據傳輸時,SELECT 被重新拉高,SCLK 無時鐘輸出。摩托羅拉定義了SPI 協議中的四種信號傳輸模式,規定數據在哪個時鐘沿被發送和采樣。通過配置時鐘極性(CPOL: Clock POLarity)和時鐘相位(CPHA: Clock PHAse)來選擇四種模式中的一種。圖11給出了傳輸模式0(SCLK 空閑態為低,時鐘上升沿采樣數據,時鐘下降沿發送數據) 下,雙幀(16bit)數據傳輸的波形圖。

          圖11:傳輸模式0 下的雙幀數據傳輸波形圖

          除了Motorola公司提出的初始版本SPI協議外,TI(德州儀器)與NSC(國家半導體)也在其基礎上提出了各自的修改版SPI協議。關于SPI協議的詳細信息,您可以參考相關的理論文獻。

          ② 基于SCB的SPI通信實現

          在圖2所示的配置框中,將SCB配置SPI模式,點開出現的”SPI Basic”菜單,配置基本的UART通信參數,如圖12所示;”SPI Advanced”菜單下的TX Buffer 和RX Buffer參數保持默認的16個即可。

          圖 12:I2C通信參數配置

          SPI可以支持全雙工通信,但是只能有一個器件為Master。SPI數據幀的長度限制較為寬松,可在4bit到16bit之間自由配置。UART相似,數據的發送和接收都可以用中斷與輪詢兩種方式來完成。

           Creator 3.0 本身帶有SPI全雙工數據處理的Example Project;點擊菜單File->Example Project,選擇PSoC 4 Architecture,然后選擇”SCB_SpiComm”即可打開SPI通信例程。打開后的原理圖界面如圖13所示。

          該例程以1Mbps的傳輸速率,8bit每幀的方式將一組固定的數據(如圖13所示)由Master發送到Slave,并從Slave讀取一組固定的數據(如圖13所示)到Master。

          圖 13: SCB_SPIComm 參考例程

          數據傳輸的函數代碼如下:

          /* Writing data into the SPIS TX software buffer */

          SPIS_SpiUartWriteTxData(0x11u);

          SPIS_SpiUartWriteTxData(0x22u);

          SPIS_SpiUartWriteTxData(0x33u);

          SPIS_SpiUartWriteTxData(0x44u);

          SPIS_SpiUartWriteTxData(0x55u);

          SPIS_SpiUartWriteTxData(0x66u);

          SPIS_SpiUartWriteTxData(0x77u);

          SPIS_SpiUartWriteTxData(0x88u);

          SPIM_ClearMasterInterruptSource(SPIM_INTR_MASTER_SPI_DONE);

          /* Writing data into the SPIM software buffer */

          SPIM_SpiUartWriteTxData(0x99u);

          SPIM_SpiUartWriteTxData(0xAAu);

          SPIM_SpiUartWriteTxData(0xBBu);

          SPIM_SpiUartWriteTxData(0xCCu);

          SPIM_SpiUartWriteTxData(0xDDu);

          SPIM_SpiUartWriteTxData(0xEEu);

          SPIM_SpiUartWriteTxData(0xFFu);

          SPIM_SpiUartWriteTxData(0x12u);

          /*

          * We need to know the moment when SPI communication is completed

          * to display received data. SPIM_INTR_MASTER_SPI_DONE status should be polled.

          */

          while(0u == (SPIM_GetMasterInterruptSource() & SPIM_INTR_MASTER_SPI_DONE))

          {

          /* Wait while Master completes transaction */

          }

          可以看出SPI串行通信的代碼實現也很簡單,分別將需要發送和接收的數據寫入Master和Slave器件相應的寄存器即可。然后就等待SCB模塊自動置位傳輸完成標志后即可以將所獲得的數據用于程序處理了。關于數據幀的長度和傳輸故障的處理,用戶可以根據自己的需要自行配置。

          6. 小結

          本文主要介紹了PSoC®4A片內SCB模塊的主要功能與配置方法,以及如何使用SCB模塊實現行UART,I2C和SPI這三種最常用的串行通信協議,并詳細介紹了PSoC Creator 3.0 開發工具自帶的UART,I2C和SPI通信例程,可以幫助用戶加快開發過程,并使用PSoC®4A進行簡潔高效的產品設計。

          參考文獻

          [1]. PSoC® 4: PSoC 4200 Family Datasheet

          [2]. PSoC® 4 Architecture TRM

          [3]. PSoC 4100/4200 Family PSoC® 4 Registers TRM (Technical Reference Manual)

          [4]. UM10204 I2C-bus specification and user manual

        數字通信相關文章:數字通信原理


        通信相關文章:通信原理



        上一頁 1 2 下一頁

        關鍵詞: PSoC SCB 串行通信

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阳西县| 内黄县| 时尚| 金塔县| 香港| 射洪县| 广宗县| 新密市| 弥勒县| 吐鲁番市| 玉门市| 英吉沙县| 余庆县| 汶上县| 即墨市| 临江市| 太白县| 海阳市| 藁城市| 嵊州市| 凤庆县| 灵丘县| 鹤峰县| 河间市| 靖江市| 云阳县| 深州市| 石城县| 龙岩市| 墨竹工卡县| 铅山县| 衡南县| 美姑县| 揭阳市| 渭源县| 峨眉山市| 定边县| 平果县| 钦州市| 南平市| 寿阳县|