• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Davinci平臺下大頁面NAND Flash上的系統(tǒng)構(gòu)建問題

      2011-01-22 03:35:42唐建兵吳仲光
      關(guān)鍵詞:存儲設(shè)備校驗時鐘

      唐建兵,吳仲光,肖 煬

      (四川大學(xué) 計算機學(xué)院,四川 成都 610065)

      Davinci平臺下大頁面NAND Flash上的系統(tǒng)構(gòu)建問題

      唐建兵,吳仲光,肖 煬

      (四川大學(xué) 計算機學(xué)院,四川 成都 610065)

      以TI公司新一代Davinci TMS320DM6446嵌入式處理器為例,詳細描述了在NAND Flash上構(gòu)建嵌入式Linux操作系統(tǒng)的一般方法。結(jié)合Sumsang公司的K9K8G08U0A大頁面NAND Flash,給出了引導(dǎo)程序的移植、燒寫的具體設(shè)計及實現(xiàn)過程,提供基于大頁面NAND Flash作為唯一外部存儲設(shè)備的穩(wěn)定、可靠的解決方案 。為新一代Davinci系列處理器的配置、使用提供了參考。

      Davinci;NAND Flash;大頁面;引導(dǎo)程序;Linux

      達芬奇(Davinci)系列嵌入式處理器是 TI公司的具有高速處理能力的新一代嵌入式設(shè)備[1],它同時具備了DSP和精簡指令級計算機技術(shù)的優(yōu)點。它集成了一個高性能的DSP核心與一個ARM9內(nèi)核,被廣泛應(yīng)用于嵌入式圖片、視頻處理中[2]。在 Davinci平臺下,通常以ARM核為基礎(chǔ)構(gòu)建嵌入式操作系統(tǒng),但是目前經(jīng)常采用一片NOR Flash加上一片NAND Flash作為外部存儲設(shè)備,并且通常都是 256 B/頁或者 512 B/頁的小頁面 NAND Flash,本文旨在只以一片2 KB/頁的大頁面NAND Flash(Samsung K9K8G08U0A)作為外部存儲設(shè)備、Davinci TMS-320DM6446作為處理器的硬件結(jié)構(gòu)下,闡述構(gòu)建穩(wěn)定可靠的系統(tǒng)需要解決的問題。

      1 問題概述

      EMIF是用來連接Flash、SRAM等多種存儲設(shè)備的外設(shè)端口。TMS320DM6446的EMIF端口支持每路32 MB總共4路可尋址的片選空間,支持8 bit以及16 bit的數(shù)據(jù)總線寬度,具有可編程的建立、選通以及保持時間,還具備NAND Flash ECC校驗數(shù)據(jù)生成功能等[5],因此可以方便靈活地與外部NAND Flash芯片通信。在本文的硬件系統(tǒng)中,即采用TMS320DM6446的EMIF的CS2空間與Samsung K9K8G08U0A NAND Flash相連。

      由于本系統(tǒng)只有一片NAND Flash作為外部的存儲設(shè)備,因此所有的引導(dǎo)程序、操作系統(tǒng)內(nèi)核以及根文件系統(tǒng)均需要存儲在這上面,系統(tǒng)也就需要從NAND Flash啟動。TMS320DM6446具有多種啟動方式,具體由哪種方式啟動,由系統(tǒng)復(fù)位時引腳 BTSEL[1:0]電平?jīng)Q定,當(dāng)BTSEL[1:0]被置為“01”時,TMS320DM6446 的 ARM 核從EMIFA的EM_CS2存儲空間開始執(zhí)行(地址為0x0200 0000),這種情況下EMIF連接的是具有線性地址的非易失存儲器,通常是 NOR Flash。 當(dāng) BTSEL[1:0]不為“01”時,TMS-320DM6446內(nèi)部的 ROM BOOT LOADER(簡稱 RBL)開始運行,RBL再根據(jù)BTSEL[1:0]的不同值決定從何處加載用戶的引導(dǎo)程序 UBL(USER BOOT LOADER)。當(dāng)BTSEL[1:0]為“00”時,RBL將從連接到 EMIF的 CS2空間的NAND Flash中加載UBL。由于RBL的加載過程是將UBL拷貝到ARM的內(nèi)部RAM中,因此對于UBL的大小限制在14 KB以內(nèi),但是在嵌入式環(huán)境常用的U-BOOT、ViVi等的大小都遠超過這個限制,因此需要多級加載,一級引導(dǎo)程序主要做系統(tǒng)的初始化,然后將二級引導(dǎo)程序(在本系統(tǒng)中采用U-BOOT,本文后面提到的UBL均指一級引導(dǎo)程序)從NAND Flash中讀取到RAM中,然后啟動它,由U-BOOT負責(zé)操作系統(tǒng)的引導(dǎo)[4]。于是整個NAND Flash上系統(tǒng)構(gòu)建的關(guān)鍵問題包括如何移植UBL,以使其能夠正常初始化系統(tǒng),正常加載二級引導(dǎo)程序U-BOOT到RAM中,U-BOOT的移植使其滿足大頁面NAND Flash的讀寫要求以及裸機時引導(dǎo)程序的燒寫。

      2 UBL移植

      UBL為TI公司提供的對于Davinci系列處理器通過內(nèi)部的ROM BOOT LOADER啟動時的一級引導(dǎo)程序。其工作流程如圖1所示。

      圖1 UBL流程圖

      UBL的移植主要針對本系統(tǒng)中硬件板的結(jié)構(gòu)修改系統(tǒng)初始化過程以及增加對Samsung K9K8G08U0A NAND Flash的支持,以下分別闡述。

      2.1 系統(tǒng)初始化

      2.1.1 設(shè)置CPU、DDR工作頻率

      TMS320DM6446具有兩路PLL,其中PLL1通過分頻供系統(tǒng)的主時鐘及大部分外設(shè)的時鐘,PLL2供DDR2使用。DSP 時鐘頻率為SYSCLK1=27 MHz×(PLL1_PLLM+1),使用固定一分頻,本系統(tǒng)中DSP工作在正常頻率594 MHz,因此需設(shè)置PLL1_PLLM=21,即設(shè)置寄存器0x1C4 0910為21。

      本系統(tǒng)使用兩片K4T1G164QQ-HCE6 DDR2 SDRAM作為系統(tǒng)內(nèi)存,該芯片為DDR2 667芯片,時鐘頻率為333 MHz。TMS320DM6446中 DDR2使用 PLL2的 PLLDIV2分頻作為時鐘頻率,計算公式為(27 MHz×(PLL2_PLLM+1))/(PLL2_PLLDIV2→RATIO+1)。因此設(shè)置PLL2_PLLM=23,PLL2_PLLDIV2→RATIO=1,PLL2_PLLDIV2 的第 15 位為分頻允許位,應(yīng)置為 1,所以 PLL2_PLLDIV2為0x8001,即寄存器 0x1C4 0D10=23,0x1C4 0D1C=0x8001。

      2.1.2 配置EMIF接口

      根據(jù)Samsung K9K8G08U0A NAND Flash的讀、寫時序要求,TMS320DM6446的 EMIF用于與 NAND Flash連接時,配置寄存器各字段值需滿足如下要求:

      其中tSU是EMIF數(shù)據(jù)建立時間,取值5 ns,tH數(shù)據(jù)保持時間取 0,EMFI時鐘為系統(tǒng) 6分頻,所以 tcyc=1/(27×(21+1)/6)≈10 ns,根據(jù) EMIF連接 NAND的取值要求,設(shè)置EMIF CS2的配置寄存器值為0x842429c。

      2.2 支持Samsung K9K8G08U0A NAND Flash

      UBL通過數(shù)據(jù)結(jié)構(gòu)struct_NAND_DEV_STRUCT_來表示一個型號的 NAND Flash,具有 devID、numBlocks、pagesPerBlock、bytesPerPage幾個字段。通過 struct_NAND_DEV_STRUCT_類型的數(shù)組gNandDevInfo[]來記錄所有支持的NAND Flash。UBL在從NAND Flash讀取數(shù)據(jù)之前,首先通過讀取設(shè)備號命令0x90得到NAND Flash的設(shè)備號,然后從數(shù)組gNandDevInfo[]中查找具有相同設(shè)備號的記錄,從而得到NAND Flash的詳細信息,以確定NAND Flash的讀方式。

      因此,需要 UBL支持特定的 NAND Flash,只需要將其信息添加到數(shù)組gNandDevInfo[]中即可。本系統(tǒng)中用到的 Samsung K9K8G08U0A NAND Flash設(shè)備號為 0xD3,具有8 192個存儲塊,每個塊具有64個頁面,每頁具有2 048 B數(shù)據(jù)存儲區(qū)域以及64 B的Spare區(qū)域,在數(shù)組gNandDevInfo[]中添加{0xD3,8192,64,2048+64}即可。

      3 U-BOOT移植

      本系統(tǒng)中使用的U-BOOT引導(dǎo)程序由TI公司提供的支持Davinci平臺以及NAND Flash啟動的U-BOOT1.1.3移植而來。

      3.1 NAND Flash讀寫時序

      U-BOOT1.1.3不支持 2 KB/page的大頁面 Flash,因此移植過程主要是增加NAND Flash的讀寫、擦除。2 KB頁面NAND Flash與普通讀寫擦除最主要的區(qū)別在于地址構(gòu)成不同,本系統(tǒng)中用到的Samsung K9K8G08U0A NAND Flash總共存儲空間 1 GB=230,每頁大小為 2 KB=211,因此總的地址長度 30 bit,從 A0~A29,頁地址長度為11 bit,從 A0~A10,本系統(tǒng)采用 8 bit的地址數(shù)據(jù)寬度連接NAND Flash,頁地址和塊地址需要分不同的地址周期,因此NAND的地址需要5個周期送出,前兩個周期為頁地址,依次為地址的 A0~A7、A8~A10,后三個周期為塊地址,依次為地址的 A11~A18、A19~A26、A27~A29,頁地址和塊地址的最后一個周期不足8位,不足的高位均為 0。

      Samsung K9K8G08U0A的讀過程如下:寫0x00命令、分5個周期寫地址、寫0x30命令、讀數(shù)據(jù)、根據(jù)讀出的數(shù)據(jù)生成ECC校驗數(shù)據(jù)、生成的ECC數(shù)據(jù)與讀出的ECC數(shù)據(jù)比對以確定數(shù)據(jù)是否有誤以及能否校正。

      寫過程如下:寫0x80命令、分5個地址周期寫地址、送出數(shù)據(jù)(包括ECC校驗數(shù)據(jù))、寫 0x10命令、讀取狀態(tài)直到busy信號無效、檢查是否出現(xiàn)寫錯誤。

      擦除過程如下:寫0x60命令、分三個地址周期寫塊地址、寫0xD0命令、讀取狀態(tài)直到busy信號無效、檢查是否出現(xiàn)擦除錯誤。

      3.2 YAFFS2文件系統(tǒng)燒寫

      YAFFS2鏡像燒寫與U-BOOT下普通寫NAND Flash區(qū)別在于spare區(qū)域的數(shù)據(jù)不需要程序根據(jù)數(shù)據(jù)存儲區(qū)的數(shù)據(jù)生成,spare區(qū)域的數(shù)據(jù)在制作YAFFS2鏡像時,已經(jīng)由鏡像制作工具生成并寫入了鏡像文件。因此在nand命令的write中增加.yaffs2選項,當(dāng)使用nand write.yaffs2命令時,直接從指定地址中讀出2 048 B/頁數(shù)據(jù)以及數(shù)據(jù)后緊跟的64 B的spare區(qū)域數(shù)據(jù),并將其寫入NAND Flash中。

      U-BOOT在Flash的讀寫過程中需要檢查壞塊情況,在開始讀寫每個塊的時候首先檢查該塊第一頁以及第二頁的spare區(qū)域的第一個數(shù)據(jù)是否為0xFF,如果不為0xFF則當(dāng)前塊為壞塊,需要跳過它。

      4 燒寫程序

      在UBL以及U-BOOT被固化進NAND Flash之前,系統(tǒng)處于裸機狀態(tài),無法正常引導(dǎo)操作系統(tǒng),燒寫程序的作用是在裸機狀態(tài)下借助仿真器的作用,將UBL以及U-BOOT燒寫到NAND Flash正確位置的。

      前面已經(jīng)提到,本系統(tǒng)采用的Samsung K9K8G08U0A NAND Flash具有8 192個存儲塊(block)。這 8 192個塊按照如下分配其使用方式:第0塊在出廠時確保不是壞塊,用作整個NAND Flash的壞塊信息存儲;第1~3塊存儲 UBL;第 4~7塊存儲 U-BOOT;第 8塊存儲 U-BOOT環(huán)境變量;第 9~40塊存儲 Linux操作系統(tǒng)內(nèi)核;第 41~8 191塊存儲YAFFS2文件系統(tǒng)。

      實際中,UBL和U-BOOT都只需要占用一個存儲塊的存儲空間,由于考慮到NAND Flash可能有壞塊的存在,于是在設(shè)計燒寫程序時,為UBL增加了2個冗余塊,為U-BOOT增加了3個冗余塊,以確保系統(tǒng)穩(wěn)定可靠地從NAND Flash上啟動。

      燒寫程序是系統(tǒng)在沒有任何程序的裸機情況下執(zhí)行的,燒寫程序需要通過仿真器加載到系統(tǒng)目標(biāo)板的DDR2中運行。由于加載程序時系統(tǒng)未執(zhí)行任何程序,也就沒有做任何初始化,DDR2也處于不可用狀態(tài),系統(tǒng)將無法加載程序。TI的CCS集成環(huán)境提供了GEL文件來解決這一問題,在仿真器連接目標(biāo)板時會自動執(zhí)行GEL文件中的 OnTargetConnect()函數(shù),在該函數(shù)中,需要對系統(tǒng)做初始化。

      燒寫程序在被加載到內(nèi)存后,即可被執(zhí)行來完成UBL以及U-BOOT的燒寫,程序執(zhí)行過程如圖2所示。

      圖2 燒寫程序流程圖

      數(shù)據(jù)寫入時需要注意UBL是由TMS320DM6446內(nèi)部的ROM BOOT LOADER讀入到內(nèi)部RAM中然后執(zhí)行的,因此,燒寫程序?qū)τ贓CC校驗數(shù)據(jù)的生成以及ECC數(shù)據(jù)在spare區(qū)域的存儲位置必須要與ROM BOOT LOADER讀取數(shù)據(jù)時的校驗方式一致。ROM BOOT LOADER采用EMIF的硬件ECC校驗,每512 B的數(shù)據(jù)產(chǎn)生4 B的校驗數(shù)據(jù),并按照如下方式存儲:spare區(qū)域地址從0x00到0x3F,其中0x08-0x0B存儲第1個512 B數(shù)據(jù)的第3-0位ECC數(shù)據(jù),0x18-0x1B存儲第2個512 B數(shù)據(jù)的第3-0位ECC數(shù)據(jù),0x28-0x2B存儲第3個512 B數(shù)據(jù)的第3-0位ECC數(shù)據(jù),0x38-0x3B存儲第 4個512 B數(shù)據(jù)的第3-0位ECC數(shù)據(jù)。因此,在燒寫程序中也使用EMIF硬件ECC校驗來生成校驗數(shù)據(jù),在每次寫入數(shù)據(jù)達到512 B時,通過讀寄存器NANDF1ECC(地址為0x0200 0070)來獲得ECC值,最后在一頁數(shù)據(jù)寫入完畢后寫入到spare區(qū)域的對應(yīng)位置。

      在UBL以及U_BOOT成功燒寫到NAND Flash后,系統(tǒng)上電,U_BOOT成功執(zhí)行,通過U_BOOT將Linux操作系統(tǒng)內(nèi)核以及YAFFS2文件系統(tǒng)鏡像燒寫到NAND Flash,設(shè)置 U_BOOT環(huán)境變量,再次引導(dǎo)系統(tǒng),Linux系統(tǒng)正常啟動。本系統(tǒng)中成功實現(xiàn)了從裸機到整個系統(tǒng)的構(gòu)建,解決了對大頁面NAND Flash的不支持,同時考慮了NAND Flash存在的壞塊情況,系統(tǒng)在實際使用中運行穩(wěn)定可靠。

      [1]TI Corporation.TMS320DM6446 Digital Media System-on-Chip[EB/OL].[2008-03-31].http://www.ti.com/lit/gpn/tms320dm6446.

      [2]TI Corporation.TMS320DM644x DMSoC ARM Subsystem Reference Guide[EB/OL].[2009-03-31].http://www.ti.com/litv/pdf/sprue14b.

      [3]TI Corporation.TMS320DM644x DMSoC Asynchronous External Memory Interface(EMIF)Reference Guide[EB/OL].[2009-02-24].http://www.ti.com/litv/pdf/sprue20c.

      [4]王化福,孫同景.從NAND Flash啟動嵌入式操作系統(tǒng)[J].可編程控制器與工廠自動化,2009(5):79-80.

      [5]Samsung Corporation.K9XXG08UXA Flash Memory[S],2006.

      Key issues of system construction on large page NAND Flash based on Davinci

      Tang Jianbing,Wu Zhongguang,Xiao Yang

      (Department of Computer,Sichuan University,Chengdu 610065,China)

      Take TI′s next-generation Davinci TMS320DM6446 embedded processor as an example,the general method of build embedded Linux operating system on NAND Flash is described in detail.Combined with Samsung′s K9K8G08U0A large page NAND Flash,the specific design and implementation process of boot transplant and programming is given,stable and reliable solution based on large page NAND Flash as only external storage device is given.It provide reference for configuration and use of the new generation processors of Davinci family.

      Davinci;NAND Flash;large page;Boot Loader;Linux

      TP368.33

      A

      1674-7720(2011)02-0103-03

      2010-08-19)

      唐建兵,男,1986年生,在讀碩士研究生,主要研究方向:嵌入式系統(tǒng)、計算機網(wǎng)絡(luò)與通信。

      吳仲光,男,1953年生,副教授,碩士,主要研究方向:光機電一體化、嵌入式系統(tǒng)架構(gòu)、計算機網(wǎng)絡(luò)與通信。

      肖煬,男,1982年生,碩士,主要研究方向:電路系統(tǒng)。

      猜你喜歡
      存儲設(shè)備校驗時鐘
      別樣的“時鐘”
      古代的時鐘
      爐溫均勻性校驗在鑄鍛企業(yè)的應(yīng)用
      有趣的時鐘
      Windows 7下USB存儲設(shè)備接入痕跡的證據(jù)提取
      基于Flash芯片的新型存儲設(shè)備數(shù)據(jù)恢復(fù)技術(shù)研究
      時鐘會開“花”
      大型電動機高阻抗差動保護穩(wěn)定校驗研究
      電測與儀表(2015年1期)2015-04-09 12:03:02
      基于加窗插值FFT的PMU校驗方法
      鍋爐安全閥在線校驗不確定度評定
      通榆县| 临猗县| 临泽县| 当雄县| 盐池县| 乡城县| 甘孜| 洛南县| 河曲县| 曲靖市| 独山县| 洪雅县| 桂平市| 绍兴县| 西畴县| 和静县| 泗阳县| 通河县| 庆元县| 阳曲县| 永顺县| 赤峰市| 正定县| 青州市| 霸州市| 抚宁县| 德保县| 合江县| 治多县| 曲阜市| 嵩明县| 河东区| 望都县| 高平市| 华亭县| 高清| 成安县| 凌海市| 福清市| 永修县| 高淳县|