基于SoC芯片的自啟動新方案
出處:維庫電子市場網(wǎng) 發(fā)布于:2020-05-23 14:33:22
隨著消費類電子產(chǎn)品包括 PDA,MP3、智能手機等手持設備的市場需求逐步擴大,產(chǎn)品間的競爭也愈發(fā)激烈,降低產(chǎn)品的設計成本,提升產(chǎn)品的市場競爭力成為嵌入式系統(tǒng)開發(fā)者所面臨的重大挑戰(zhàn)。NAND FLASH 和 NORFLASH 作為兩種主要的非易失性存儲器,被應用于各種嵌入式系統(tǒng)。其中 NAND FLASH 主要優(yōu)點在于存儲密度高、容量大,有更占優(yōu)勢的存儲性價比。但是 NANDFLASH 由于其獨特的頁式讀寫方式,并不適合程序的直接執(zhí)行。因此,從 NAND FLASH 啟動需要片上存儲器作為代碼執(zhí)行的中轉(zhuǎn)區(qū)。本文所討論的一種系統(tǒng)啟動方式,是在缺少片上存儲器支持的情況下,實現(xiàn)系統(tǒng)直接從 NAND FLASH 啟動。論文中充分考慮了如何實現(xiàn)軟、硬件之間的協(xié)同工作,以完成 SOC 系統(tǒng)的設計。
2、NAND FLASH 控制器的結(jié)構
本文所討論的 NAND FLASH 控制器是針對一款基于 ARM7TDMI 的 SoC 芯片,該控制器在芯片中的位置如圖 1 所示,作為 AMBA 總線上的一個從設備集成于 AHB 上。主要模塊包括總線接口模塊、FIFO 緩沖模塊、ECC 編碼模塊以及邏輯控制模塊。
總線接口模塊主要的功能是轉(zhuǎn)換 AMBA 總線上的控制和數(shù)據(jù)信號:將總線上的數(shù)據(jù)送入 FIFO 或?qū)?shù)據(jù)從 FIFO 讀出到總線上,將總線上的控制信號轉(zhuǎn)換時序后送到控制模塊。
NAND 控制器包含一個寬度為 32 b,深度為 4 的緩沖 FIFO,用于解決高速總線與低速設備之間數(shù)據(jù)傳輸速度的匹配問題。為提高總線的傳輸效率,以及控制器設計的便利性,NAND FLASH 在總線上的數(shù)據(jù)傳輸采用 DMA 的方式來完成。譬如在讀取 FLASH 一頁數(shù)據(jù)時,數(shù)據(jù)持續(xù)寫入控制器 FIFO,F(xiàn)IFO 滿時發(fā)出 DMA 傳輸?shù)恼埱?,同時暫停 FLASH 的數(shù)據(jù)讀取,控制信號 nRE 拉高,直至 DMA 響應請求即 FIFO 不滿時,F(xiàn)LASH 的數(shù)據(jù)傳輸重新開始。當選擇應用的 FLASH 位寬為 8,頁大小為(512+16)B 時,控制器需要發(fā)出(32+1)次 4 拍字寬度的 DMA 傳輸請求來完成數(shù)據(jù)和校驗信息的讀取。
控制模塊的上作主要是將總線接口轉(zhuǎn)換的控制信號,按照 NAND FLASH 的接口協(xié)議.將片選、地址、命令、讀寫使能按照所配置的時序要求,發(fā)送到 NAND FLASH 中,并且控制數(shù)據(jù)的傳輸個數(shù),以及 DMA 請求、數(shù)據(jù)傳輸完成中斷、數(shù)據(jù)錯誤中斷等系統(tǒng)信號。
NAND FLASH 可靠性相對較差,存儲器芯片中有壞塊的存在,會導致存儲數(shù)據(jù)出錯。ECC 校驗模塊針對 NAND FLASH 的可靠性問題,提供了一種查錯、糾錯的機制。ECC 校驗碼在數(shù)據(jù)讀人時,由硬件計算完成后寫入到 FLASH 的校驗位中,當此頁數(shù)據(jù)讀出時,校驗碼再次生成與存儲器校驗位中的數(shù)據(jù)進行比較,若相同則沒有損壞位,若不同,則給出出錯中斷,軟件通過檢查比較結(jié)果,判斷出錯位的位置進行糾錯處理。糾錯功能僅針對單 bit 位的出錯,當一個以上位同時在一頁中出現(xiàn)時,ECC 校驗不能給出出錯位正確的位置。
3、NAND FLASH 工作的軟件流程
按照上節(jié)對控制器結(jié)構以及傳輸機理的分析,NANDFLASH 的使用需要在 FLASH 控制器模塊以及 DMA 控制器模塊的協(xié)同下完成,工作的軟件流程如圖 2 所示。
軟件驅(qū)動的主要工作是配置 DMA 模塊以及 FLASH 控制模塊,當傳輸完成,檢測到中斷后,軟件查詢狀態(tài)寄存器,其中的狀態(tài)位來自 FLASH。當操作完成后,控制器自動向 FLASH 發(fā)出查詢狀態(tài)的命令 0x70,讀出的狀態(tài)字保存在控制器的狀態(tài)寄存器中。
4、NAND FLASH 系統(tǒng)啟動的傳統(tǒng)模式
目前支持從 NAND FLASH 啟動的 SoC 芯片中,一般都內(nèi)嵌有片卜存儲器。各個處理器廠商對這塊片上存儲器定義的容量大小有所不同,但是啟動模式都是比較一致的。NAND FLASH 按頁順序讀取的方式,意味著對當前的存儲地址訪問后就無法馬上再次訪問,需在當前頁訪問完成后,重新對此頁訪問時,才可對先前的地址單元再次訪問,這就導致了一些程序語句無法執(zhí)行,譬如跳轉(zhuǎn)、循環(huán)等語句的使用。因此 NAND FLASH 僅作為啟動代碼的存儲區(qū),而真正執(zhí)行的存儲器區(qū)域是內(nèi)嵌的片上存儲器或者片外的 SDRAM。
以上文中描述的控制器為例,按照這種啟動模式,程序搬運以及執(zhí)行的過程如下:
系統(tǒng)上電前,外部硬線 NAND BOOT 開關選擇從 NAND FLASH 啟動。芯片設計時,默認 DMA 占有系統(tǒng)總線,DMA 按照配置寄存器的默認值工作,其源地址指向 NAND FLASH,目標地址指向片上 SRAM,NANDFLASH 控制器在 NAND BOOT 選中的情況下,默認向 NAND FLASH 的發(fā)出讀命令。即上電后,DMA 控制器以及 NAND FLASH 控制器默認的把 FLASH 存儲器中的頁搬到了片上 SRAM 中。一直到 DMA 的工作完成前,ARM 核無法占用總線。此時零地址映射在片上 SRAM,DMA 完成搬運后,ARM 開始執(zhí)行程序。此段代碼完成的工作包括對 SDRAM 控制器的初始化,從 NAND FLASH 搬運代碼至 SDRAM,配置地址重映射寄存器至零地址處,將 PC 指向零地址的 SDRAM。在 SDRAM 執(zhí)行的代碼開始真正啟動系統(tǒng)。
5、NAND FLASH 系統(tǒng)啟動的新方法
一般情況下,片上存儲器在作為啟動代碼轉(zhuǎn)移階石的同時,往往在啟動后也有其特殊的作用。可以作為特殊的程序區(qū),譬如在進行 MP3 解碼過程中,解碼函數(shù)作為頻繁調(diào)用的程序,可以安排在片上 SRAM 中,以提高讀取速度,提升系統(tǒng)性能。在 SoC 芯片開發(fā)過程中,在整體架構以及模塊功能的變化之后,這塊內(nèi)嵌的 SRAM 失去了原來的作用,而僅作為 NAND FLASH 啟動時的代碼跳板,對于整個芯片而言,付出的代價比較大。于是提出了在沒有片上存儲器的架構下,從 NAND FLASH 啟動的一種新模式。
在上述一般模式啟動過程中,片上 SRAM 所起到的作用,就是執(zhí)行 NAND FLASH 中頁的代碼,將真正的啟動代碼引入到 SDRAM,將 PC 指針指向 SDRAM。在失去片上 SRAM 的支持后,可以在控制器的 FIFO 中去執(zhí)行此段代碼,這需要在硬件以及軟件代碼中作出適當?shù)母淖儭?(1) 首先需要改變的是地址映射的機制,系統(tǒng)上電后,ARM 即從零地址開始執(zhí)行指令,零地址映射到 NAND FLASH 的 FIFO 入口地址,地址的譯碼過程由 AMBA 總線模塊完成。在外部硬線 NAND BOOT 拉高的條件下,AMBA 從設備地址譯碼模塊在啟動過程中,將零地址的設備選擇權給到緩沖 FIFO。在頁的指令執(zhí)行完畢后,PC 指針也指向 SDRAM。
?。?) 其次是 NAND FLASH 控制器在啟動過程中,對數(shù)據(jù)的讀取方式。鑒于 NAND FLASH 大批量數(shù)據(jù)讀寫的特性,往往采用 DMA 方式對數(shù)據(jù)進行操作。啟動過程中,由 ARM core 直接向 FIFO 讀取數(shù)據(jù),在 FIFO 讀空的情況下,將從沒備 READY 信號拉低,等待 NAND 中的數(shù)據(jù)讀出。并且在此讀取過程中,DMA 的請求被屏蔽。
?。?) NAND FLASH 型號類型眾多,從每頁容量大小、數(shù)據(jù)寬度、地址級數(shù)以及各型號芯片不同的時序參數(shù),決定了一個控制器接口的兼容性要求相當?shù)母?。為了兼容從不同?NAND FLASH 啟動,設置了 4 根硬線作為選擇。NAND BOOT 選擇是否從 NAND FLASH 啟動;PAGESIZE 選擇每頁大小,支持 512 B/page,2 kB/page;IOWIDE 選擇數(shù)據(jù)端口的寬度,支持 8 位、16 位;AD-DRESSCYCLE 選擇發(fā)送地址級數(shù),支持 3 級、4 級、5 級地址。時序參數(shù)的配置值可以采用默認的寬松值,在讀取信息之后,將配置值根據(jù)當前的時鐘頻率以及芯片類型,選擇舍適的時序值以達到的性能。 (4) 存儲器的代碼是在緩沖 FIFO 中執(zhí)行的,F(xiàn)IFO 的入口地址是一個高 24 位的選通地址,因此當系統(tǒng)啟動時,零地址開始增加,對 FIFO 中瀆出的指令而言,低 8 位地址的變化是無關的,F(xiàn)IFO 始終被選通。指令的輸出是默認的順序輸出。這就要求的代碼中不可以出現(xiàn)循環(huán)、跳轉(zhuǎn)等語句,并且要求在 128 條指令內(nèi)完成需要的操作。
6、啟動代碼和流程的分析
上述的匯編程序即是存放在 NAND FLASH 的啟動代碼,啟動的流程如下:
?。?) 配置 DMA 控制器的 4 個寄存器,通道使能后,等待 FLASH 發(fā)出的搬運請求;
?。?) 配置 NAND FLASH 控制器的 3 個寄存器,選擇適合的地址、時序參數(shù)與所用的 FLASH 芯片吻合;
?。?) 分別在 r8~r11 中放入程序需要的備用值;
(4) 將需要在 SDRAM 中運行的 4 條指令搬入 SDRAM 0x30000000 處;
(5) 執(zhí)行 Nop 指令,Nop 指令用于填充一頁 NANDFLASH 中的剩余空間;
(6) 執(zhí)行在頁末的指令,將 PC 指針指向 SDRAM 的 0x30000000 處;
?。?) 執(zhí)行 SDRAM 中的指令,首先啟動 NANDFLASH 的數(shù)據(jù)傳輸,將程序搬往 SDRAM 的 0x30001000 處。其次執(zhí)行一個循環(huán)語句,等待頁的程序搬完,之后將 PC 指針指向 0x30001000 處,啟動程序從 0x30001000 處正式開始執(zhí)行。
7、結(jié) 語
本文提出了一種 NAND FLASH 自啟動的新方案,通過對硬件電路以及軟件代碼作合適的調(diào)整,從芯片中去除了內(nèi)部 SRAM,降低了 SoC 芯片的開發(fā)成本。本方案已經(jīng)通過一款命名為 GarfieldV 的 SoC 芯片的測試,達到了預期的效果。
版權與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.udpf.com.cn,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。
如涉及作品內(nèi)容、版權等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權利。
- 探究 MCU 芯片靜電高但產(chǎn)品靜電指標不佳的原因2025/9/4 16:12:23
- 138譯碼器的工作原理2025/8/29 17:04:49
- 什么是ESP8266,ESP8266的知識介紹2025/8/22 17:16:19
- U8726AHE 氮化鎵電源 IC 集成高壓 E - GaN 和啟動電路優(yōu)勢2025/8/20 10:38:23
- 什么是74ls138譯碼器,74ls138譯碼器的知識介紹2025/8/18 17:08:33