使用 SPI XiP 快閃記憶體擴充微控制器程式記憶體的理由及作法

作者:Bill Giovino

資料提供者:DigiKey 北美編輯群

隨著微控制器應用變得越來越複雜,開發人員在應用韌體使用更多快閃程式記憶體。對於已開始執行相對複雜的邊緣運算的物聯網 (IoT) 端點更是如此。然而有時候,應用在擴充時需要用到外接式程式記憶體。此時,開發人員就必須選擇使用並列還是序列快閃記憶體。

若新增外接式並列快閃記憶體晶片,則會佔用 I/O 線路、增加複雜度,並用掉額外的電路板空間。本文將探討如何透過新增 Adesto Technologies 的外接式序列快閃記憶體晶片,來擴充微控制器的快閃程式記憶體;而該晶片可支援 SPI 晶片內執行 (XiP) 介面。此外,還會解釋 XiP 快閃記憶體是如何對映到 Microchip Technology 微控制器的記憶體空間內,讓程式碼的執行對韌體而言幾乎完全透明。

使用外接式記憶體進行擴充的理由

若是可行,開發人員在開發應用伊始,所選擇的微控制器就應是具備更多記憶體且引腳相容的裝置系列。如果在開發期間,應用韌體擴充到超出目標裝置上的快閃記憶體,那麼就可以輕鬆換用具有更多快閃記憶體且引腳相容的裝置。這樣即可擴充應用記憶體,而無需為不同的微控制器重新設計 PC 板。

然而,應用所需的程式記憶體,可能超過引腳相容微控制器系列的晶片上可用記憶體,因此需要使用晶片外快閃記憶體。此現象已經越來越普遍,原因可能有幾個,其中包括:

  • 系統範疇可能在開發階段擴大,超過其初始概念。這可能是因為應用最後一刻的變更、功能延伸,或是未準確預測應用的記憶體需求。此時可採用的選項是:使用具備更多快閃程式記憶體且引腳相容的微控制器來升級;或是新增額外的外接式快閃程式記憶體。如果開發已經進行,後面的選項可能會造成專案延宕。
  • 未來進行現場韌體升級時所需的快閃程式記憶體,可能超過系統板上現有微控制器可提供的此種記憶體。在此情況下的選擇有限,要麼是現場將系統更換為含有更多快閃程式記憶體的系統,不然就是取消升級。
  • 開發系統產品系列時可能需要新產品,而其所需的快閃程式記憶體,超過引腳相容的微控制器系列可提供的此種記憶體。此時可採用的選項為:使用新的微控制器系列重新設計系統,或新增外接式快閃程式記憶體。

顯然,開發人員務必要預見現在與未來的系統,對此記憶體的擴充需求,並予以規劃。如果專案未來可能需要外接式快閃程式記憶體,開發人員應在 PC 板上預留未來擴充空間。雖然快閃記憶體晶片不需要插在板件上,但為保險起見,最好還是預先分配空間。

傳統的快閃程式記憶體擴充方式,是使用含位址和數據線的並列快閃記憶體介面。然而,即使在不犧牲速度的情況下,以最有效的方式使用並列快閃記憶體,還是會用掉 16 位元的位址、16 位元的數據,以及四個或四個以上控制訊號。而這將需要 36 個或更多個微控制器引腳。

除了微控制器資源的使用效率低下之外,這也會將微控制器的選擇範圍限制在包含外接匯流排的裝置上,進而增加微控制器的引腳數。此外,外接式平行匯流排會佔用大量的 PC 板空間,同時高速位址和數據匯流排也會增加電磁干擾 (EMI) 的機會。

SPI XiP 程式碼執行

更有效的選項是使用可支援 SPI XiP 介面的外接式快閃程式記憶體元件。SPI XiP 介面僅需使用六個引腳,便能介接主機微控制器。不同於傳統的 SPI 介面,此外接式快閃記憶體元件的記憶體,不是透過 SPI 韌體驅動器直接存取,而是對映至微控制器的程式記憶體。

Adesto Technologies 的 AT25SL321-UUE-T (圖 1),就是使用 SPI XiP 介面進行介接的序列快閃記憶體元件的良好範例。這是一款支援單 SPI、雙 SPI、四 SPI 模式的 32 Mb 快閃記憶體。其支援 104 MHz 的 SPI 時脈,在雙 SPI 模式下可提供 266 MHz 的等效時脈率,在四 SPI 模式下可提供 532 MHz 的等效時脈率。

Adesto 的 AT25SL321 快閃記憶體圖片

圖 1:Adesto 的 AT25SL321 是一款支援單 SPI、雙 SPI、四 SPI 模式的 32 Mb 快閃記憶體。此元件在 8 引腳的 SOIC、DFN8 或 TSSOP8 封裝中,提供 32 Mb 的快閃記憶體。(圖片來源:Adesto Technologies)

除了 32 Mb 的記憶體,此元件還具有狀態暫存器以供用於設定元件。透過讀取狀態暫存器,可告知韌體此元件是否正在進行寫入或抹除作業。透過寫入狀態暫存器,則可讓快閃記憶體區塊受到寫入保護。

此外,Adesto 的 AT25SL321 還具有 4 Kb 的一次性可編程 (OTP) 記憶體,可用來儲存唯一序號等安全資訊。此元件採用 8 引腳 SOIC、DFN8 或 TSSOP8 封裝。

與所有支援 SPI XiP 的序列記憶體元件一樣,Adesto 的 AT25SL321 也是透過 Adesto 元件專用的指令集進行設定。指令集包含 38 個命令,可供主機微控制器來控制序列快閃記憶體。在主機微控制器上,SPI XiP 周邊裝置會包含可編程狀態機,並在微控制器啟動時,透過目標序列快閃記憶體的指令集進行初始化。初始化後,對於記憶體對映 SPI XiP 區域中的韌體執行程式碼而言,SPI 周邊裝置的運作就是透明的。

舉例來說,假如主機微控制器韌體從記憶體對映區域讀取數據,以 Adesto 指令集設定的 SPI XiP 會傳送「讀取數據」指令碼,接著傳送 24 位元組位址到 Adesto 序列記憶體。Adesto 序列記憶體隨後會以一次一個位元組的方式,將記憶體內容傳送到主機微控制器。對韌體來說,這就如同對記憶體的正常讀取。

除了 SPI 時脈、數據和晶片選擇引腳,Adesto 的 AT25SL321 還有兩個額外的引腳,可用於強化系統內功能。WP\ 是低態動作寫入保護引腳,能夠防止寫入狀態暫存器,進而對程式碼區段進行寫入保護。微控制器可使用此引腳,防止低優先級作業做出未經授權的更改。HOLD\ 用於暫停進行中的數據傳輸。如果在數據傳輸到記憶體的過程中,微控制器收到高優先級中斷訊號,並且需要暫停傳輸來提供中斷服務,則此功能非常有用。

Adesto 的 AT25SL321 32 Mb 快閃記憶體元件支援四種作業模式:

  • 標準 SPI 作業:快閃記憶體的存取方式類似於標準 SPI 記憶體元件,具有 SPI 時脈 (SCLK)、低態動作晶片選擇 (CS\)、序列輸入 (SI) 數據和序列輸出 (SO) 數據。此元件支持標準 SPI 匯流排模式 0 與 3。
  • 雙 SPI 作業:使用 SI 和 SO 作為雙向數據引腳,且將兩者標記為 IO0 和 IO1,可提供兩倍於標準 SPI 作業的數據傳輸率。
  • 四 SPI 作業:可提供四倍於標準 SPI 作業的數據傳輸率。除了 IO0 和 IO1 之外,WP\ 和 HOLD\ 也用作雙向數據引腳,即 IO2 和 IO3。在四 SPI 作業中,WP\ 和 HOLD\ 功能不可用。
  • QPI 作業:僅適用於 SPI XiP 作業。雖然標準 SPI、雙 SPI、四 SPI 模式皆支援僅透過 IO0 引腳傳送命令至 SPI 記憶體,但是 QPI 作業支援透過四個 IO[0:3] 引腳傳送命令,大幅提升 SPI XiP 的效能。

如果 Adesto AT25SL321 的 32 Mb 仍不夠,Adesto 還提供 64 Mb 的 AT25QL641-UUE-T。這兩款元件的引腳彼此相容,因此 AT25QL641 可作為直接的替代方案。除了具有更多的記憶體外,這兩款元件唯一的差異就是:AT25QL641 在啟動時預設為 QPI 作業。這可縮短高效能系統中元件的設定時間。兩款元件在記憶體讀取週期內都僅耗用 5 mA;這兩款 Adesto 記憶體元件都採用單一的 1.7 至 2.0 V 的電軌,且都能介接到任何電壓相容且具有 SPI XiP 介面的微控制器。

對於主機微控制器,Microchip Technology 的 ATSAMD51 系列具有 SPI XiP 介面,其中包括 120 MHz 以 Arm® Cortex®-M4F 為基礎的 ATSAMD51J20A-UUT 微控制器。此元件有 1 MB 的快閃記憶體與 256 KB 的 RAM,且擁有全系列的周邊裝置,包括類比數位轉換器 (ADC)、數位類比轉換器 (DAC)、USB 埠及 I2S。此外,還有用於安全功能的公共金鑰加密周邊裝置和真實亂數產生器 (TRNG)。

Microchip 的 ATSAMD51J20A 具有全套周邊裝置的示意圖 (按此放大)

圖 2:Microchip 的 ATSAMD51J20A 具有全套的周邊裝置,包括 SPI XiP 序列介面、ADC 和 DAC,同時還支援數據加密。(圖片來源:Microchip technology)

若要連接外接式快閃記憶體,開發人員可以使用支援 SPI XiP 的 ATSAMD51J20A QSPI 周邊裝置,如此便能直接從 Adesto 快閃記憶體執行程式碼。ATSAMD51J20A 可將 Adesto 快閃記憶體對映到 Arm 的進階高效能型匯流排 (AHB) 程式記憶體空間中。為了保護序列快閃記憶體內的數據,ATSAMD51J20A SIP XiP 支援對寫入外接式 SPI 記憶體的數據進行透明加擾,並支援對從外接式 SPI 記憶體讀取的數據進行解擾。這可幫助防止未經授權複製韌體以及發生系統盜用。

Microchip 的 ATSAMD51J20A 32 位元微控制器示意圖

圖 3:Microchip 的 ATSAMD51J20A 32 位元微控制器,具有支援 SPI XiP 序列埠的 QSPI 周邊裝置。僅需六個引腳,便可輕鬆介接到 Adesto 的 AT25SL321 序列快閃記憶體。(圖片來源:DigiKey)

Microchip 的 ATSAMD51J20A 與 Adesto 序列快閃記憶體元件搭配使用

Microchip 的 ATSAMD51J20A SPI XiP 周邊裝置具有三個暫存器,可用於將命令傳送到外接式序列 XiP 快閃記憶體。由於不同供應商的序列快閃 XiP 記憶體元件採用不同指令碼,開發人員必須根據所選擇的具體記憶體供應商,將這些暫存器設定如下:

  1. 指令碼暫存器包含用來存取序列快閃記憶體的指令。對於以四 SPI 模式運作的 Adesto 快閃記憶體元件,如果韌體將從記憶體對映的 XiP 區域執行程式碼,則此暫存器應包含「快速讀取四輸出」指令 0x6B。若是執行寫入、抹除或狀態暫存器的作業,則此暫存器必須變更為相應的指令碼。
  2. 指令位址暫存器包含在外接式序列快閃記憶體中進行存取的快閃記憶體位址。當 Microchip 的 ATSAMD51J20A SPI XiP 設定為序列記憶體模式時,此位址會由 SPI XiP 周邊裝置自動設定成:在記憶體對映的 AHB 記憶體空間範圍內 (0x0400 0000 至 0x0500 0000),由韌體執行的位址。
  3. 指令框架暫存器會將 SPI XiP 設定為:所使用外接式記憶體元件的專屬指令框架格式。這包括選擇 24 或 32 位元長度的位址,啟用雙數據傳輸率 (DDR),是否支援連續讀取模式以及運算碼長度。

Microchip 的其餘 SPI XiP 介面可使用 Microchip SPI 驅動器輕鬆設定。

只要微控制器上的應用韌體是從 SPI XiP 記憶體對映區域執行程式碼,就不需要重新設定微控制器上的 SPI XiP 周邊裝置。此外,Adesto 快閃記憶體也支援只使用單一 SI 引腳的讀取模式,指令碼為 0x03。若只使用雙 SPI 模式,指令碼為 0x3B。這些指令碼將由應用韌體寫入指令碼暫存器。

變更指令碼暫存器時,清空任何與記憶體對映位址空間關聯的快取,可視為不錯的做法。讀取或寫入序列快閃記憶體狀態暫存器時,應該清空並接著停用快取。寫入記憶體對映區域的快閃記憶體時,也應該如此做。恢復記憶體讀取操作後,應重新啟用快取。

由於涉及高速數據傳輸,在 PC 板上放置序列快閃記憶體時,應儘可能讓其靠近微控制器 SPI XiP 埠。若無法做到,則走線不該超過 120 mm。為避免干擾,時脈訊號應遠離其他訊號,距離至少為 PC 板走線寬度的三倍。而 IO[0:3] 雙向數據訊號應彼此相距 10 mm 之內,以免發生偏斜。

結論

外接式序列快閃記憶體元件可快速執行韌體程式碼,既不會像並列快閃記憶體晶片那麼複雜,也不會佔用過多的板空間。如此一來,即可在日後輕鬆地擴充程式碼以及執行現場更新,而無需重新設計系統板。

DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Bill Giovino

Bill Giovino

Bill Giovino 是電子工程師,擁有美國雪城大學的電機工程學士學位,也是少數從設計工程師跨足現場應用工程師,再到技術行銷領域的成功典範之一。

Bill 過去 25 年來熱衷於向科技和非科技業的對象推廣新技術,包括 STMicroelectronics、Intel 和 Maxim Integrated 等多家企業。Bill 在 STMicroelectronics 任職期間,曾協助領導該公司順利進軍微控制器領域。在 Infineon 任職時,則策劃出該公司首款在美國汽車業大受歡迎的微控制器設計。Bill 目前是他個人公司 CPU Technologies 的行銷顧問,曾協助諸多企業讓表現不佳的產品重獲市場青睞。

Bill 更是採用物聯網的先驅,包括在微控制器中首次納入完整的 TCP/IP 堆疊。Bill 致力於推廣「用教育促成銷售」的理念,也認可在線上推銷產品時有清楚完整文字說明的重要性。他在 LikedIn 熱門的半導體銷售和行銷群組中擔任管理員,也擁有深厚的 B2E 知識。

關於出版者

DigiKey 北美編輯群