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