小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一種SD/MMC存儲器啟動方案在SoC中的設(shè)計與實(shí)現(xiàn)

 amine 2010-06-05
一種SD/MMC存儲器啟動方案在SoC中的設(shè)計與實(shí)現(xiàn)
作者:葛偉 劉新寧    來源:電子設(shè)計應(yīng)用2009年第2期 
 
      


引言

SD/MMC存儲器以其成本低廉、存儲容量大、性能優(yōu)良、安全性高等特點(diǎn)越來越廣泛地應(yīng)用于便攜式設(shè)備和家用電子設(shè)備。目前很多移動嵌入式產(chǎn)品采用了外置Nor Flash作為Boot Flash外加SD存儲器作為擴(kuò)展存儲容量的系統(tǒng)方案,或者利用芯片的管理與非器件和MMC存儲器進(jìn)行啟動的方法,這些傳統(tǒng)的啟動方案都會使用到兩種或以上的存儲介質(zhì),大大增加了芯片互聯(lián)的不穩(wěn)定性,增大了系統(tǒng)面積和成本。本文全面考慮嵌入式芯片啟動過程中涉及到的軟、硬件問題,基于AMBA總線架構(gòu),通過硬件語言設(shè)計、軟件仿真,以及FPGA驗(yàn)證,設(shè)計實(shí)現(xiàn)了一種基于SD/MMC存儲器的直接啟動方案,使得設(shè)計者可以使用SD/MMC作為單一的、非易失性的存儲介質(zhì),使系統(tǒng)的成本更低、性能更優(yōu)、擴(kuò)展性更強(qiáng)。


系統(tǒng)架構(gòu)及軟、硬件設(shè)計

SoC的啟動設(shè)計是一個系統(tǒng)且復(fù)雜的過程,需要根據(jù)總線技術(shù)綜合考慮構(gòu)建整個系統(tǒng)架構(gòu)。本文中SD/MMC存儲器的直接啟動方案基于AMBA總線架構(gòu),除了設(shè)計SD/MMC啟動控制器,還需要協(xié)調(diào)內(nèi)核、ESRAM(片上存儲器)、EMI(外部存儲器接口)、PMU(功耗管理單元)、DMA(直接存儲器存取)等完成整個啟動過程。如圖1所示,內(nèi)核、ESRAM、EMI連接在高速AHB總線上,DMA模塊實(shí)現(xiàn)數(shù)據(jù)在外設(shè)和存儲器之間的直接傳輸,PMU和INTC(中斷控制器)連接在APB總線上,SD/MMC控制器實(shí)現(xiàn)對SD/MMC存儲介質(zhì)的操作。

圖1    SD/MMC直接啟動系統(tǒng)架構(gòu)框圖

直接啟動方案由軟、硬件兩部分組成,對SD/MMC存儲介質(zhì)完成初始化之后由DMA控制器將啟動代碼載入到芯片內(nèi)置存儲空間ESRAM,并且將ESRAM映射到零地址,內(nèi)核開始執(zhí)行指令;軟件代碼實(shí)現(xiàn)系統(tǒng)的啟動配置,完成硬件初始化,設(shè)置中斷向量表,配置系統(tǒng)時鐘、中斷控制器、內(nèi)存控制器、DMA控制器等,并且完成堆棧設(shè)置以及地址重映射等功能。


系統(tǒng)架構(gòu)的設(shè)計

為了成功實(shí)現(xiàn)從SD/MMC存儲器的啟動,在整個硬件系統(tǒng)中考慮以下幾個方面的實(shí)現(xiàn):

1. 對于不同的啟動模式,在上電復(fù)位以后,需要對AMBA總線的地址譯碼電路進(jìn)行不同的設(shè)計,實(shí)現(xiàn)不同的零地址映射。

2. 在功耗管理模塊中應(yīng)保證系統(tǒng)啟動時與啟動相關(guān)的功能模塊如ESRAM、DMA、SD/MMC控制器的時鐘是默認(rèn)打開的。

3. SD/MMC存儲器在上電之后需要進(jìn)行初始化配置,因而在上電之后,默認(rèn)由DMA控制總線,直到完成數(shù)據(jù)載入的傳輸之后釋放總線,CPU核從零地址開始執(zhí)行程序。

4. 由于啟動過程中涉及到通過DMA實(shí)現(xiàn)代碼的搬運(yùn),因而DMA的初始參數(shù)配置和時序配置應(yīng)滿足完成代碼傳輸?shù)男枰?/p>

5. 由于SD/MMC啟動對于程序員的設(shè)計而言是一個黑盒子,因而在保證啟動控制器設(shè)計穩(wěn)定性的同時,應(yīng)該考慮設(shè)計中友善的接口,在啟動失敗時應(yīng)有指示信號以便于程序員調(diào)試。


啟動方案的硬件設(shè)計

SD/MMC控制器的頂層設(shè)計如圖2所示,為了實(shí)現(xiàn)上電啟動以后,SD/MMC控制器模塊對SD/MMC存儲器的初始化以及數(shù)據(jù)載入,在已有的代碼基礎(chǔ)上加入SD/MMC啟動控制器,新建SD/MMC_頂層設(shè)計實(shí)現(xiàn)兩個模塊的連接。作為整個芯片設(shè)計的啟動方案之一,模塊設(shè)計中采用Boot_en信號作為使能信號,并在啟動失敗時輸出Boot_error信號作為芯片調(diào)試信號。

圖2    SD/MMC控制器的頂層設(shè)計

硬件設(shè)計的啟動控制器對存儲卡進(jìn)行初始化,并且通過初始化過程中存儲卡對初始化命令的不同響應(yīng),判斷存儲卡的種類,完成單線多塊(4K)數(shù)據(jù)的傳輸。

圖3     硬件啟動控制器的狀態(tài)轉(zhuǎn)換圖

硬件啟動控制器的狀態(tài)轉(zhuǎn)換如圖3所示,在系統(tǒng)上電復(fù)位和時鐘穩(wěn)定之后,硬件啟動控制器進(jìn)入BOOT_IDLE狀態(tài)對Boot_en信號采樣,當(dāng)信號有效則進(jìn)入START狀態(tài),否則進(jìn)入IDLE狀態(tài);在START狀態(tài)首先檢查是否有SD/MMC卡連接在卡槽上,之后完成模塊輸入時鐘配置、清除狀態(tài)寄存器、更新輸出時鐘等操作,此時應(yīng)注意將初始化過程中的輸出時鐘頻率設(shè)定在低于400kHz;在完成以上設(shè)置之后發(fā)送CMD0命令,應(yīng)考慮到在上電后存儲卡需要初始化延時(74個輸出時鐘周期,最大時間不超過1ms),因而在CMD0發(fā)送之前等待80個時鐘時鐘周期;由于CMD0沒有返回值,因而在命令發(fā)送完成后需要等待至少8個輸出時鐘周期,進(jìn)入CRESET_SDAPPCMD狀態(tài),發(fā)送CMD55命令,如果接收到響應(yīng),則表示SD卡連接在卡槽上,進(jìn)入CRESET_SDOPCOND狀態(tài),繼續(xù)完成ACMD41命令的發(fā)送,倘若命令發(fā)送超時,說明卡槽中連接的是MMC卡,進(jìn)入CRESET_MMC狀態(tài)發(fā)送CMD1命令;對ACMD41或者CMD1在命令線上返回的OCR寄存器值,如果包含Busy位(置0),表示顯示卡仍然在上電啟動或者重啟過程,還沒有為后面的初始化準(zhǔn)備好通信,需要重新發(fā)送命令,直到Busy位被清除(置1),進(jìn)入READY狀態(tài)。

對于單張卡,上電啟動過程的最大周期不可以超過1s,所以當(dāng)命令返回錯誤的時間或者Busy未被清除的時間超過1s時,則判定啟動過程失敗,進(jìn)入IDLE狀態(tài)并且顯示Boot_error;在READY狀態(tài)發(fā)送CMD2命令,獲取存儲卡的CID信息,之后進(jìn)入IDENT狀態(tài),針對已經(jīng)判定的存儲卡類型,對SD存儲卡發(fā)送CMD3命令獲取RCA,對MMC存儲卡則通過CMD3命令指定RCA;當(dāng)完成CMD3的發(fā)送后,狀態(tài)機(jī)進(jìn)入STANDBY狀態(tài),此時可以更新輸出時鐘,使存儲卡工作于更高的工作頻率,并發(fā)送CMD7命令將存儲卡的狀態(tài)由等待(stand_by)轉(zhuǎn)換到傳輸(transfer);在TRANS狀態(tài),設(shè)置SD/MMC控制器的發(fā)送FIFO和接收FIFO閾值、發(fā)送數(shù)據(jù)的大小,并發(fā)送CMD17及CMD12用于傳輸4K數(shù)據(jù),如果數(shù)據(jù)傳輸過程中出現(xiàn)數(shù)據(jù)CRC校驗(yàn)錯誤或讀數(shù)據(jù)超時,將會顯示Boot_error。


表1    SD/MMC啟動控制器的發(fā)送命令

整個啟動過程中涉及到的SD/MMC命令如表1所示。

圖4     軟件啟動流程


啟動方案的軟件流程

方案的軟件啟動流程如圖4所示,在SD/MMC控制器完成數(shù)據(jù)的載入之后,CPU核獲得AMBA總線的控制權(quán),開始執(zhí)行啟動程序。首先在零地址讀取中斷向量異常表,顯示切換到SVC模式,這時應(yīng)該禁止所有中斷,包括中斷控制器的IRQ和FIQ中斷,以及屏蔽CPU核中的中斷使能位。由于啟動數(shù)據(jù)載入之后,SD/MMC控制器和DMA控制器會指示出相應(yīng)中斷狀態(tài),此時應(yīng)先清除中斷狀態(tài),再配置PMU和EMI控制器,使系統(tǒng)切換到正常工作狀態(tài)。此時可以從SD/MMC存儲器將體積更大的可執(zhí)行鏡像文件載入到速度和容量更大的DDRAM中,配置重映射寄存器之后,在新的存儲介質(zhì)DDRAM中運(yùn)行可執(zhí)行文件。


仿真結(jié)果及FPGA驗(yàn)證

用RTL級的Verilog HDL實(shí)現(xiàn)硬件代碼,并完成啟動軟件的設(shè)計后,采用兩種方式對設(shè)計進(jìn)行了功能和時序的驗(yàn)證。一是使用Synopsys公司的EDA工具VCS進(jìn)行了模擬測試,二是在FPGA上進(jìn)行物理驗(yàn)證測試。

圖5    硬件初始化及數(shù)據(jù)載入仿真波形圖


軟件模擬

進(jìn)行模擬時,采用系統(tǒng)級仿真,通過加載可執(zhí)行的二進(jìn)制代碼,仿真整個系統(tǒng)啟動過程的實(shí)際環(huán)境。由于受仿真模型的限制,在測試過程中需要將可執(zhí)行的代碼寫入SD/MMC Model,然后重新啟動系統(tǒng)。在重置RESET信號的同時,更改系統(tǒng)啟動模式,如圖5所示, 在15000000ns時刻,系統(tǒng)重置,SD/MMC啟動控制器在完成對卡的初始化之后,在18000000ns時,DMA開始數(shù)據(jù)載入。

圖6    軟件啟動仿真波形圖

圖6所示,在30400000ns,數(shù)據(jù)傳輸完成,AMBA的控制權(quán)由DMA(圖6中hgrant_m8)轉(zhuǎn)交給CPU內(nèi)核(圖6中hgrant_m1),在完成系統(tǒng)的初始化配置之后,再次從SD/MMC存儲器中讀出可執(zhí)行的工程鏡像或內(nèi)核操作代碼。由仿真波形可見,模擬結(jié)果正確,滿足設(shè)計要求。


物理驗(yàn)證

受實(shí)驗(yàn)條件所限,在FPGA驗(yàn)證過程中采用Altera公司Nios II嵌入式處理器,通過Avalon-AHB模塊將處理器接口的Avalon總線信號轉(zhuǎn)換到AHB總線,盡可能保證物理實(shí)驗(yàn)與仿真環(huán)境的一致性。去掉功耗控制器而簡單的采用PLL倍頻提供系統(tǒng)時鐘,另外由于EMI控制模塊涉及到FPGA中不可實(shí)現(xiàn)的專用時鐘電路,因而實(shí)驗(yàn)中省略了外部存儲器模塊和地址重映射過程,主要側(cè)重于數(shù)據(jù)傳輸和Boot Loader的驗(yàn)證。

圖7     FPGA驗(yàn)證平臺構(gòu)架框圖

FPGA驗(yàn)證平臺采用Altera Stratix II FPGA和外接SD/MMC卡槽,存儲卡采用Kingston公司的SD卡和Kingmax公司的MMC卡,如圖7所示。采用Synplify Pro綜合,Quartus II 作為下載工具。
表2      Quartus綜合報告

表2所示,原始控制器中增加SD/MMC啟動控制器所占用的資源不超過20%,即可獲得一種高效的啟動方式。

FPGA調(diào)試中采用8MHz系統(tǒng)時鐘,在9ms內(nèi)完成載入4KB啟動代碼,通過向監(jiān)視寄存器中寫入標(biāo)志位,判定系統(tǒng)啟動負(fù)載過程運(yùn)行正常,通過對比載入前后的啟動代碼,可以判定整個硬件啟動代碼載入正確。通過FPGA板級硬件調(diào)試證明,設(shè)計啟動方案功能正確,驗(yàn)證結(jié)果滿足設(shè)計需求。


結(jié)語

通過軟件仿真和FPGA驗(yàn)證,基于SD/MMC單一存儲器的啟動方案能夠正確的實(shí)現(xiàn)代碼載入和程序啟動,啟動速度和效率都能滿足工程需求,在SoC中實(shí)現(xiàn)了低成本、高效率的直接啟動。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多