來源: SPI (Serial Peripheral Interface Bus) & IIC (Inter Integrated Circuit)

SPI是現在所謂的RS232功能,這種功能大都使用硬體的方式來處理,使用者只需要將速度..等參數設定好之後,對SBUF丟資料即可,這種傳輸方式最大的缺點是速度不高,最高只有119200bps,一般是拿來做控制的信號傳輸使用而已,不能夠傳大量的資料,因為很慢!這種型態可以拿來做同步雙向傳輸使用,其內部的頻率是以counter來計算的,例如頻率是9600bps,就是每 9600分之一秒自動傳送一個bit,沒有其他的信號來觸發傳送.

以上是UART而非SPI, 感謝讀者指出。

所謂I2C就是一般常見到的IIC, Inter Integrated Circuit. 最早的版本是PHILPS公司在1992所設計的串列匯流排介面,利用兩條訊號控制線來進行資料傳輸,其中兩條訊號控制線分別為:
SCL(Serial Clock) : 作為資料傳輸時的參考時脈
SDA(Serial Data) : 以串列傳輸(一次一位元)的方式傳送資料
如此的設計是適用於IC與IC之間的資料溝通,低功率且速度快.而且分為master和slave裝置,利用master裝置發送訊號出去,每一 個具有IIC介面的晶片都有一個屬於IIC的識別ID碼.因此同樣的SCL與SDA控制線上可一次並聯2的n次方晶片,當master裝置發送訊號出去 時,並聯的晶片將同時收到訊號,但只有正確對應的ID碼晶片才會回送訊息給master端,進而執行資料傳輸的動作.特別需要注意到的一點是,IIC裝置 的slave端無法主動傳送或要求訊號,一定要先由master端發送訊號後,才能有所回應!!

I2C這種方式的傳輸最大可以有400Kbps只比SPI快三倍多而已,它的腳位是2支腳(接地不算),一個叫SDA另一個叫SCL,這種型態多半是拿來做電路板之內各個IC之間的橫向溝通,因此400Kbps的速度其實也是游刃有餘,它的工作方式是以SCL來當做觸發準位,平常時都是在high, 一旦遇到要傳輸開始,就會產生一個Low電位,然後再去SDA取樣(信號端),這種方式由於是所有IC都共用這兩條線,所以在發送資料之前還必須再多送一 個slave address,以利IC辨別現在是在呼叫誰,否則大家同時都收到,卻不知道哪一個要回應會造成錯亂. PS. 液晶電視內部這兩種傳輸方式都有用到.

I2C(InterIntegrated Circuit)匯流排是一種由PHILIPS公司開發的兩線式串列匯流排,用於連接微控制器及其週邊設備。I2C 匯流排產生於在80年 代,最初為音訊和視頻設備開發,如今主要在伺服器管理中使用,其中包括單個元件狀態的通信。例如管理員可對各個元件進行查詢,以管理系統的配置或掌握元件 的功能狀態,如電源和系統風扇。可隨時監控記憶體、硬碟、網路、系統溫度等多個參數,增加了系統的安全性,方便了管理。

 

加註:

既生spi,何生I2C?

1.

SPI每條線皆單向,可以做增強及隔離。
IIC每加一個裝置,也不用加線是最大好處。因各有所長,所以在不同場合使用。

2.

SPI與I2C的傳輸封包是不一樣的 
相對的運用場合也不同 
舉例來說I2C的傳輸封包中包含了位置訊息,故可以支援一對多傳輸方式,而SPI就沒有這樣的功能

3.

I2C可以做multi-mast,SPI不行

4.

BUS的定訂一定有其時空背景

只是follow的人多不多,不好用就會慢慢消失

PS: SPI 速度比較快-->可達50MHz以上

I2C應該不行,另外有SMbus也是架構在I2C上

5.

SPI傳輸協定簡單,很容易就上手了。但若要做到一對多傳輸的話,有點麻煩,必須利用CS選擇線來做選擇。但i2C就沒有這種問題,在加上只需要兩支IO就可以做到一對多的傳輸

6.

uart就是通常说的串口了,固定波特率通信,双方点对点固定的通信
spi是可以支持多个设备通信,但是需要有选择线(CS),两个设备之间互相通信的话至少要3根,如果1主2从就要5根线了(因为主设备要提供2根CS选择到底和哪个从设备通信,不过1根CS再加非门也可以),但是spi速度很快
i2c是根据特定的协议(时序)以及器件号来进行通信的,只使用两跟线就可以在总线上挂很多设备,这在I/O口资源不丰富的情况下很好用,我现在就在找I2C的器件,但是I2C速度慢,消耗CPU时间
总结,spi,i2c都能多对多双向通信,但是spi速度快,占用I/O口多,i2c速度慢,占用口少,uart的优缺点倒还真不知道,只是经常用来和PC通信

7.

任何接口都适用在CPU和外围的芯片之间做接口,包括SPI/IIC/UART。
在低速领域(8位单片机极其周边设备),IIC/SPI/UART都可以用来作为配置(寄存器),也可以用来数据传输。
在高速领域(32位系统极其周边设备),IIC/SPI/UART一般只用来作为配置(寄存器),基本不会用来数据传输,因为速度慢,会严重影响传输效率。
针对这个情况,现在有高速的UART,特别适用在蓝牙的VOIP的大数据量传输。有高速SPI,适用在数字电视(DTV/DMB/CMMB,etc)模块的大数据量传输。

当然这些只是考虑了消费领域,如果考虑工业领域,那这几个就得分别考虑了,因为要牵涉到干扰、辐射、功率等因素了。

8.

IIC/SPI/UART统称为通讯接口,一般CPU都是Master,发起方,外设都是slave,被动方。

CPU一般有地址总线、数据总线。而IO一般都会有一些复用功能,这些虽然是控制管脚,但不是“总线”的概念。

地址总线/数据总线很少和IO口复用,只有极少数的芯片会将A0地址线、D16以上的数据线和IO口复用。但是现在涉及到DDR SDRAM的cpu接口,绝对不会有这样的复用了。

 

9.

总线的英文是bus,而bus在我们的学习体系中刚接触的翻译是:公交汽车,也就是一车带N多人的。所以,总线原本的含义是:N多线由控制器统一控制,设计者无法对其中某一个信号单独控制。这也是地址、数据总线的表现状态。
而控制信号就是反面表现了,分别独立,单独控制,互不影响等等。

倒不是说绝对不能叫“控制总线”,而是习惯不会这么说。你真要这么说,也不会有人拿枪逼着你改,放心。

目前嵌入式上用的DDR SDRAM的速率虽然不高(一般都是133MHz,也就是DDR 266的),但是DDR对于边沿的要求很高,稍微一些毛刺就直接over了。如果在这个控制器上贸然引入别的设备,很容易就将总线拉垮的。

 

Reference

http://topic.csdn.net/u/20080613/17/cc9e59f6-5d2a-4dfe-94ae-e977329c4f4e.html

http://www.haifeng.idv.tw/leo/cgi-bin/topic.cgi?forum=53&topic=334&show=&replynum=0

 

 

kezeodsnx 發表在 痞客邦 PIXNET 留言(3) 人氣()


留言列表 (3)

發表留言
  • 悄悄話
  • 科技人
  • SPI部分說錯了吧 那是UART才對~~~