24小時聯(lián)系電話:18217114652、13661815404
中文
行業(yè)資訊
SPI與I2C:如何為您的存儲芯片選擇最佳協(xié)議
SPI與I2C:如何為您的存儲芯片選擇最佳協(xié)議
SPI和I2C可能是最常用的數(shù)字協(xié)議,用于連接各種產(chǎn)品中的集成電路。SPI和I2C都是易于使用、難以破解的串行數(shù)字協(xié)議,從信號完整性的角度來看,它們很容易路由。與阻抗控制的高速差分串行協(xié)議不同,這兩種協(xié)議沒有阻抗規(guī)范,通常被認(rèn)為是電氣短路的。這意味著,在PCB上,設(shè)計要求相對簡單,并且在標(biāo)準(zhǔn)中仍有一些自由度可以根據(jù)需要調(diào)整性能。
PCB布局中SPI和I2C的常見實現(xiàn)之一是作為用于讀取和寫入外部閃存的協(xié)議。閃存芯片是嵌入式系統(tǒng)中非常常見的組件,可以提供高達(dá)Gb值的高容量非易失性存儲器。選擇內(nèi)存芯片時,您需要將應(yīng)用程序要求和功能與內(nèi)存芯片中讀寫操作所需的總線速度相匹配。還有您需要訪問的閃存類型的問題(NOR與NAND)。
SPI和I2C比較
串行外設(shè)接口(SPI)和內(nèi)部集成電路(I2C)協(xié)議都是以低速到中速運(yùn)行的簡單串行數(shù)字協(xié)議。這兩個接口有一些共同的特點:
他們使用不止一根線來發(fā)送/接收數(shù)據(jù)
時鐘是源同步的,這意味著只有一條走線承載時鐘線
總線上的其他芯片是可尋址或可切換的
大多數(shù)微控制器將集成其中一個或兩個接口
信號電平可以通過給芯片的核心電壓來設(shè)置
這些接口都沒有阻抗要求
顯然,這些接口非常相似。它們確實有一些重要的區(qū)別,如下表所示。
|
I2C |
SPI |
網(wǎng)名 |
- 串行數(shù)據(jù)(SDA) - 串行時鐘(SCL) |
- 主輸入,從輸出(MISO) - 主輸出,從輸入(MOSI) - 串行時鐘(SCK或SCLK) - 片選(CS,可選) |
拓?fù)?/span> |
- 廣播總線拓?fù)?span> |
- 共享味噌/MOSI/SCK - CS引腳的星號 |
數(shù)據(jù)速率 |
- 標(biāo)準(zhǔn)模式:高達(dá)100 kbps - 快速模式:高達(dá)400 kbps - 快速模式加:高達(dá)1 Mbps - 高速模式:高達(dá)3.4 Mpbs |
- 由時鐘窗口時間固定,最高可達(dá)60Mbps |
上升/下降時間 |
- 取決于總線電容和上拉電阻值(使用RC時間常數(shù)) |
- 指定給定負(fù)載阻抗 |
尋址 |
- 固定在每個組件上的地址引腳 |
- 主控制器中用于切換芯片的CS引腳(可通過GPIO或?qū)S?span>CS引腳切換) |
方向性 |
- 半雙工 |
- 全雙工 |
信號驅(qū)動 |
- 開漏 |
- 推挽式(帶CMOS緩沖器) |
與I2C相比,SPI標(biāo)準(zhǔn)提供更高的數(shù)據(jù)速率并且可以以更快的邊沿速率運(yùn)行。由于在I2C上使用上拉電阻、通常較高的總線電容以及驅(qū)動方法是開漏極的事實,I2C總線的上升時間可以達(dá)到100納秒。對于驅(qū)動低負(fù)載電容的高級組件,SPI總線的上升時間可以低至1 ns ,這意味著它們在切換期間可能會出現(xiàn)瞬態(tài)振鈴。SPI線路也更容易產(chǎn)生串?dāng)_,因為它們的開關(guān)速度非???。要了解有關(guān)SPI總線中這兩種協(xié)議和信號完整性的更多信息,請閱讀以下資源。
為存儲芯片選擇SPI和I2C時的重要考慮因素
訪問NAND與NOR閃存
在本節(jié)中,我不想深入討論NAND與NOR閃存的細(xì)節(jié),而是想關(guān)注如何使用串行協(xié)議訪問它們。如果您可以采購正確的內(nèi)存組件,則可以使用SPI或I2C總線訪問這兩種類型的閃存芯片:
NOR閃存 -絕大多數(shù)使用SPI訪問,即使在更小和更慢的閃存芯片上也是如此??梢允褂?span>I2C訪問速度較慢的芯片。
NAND閃存 -絕大多數(shù)使用并行總線訪問,但具有I2C和SPI總線的芯片數(shù)量大致相等。
如果您查看Octopart并使用過濾器功能,您將能夠找到一些使用任一接口的高容量存儲器。
用于存儲器的I2C到SPI接口橋接
如果需要在I2C和SPI接口之間進(jìn)行轉(zhuǎn)換,可以使用接口橋接器。這些組件在這些接口之間轉(zhuǎn)換數(shù)據(jù)格式,因此可能只有SPI總線的組件可以訪問只有I2C總線的外圍組件。這包括內(nèi)存芯片,但如果控制器僅使用I2C并且內(nèi)存使用SPI,則速度可能會受到限制,并且接收組件可能由于上升時間長而無法工作。
要克服I2C的這一限制,最好使用帶SPI的控制器,然后使用接口橋訪問只有I2C的外設(shè)。請注意,SPI端的時鐘必須更低,以確保它可以在I2C速度下使用。這將在以下拓?fù)渲型瓿桑?span>
需要SPI到I2C接口橋接器的首選配置。
電平轉(zhuǎn)換
開漏和推挽串行協(xié)議(其中信號電平由內(nèi)核電壓設(shè)置)中的另一個常見要求是電平轉(zhuǎn)換。構(gòu)建PCB的最簡單方法是使用調(diào)節(jié)到所需核心電壓的單個電源,例如使用LDO。實際上,您可能有一些外圍設(shè)備在較高電壓下運(yùn)行(例如3.3 V),而主控制器在較低電壓下運(yùn)行多個軌(2.5 V、1.8 V等)。如果您的MCU以3V3運(yùn)行,但您的內(nèi)存以 1V8運(yùn)行(這是一種常見情況),那么您將需要通過電平轉(zhuǎn)換器路由SPI或I2C信號。請注意,一些接口橋?qū)ㄒ粋€電平轉(zhuǎn)換器,連接到兩個電源軌;拓?fù)淙缦聢D所示。
用于電平轉(zhuǎn)換的拓?fù)洹?span>
一旦您為您的設(shè)計找到了組件,您如何在SPI與I2C接口之間做出選擇?以下幾點將推動您做出決定:
速度:當(dāng)您批量傳輸數(shù)據(jù)或有一個狹窄的窗口來驗證用戶輸入與存儲在內(nèi)存芯片中的數(shù)據(jù)時,每一微秒都很重要。如果系統(tǒng)的其余部分需要實時重復(fù)讀寫功能,請使用SPI。如果控制器只需要偶爾從內(nèi)存讀取或?qū)懭?,則使用I2C。
控制器:如果您使用的是非常小的MCU或外圍設(shè)備,并且可用的引腳很少,那么您應(yīng)該使用I2C。事實上,對于某些微控制器,您可能別無選擇。例如,經(jīng)典的ATTiny MCU 只有I2C,因此如果它們需要來自外部存儲器的數(shù)據(jù),則必須找到支持I2C的存儲芯片。
電源:如果您正在設(shè)計需要重復(fù)訪問數(shù)據(jù)的電池供電設(shè)備,您可能會選擇SPI,因為該接口的平均功耗低于I2C接口。