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