發布日期:2022-10-09 點擊率:58
隨著微控制器應用日益復雜化,開發人員需要使用更多閃存程序存儲器來存儲應用固件。尤其對于開始執行相對復雜的邊緣計算的物聯網 (IoT) 端點,就更是如此。然而,有時候應用可能擴展到需要外部程序存儲器的程度,此時開發人員則需要在并行或串行閃存之間進行選擇。
添加外部并行閃存芯片會占用 I/O 線,增加復雜性,并占用額外的電路板空間。本文將介紹如何通過添加 Adesto Technologies 支持 SPI 芯片內執行 (XiP) 接口的外部串行閃存芯片,來擴展微控制器的閃存程序存儲器。本文還將闡述 XiP 閃存如何映射到 Microchip Technology 微控制器的存儲空間中,以使代碼執行對固件幾乎是透明的。
在應用開發之初,開發人員應盡量選擇有計劃推出具有更大存儲空間的引腳兼容器件的微控制器。如果在開發期間,應用固件擴展到超過目標器件閃存的程度,那么就可以輕松換用具有更大閃存的引腳兼容器件。這樣既能擴展應用存儲器,又無需為不同的微控制器重新設計印刷電路板。
但是,應用需要的程序存儲器可能會超過兼容微控制器系列片上所能提供的存儲器極限,這就需要使用片外閃存。這種現象日益普遍,其原因是多方面的,包括:
在開發階段,系統范圍可能擴大,以致超出初始設計。這可能是由于應用的臨時變更、特征蔓延或未準確預測應用的存儲器需求而造成的。解決辦法是用閃存程序存儲器更大的引腳兼容微控制器進行升級,或增加外部閃存程序存儲器。如果開發已經接近結束,后者可能會導致項目延遲。
將來在現場進行固件升級所需的閃存程序存儲器,可能比系統板上已有的微控制器所能提供的存儲器要大。在這種情況下,解決辦法很有限:要么在現場換用帶更大閃存程序存儲器的系統,要么取消升級。
系統級產品系列開發可能需要一種新產品,該產品需要的閃存程序存儲器比引腳兼容微控制器系列所能提供的存儲器要大。解決辦法是使用新的微控制器系列重新設計系統,或添加外部閃存程序存儲器。
顯然,對于開發人員來說,需要預判當前和未來系統對存儲器擴展的需求并為此進行規劃,這一點相當重要。如果項目有可能需要外部閃存程序存儲器,開發人員應為將來擴展印刷電路板預留空間。雖然閃存芯片不需要安裝在電路板上,但為保險起見,最好還是預留空間。
擴展閃存程序存儲器的傳統辦法是使用具有地址和數據線的并行閃存接口。然而,在不犧牲速度的情況下,即使最有效的使用并行閃存的方式,也只能使用 16 位地址、16 位數據和四個或更多控制信號。而這需要 36 個或更多微控制器引腳。
這不光使微控制器資源使用效率低下,還會將微控制器選擇局限于帶有外部總線的器件,因為這能增加微控制器的引腳數??赏獠坎⑿锌偩€會占用相當大的印刷電路板空間,高速地址和數據總線也會增加電磁干擾 (EMI) 的可能性。
更有效的解決辦法是使用支持 SPI XiP 接口的外部閃存程序存儲器件。SPI XiP 接口只需使用六個引腳就可連接主機微控制器。與傳統 SPI 接口不同,外部閃存器件上的存儲器不是通過 SPI 固件驅動程序直接訪問,而是在微控制器的程序存儲器進行映射。
設計使用 SPI XiP 接口的串行閃存器件的典型范例是來自 Adesto Technologies 的 AT25SL321-UUE-T(圖 1)。這是一款 32 兆位 (Mbit) 閃存,支持單通道、雙通道和四通道 SPI 模式。它支持 104 兆赫 (MHz) 的 SPI 時鐘,在雙通道 SPI 模式下提供 266 MHz 的等效時鐘速率,而在四通道 SPI 模式下提供 532 MHz 的等效時鐘速率。
圖 1:Adesto 的 AT25SL321 是一款 32 Mbit 閃存,支持單通道、雙通道和四通道 SPI 模式。它提供 32 Mbit 閃存,采用 8 引腳 SOIC、DFN8 或 TSSOP8 封裝。(圖片來源:Adesto Technologies)
除 32 Mbit 閃存外,該器件還具有狀態寄存器用來配置器件。通過讀取狀態寄存器,固件可得知器件是否正在進行寫入或擦除操作。寫入狀態寄存器可以對閃存塊進行寫保護。
Adesto 的 AT25SL321 還有 4 千位 (Kbit) 一次性可編程 (OTP) 存儲器,可用于存儲唯一序列號等安全信息。它采用 8 引腳 SOIC、DFN8 或 TSSOP8 封裝。
與所有支持 SPI XiP 的串行存儲器件一樣,Adesto 的 AT25SL321 使用 Adesto 器件專用指令集進行配置。指令集由 38 個命令組成,主機微控制器通過這些命令控制串行閃存。主機微控制器上的 SPI XiP 外設將包含一個可編程狀態機,這個狀態機在微控制器上電時使用目標串行閃存的指令集進行初始化。初始化后,SPI 外設的操作對于存儲器映射的 SPI XiP 區域中的固件執行代碼便是透明的。
例如,如果主機微控制器固件從存儲器映射區域讀取數據,則利用 Adesto 指令集配置的 SPI XiP 會向 Adesto 串行存儲器發送“讀取數據”指令代碼,后跟一個 24 位字節地址。隨后,Adesto 串行存儲器一次一個字節地將存儲器內容發送到主機微控制器。對于固件,這顯示為從存儲器正常讀取。
除了 SPI 時鐘、數據和片選引腳外,Adesto 的 AT25SL321 還有兩個額外引腳,用于增強在系統功能。WP 是低電平有效寫保護引腳,用于防止寫入狀態寄存器,從而對代碼塊予以寫保護。微控制器可以使用此引腳防止低優先級任務進行非授權更改。HOLD 用于暫停正在進行的數據傳輸。如果微控制器正在向存儲器傳輸數據時,接收到高優先級中斷信號,需要暫停直至中斷處理完成,那么此功能就非常有用。
Adesto 的 AT25SL321 32 Mbit 閃存器件支持四種工作模式:
標準 SPI 操作:閃存的訪問方式類似于標準 SPI 存儲器件,即 SPI 時鐘 (SCLK)、低電平有效片選 (CS)、串行輸入 (SI) 數據和串行輸出 (SO) 數據。支持標準 SPI 總線模式 0 和 3。
雙通道 SPI 操作:數據速率是標準 SPI 操作的兩倍,以 SI 和 SO 作為雙向數據引腳,分別記作 IO0 和 IO1。
四通道 SPI 操作:數據速率是標準 SPI 操作的四倍。除 IO0 和 IO1 外,WP 和 HOLD 也用作雙向數據引腳,分別記作 IO2 和 IO3。在四通道 SPI 操作中,WP 和 HOLD 功能不可用。
QPI 操作:僅用于 SPI XiP 操作。標準、雙通道和四通道 SPI 模式都支持僅使用 IO0 引腳向 SPI 存儲器發送命令,而 QPI 操作支持使用四個 IO[0:3] 引腳發送命令,從而顯著提高了 SPI XiP 性能。
如果 Adesto AT25SL321 的 32 Mbit 還不夠,Adesto 還提供 64 Mbit 的 AT25QL641-UUE-T。這兩款器件的引腳兼容,因此 AT25QL641 可以直接替代前者。除了存儲器更大之外,這兩款器件的唯一區別是 AT25QL641 上電后的默認設置為 QPI 操作模式。這可以縮短高性能系統中該器件的設置時間。在存儲器讀取周期中,兩款器件的功耗均只有 5 毫安 (mA)。這兩款 Adesto 存儲器件均采用 1.7 至 2.0 伏單電源軌供電,可與任何具有 SPI XiP 接口的電壓兼容微控制器連接。
對于主機微控制器,Microchip Technology 的 ATSAMD51 系列具有 SPI XiP 接口,其中包括基于 120 MHz Arm? Cortex?-M4F 的 ATSAMD51J20A-UUT 微控制器。該器件具有 1 MB 的閃存和 256 KB 的 RAM。它提供全套外設,包括模數轉換器 (ADC)、數模轉換器 (DAC)、USB 端口和 I2S。它還具有用于安全功能的公鑰加密外設和真隨機數發生器 (TRNG)。
圖 2:Microchip 的 ATSAMD51J20A 具有全套外設,包括 SPI XiP 串行接口、ADC、DAC,并支持數據加密。(圖片來源:Microchip technology)
為連接外部閃存,開發人員可以使用 ATSAMD51J20A 支持 SPI XiP 的 QSPI 外設。這樣,代碼可以直接從 Adesto 閃存執行。ATSAMD51J20A 將 Adesto 閃存映射到 Arm 的高級高性能總線 (AHB) 程序存儲空間。為了保護串行閃存中的數據,ATSAMD51J20A SIP XiP 支持對寫入外部 SPI 存儲器的數據進行透明加擾,以及對從外部 SPI 存儲器讀取的數據進行解擾。這有助于防止未經授權復制固件和盜用系統。
圖 3:Microchip 的 ATSAMD51J20A 32 位微控制器具有支持 SPI XiP 串口的 QSPI 外設。它只需六個引腳即可輕松連接 Adesto 的 AT25SL321 串行閃存。(圖片來源:Digi-Key Electronics)
Microchip ATSAMD51J20A SPI XiP 外設具有三個寄存器,用于向外部串行 XiP 閃存發送命令。不同供應商的串行閃存 XiP 存儲器器件使用不同的指令代碼,因此針對所用的特定供應商存儲器,開發人員須按如下方式配置這些寄存器:
指令代碼寄存器包含用于訪問串行閃存的指令。對于以四通道 SPI 模式工作的 Adesto 閃存器件,如果固件從存儲器映射的 XiP 區域執行代碼,則該寄存器包含“快速讀取四通道輸出”指令 0x6B。如果正在執行寫入、擦除或狀態寄存器操作,則必須將該寄存器更改為相應的指令代碼。
指令地址寄存器包含外部串行閃存中可訪問的閃存地址。當 Microchip 的 ATSAMD51J20A SPI XiP 配置為串行存儲器模式時,SPI XiP 外設會自動將該地址設置為存儲器映射的 AHB 存儲空間范圍 0x0400 0000 至 0x0500 0000 中由固件執行的地址。
指令幀寄存器將 SPI XiP 配置為所用外部存儲器件的特定指令幀格式。這包括選擇 24 或 32 位的地址長度,啟用雙倍數據速率 (DDR),是否支持連續讀取模式,以及操作碼長度。
至于 Microchip SPI XiP 接口的其余部分,使用 Microchip SPI 驅動程序即可輕松配置。
只要微控制器上的應用固件在從 SPI XiP 存儲器映射區域執行代碼,就不需要重新配置微控制器上的 SPI XiP 外設。Adesto 閃存還支持僅使用單個 SI 引腳的讀取模式,相關指令代碼為 0x03。如果僅使用雙通道 SPI 模式,則指令代碼為 0x3B。這些代碼由應用固件寫入指令代碼寄存器。
當指令代碼寄存器改變后,刷新與存儲器映射地址空間相關的所有緩存不失為一種好習慣。讀取或寫入串行閃存狀態寄存器時,應先刷新緩存,然后禁用緩存。寫入閃存的存儲器映射區域時,也應這樣做?;謴痛鎯ζ髯x取操作后,應重新啟用緩存。
由于涉及高速數據傳輸,串行閃存應放置在印刷電路板上盡可能靠近微控制器 SPI XiP 端口的地方。如果不可能,那么印制線長度不應超過 120 毫米 (mm)。時鐘信號應至少是印刷電路板印制線寬度的三倍,并且遠離其他信號以避免干擾。IO[0:3] 雙向數據信號間距應保持在 10 mm 以內,以避免偏移。
外部串行閃存器件可以實現快速固件代碼執行,而不會像并行閃存芯片那樣,增加復雜性和占用過多的電路板空間。通過它可以輕松應對程序代碼因隨時間推移而發生的擴展,并支持現場更新且無需重新設計系統板。
下一篇: PLC、DCS、FCS三大控
上一篇: 運用現成的 IEEE 802.