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