《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Davinci平臺下大頁面NAND Flash上的系統構建問題
Davinci平臺下大頁面NAND Flash上的系統構建問題
來源:微型機與應用2011年第2期
唐建兵,吳仲光,肖 煬
(四川大學 計算機學院,四川 成都610065)
摘要: 以TI公司新一代Davinci TMS320DM6446嵌入式處理器為例,詳細描述了在NAND Flash上構建嵌入式Linux操作系統的一般方法。結合Sumsang公司的K9K8G08U0A大頁面NAND Flash,給出了引導程序的移植、燒寫的具體設計及實現過程,提供基于大頁面NAND Flash作為唯一外部存儲設備的穩定、可靠的解決方案 。為新一代Davinci系列處理器的配置、使用提供了參考。
Abstract:
Key words :

摘  要: 以TI公司新一代Davinci TMS320DM6446嵌入式處理器為例,詳細描述了在NAND Flash上構建嵌入式Linux操作系統的一般方法。結合Sumsang公司的K9K8G08U0A大頁面NAND Flash,給出了引導程序的移植、燒寫的具體設計及實現過程,提供基于大頁面NAND Flash作為唯一外部存儲設備的穩定、可靠的解決方案 。為新一代Davinci系列處理器的配置、使用提供了參考。
關鍵詞: Davinci;NAND Flash;大頁面;引導程序;Linux

    達芬奇(Davinci)系列嵌入式處理器是TI公司的具有高速處理能力的新一代嵌入式設備[1],它同時具備了DSP和精簡指令級計算機技術的優點。它集成了一個高性能的DSP核心與一個ARM9內核,被廣泛應用于嵌入式圖片、視頻處理中[2]。在Davinci平臺下,通常以ARM核為基礎構建嵌入式操作系統,但是目前經常采用一片NOR Flash加上一片NAND Flash作為外部存儲設備,并且通常都是256 B/頁或者512 B/頁的小頁面NAND Flash,本文旨在只以一片2 KB/頁的大頁面NAND Flash(Samsung K9K8G08U0A)作為外部存儲設備、Davinci TMS320DM6446作為處理器的硬件結構下,闡述構建穩定可靠的系統需要解決的問題。
1 問題概述
    EMIF是用來連接Flash、SRAM等多種存儲設備的外設端口。TMS320DM6446的EMIF端口支持每路32 MB總共4路可尋址的片選空間,支持8 bit以及16 bit的數據總線寬度,具有可編程的建立、選通以及保持時間,還具備NAND Flash ECC校驗數據生成功能等[5],因此可以方便靈活地與外部NAND Flash芯片通信。在本文的硬件系統中,即采用TMS320DM6446的EMIF的CS2空間與Samsung K9K8G08U0A NAND Flash相連。
    由于本系統只有一片NAND Flash作為外部的存儲設備,因此所有的引導程序、操作系統內核以及根文件系統均需要存儲在這上面,系統也就需要從NAND Flash啟動。TMS320DM6446具有多種啟動方式,具體由哪種方式啟動,由系統復位時引腳BTSEL[1:0]電平決定,當BTSEL[1:0]被置為“01”時,TMS320DM6446的ARM核從EMIFA的EM_CS2存儲空間開始執行(地址為0x0200 0000),這種情況下EMIF連接的是具有線性地址的非易失存儲器,通常是NOR Flash。當BTSEL[1:0]不為“01”時,TMS320DM6446內部的ROM BOOT LOADER(簡稱RBL)開始運行,RBL再根據BTSEL[1:0]的不同值決定從何處加載用戶的引導程序UBL(USER BOOT LOADER)。當BTSEL[1:0]為“00”時,RBL將從連接到EMIF的CS2空間的NAND Flash中加載UBL。由于RBL的加載過程是將UBL拷貝到ARM的內部RAM中,因此對于UBL的大小限制在14 KB以內,但是在嵌入式環境常用的U-BOOT、ViVi等的大小都遠超過這個限制,因此需要多級加載,一級引導程序主要做系統的初始化,然后將二級引導程序(在本系統中采用U-BOOT,本文后面提到的UBL均指一級引導程序)從NAND Flash中讀取到RAM中,然后啟動它,由U-BOOT負責操作系統的引導[4]。于是整個NAND Flash上系統構建的關鍵問題包括如何移植UBL,以使其能夠正常初始化系統,正常加載二級引導程序U-BOOT到RAM中,U-BOOT的移植使其滿足大頁面NAND Flash的讀寫要求以及裸機時引導程序的燒寫。
2 UBL移植
    UBL為TI公司提供的對于Davinci系列處理器通過內部的ROM BOOT LOADER啟動時的一級引導程序。其工作流程如圖1所示。

    UBL的移植主要針對本系統中硬件板的結構修改系統初始化過程以及增加對Samsung K9K8G08U0A NAND Flash的支持,以下分別闡述。
2.1 系統初始化
2.1.1 設置CPU、DDR工作頻率

    TMS320DM6446具有兩路PLL,其中PLL1通過分頻供系統的主時鐘及大部分外設的時鐘,PLL2供DDR2使用。DSP時鐘頻率為SYSCLK1=27 MHz×(PLL1_PLLM+1),使用固定一分頻,本系統中DSP工作在正常頻率594 MHz,因此需設置PLL1_PLLM=21,即設置寄存器0x1C4 0910為21。
    本系統使用兩片K4T1G164QQ-HCE6 DDR2 SDRAM作為系統內存,該芯片為DDR2 667芯片,時鐘頻率為333 MHz。TMS320DM6446中DDR2使用PLL2的PLLDIV2分頻作為時鐘頻率,計算公式為(27 MHz×(PLL2_PLLM+1))/(PLL2_PLLDIV2→RATIO+1)。因此設置PLL2_PLLM=23,PLL2_PLLDIV2→RATIO=1,PLL2_PLLDIV2的第15位為分頻允許位,應置為1,所以PLL2_PLLDIV2為0x8001,即寄存器0x1C4 0D10=23,0x1C4 0D1C=0x8001。
2.1.2 配置EMIF接口
    根據Samsung K9K8G08U0A NAND Flash的讀、寫時序要求,TMS320DM6446的EMIF用于與NAND Flash連接時,配置寄存器各字段值需滿足如下要求:
RSETUP≥tCLR(m)/tCYC-1=0
RSTORBE≥max((tREA(m)+tSU)/tCYC,tRP(m)/tcyc)-1=1.5
R_SETUP+R_STROBE≥(tCEA(m)+tSU)/tcyc-1=2
R_HOLD≥(tH-tCHZ(m))/tcyc-1=-4
R_SETUP+R_STROBE+R_HOLD≥tRC(m)/tcyc-3=-0.5
TA≥max((tCHZ(m))/tcyc,(tRHZ(m)-(R_HOLD+1)tcyc)/(tcyc))-1≥2
W_SETUP≥max(tCLS(m)/tcyc,tALS(m)/tcyc,(tCS(m)/tcyc)-1=1
W_STROBE≥tWP(m)/tcyc-1=0.2
W_SETUP+W_STROBE≥tDS(m)/tcyc-1=0.2
W_HOLD≥max((tCLH(m))/(tcyc),(tALH(m))/tcyc,(tCH(m))/(tcyc),(tDH(m))/(tcyc))-1=-0.5
W_SETUP+W_STROBE+W_HOLD≥tWC(m)/(tcyc)-3=-0.5
其中tSU是EMIF數據建立時間,取值5 ns,tH數據保持時間取0,EMFI時鐘為系統6分頻,所以tcyc=1/(27×(21+1)/6)≈10 ns,根據EMIF連接NAND的取值要求,設置EMIF CS2的配置寄存器值為0x842429c。
2.2 支持Samsung K9K8G08U0A NAND Flash
    UBL通過數據結構struct _NAND_DEV_STRUCT_來表示一個型號的NAND Flash,具有devID、numBlocks、pagesPerBlock、bytesPerPage幾個字段。通過struct _NAND_
DEV_STRUCT_類型的數組gNandDevInfo[]來記錄所有支持的NAND Flash。UBL在從NAND Flash讀取數據之前,首先通過讀取設備號命令0x90得到NAND Flash的設備號,然后從數組gNandDevInfo[]中查找具有相同設備號的記錄,從而得到NAND Flash的詳細信息,以確定NAND Flash的讀方式。
    因此,需要UBL支持特定的NAND Flash,只需要將其信息添加到數組gNandDevInfo[]中即可。本系統中用到的Samsung K9K8G08U0A NAND Flash設備號為0xD3,具有8 192個存儲塊,每個塊具有64個頁面,每頁具有2 048 B數據存儲區域以及64 B的Spare區域,在數組gNandDevInfo[]中添加{0xD3,8192,64,2048+64}即可。
3 U-BOOT移植
    本系統中使用的U-BOOT引導程序由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與普通讀寫擦除最主要的區別在于地址構成不同,本系統中用到的Samsung K9K8G08U0A NAND Flash總共存儲空間1 GB=230,每頁大小為2 KB=211,因此總的地址長度30 bit,從A0~A29,頁地址長度為11 bit,從A0~A10,本系統采用8 bit的地址數據寬度連接NAND Flash,頁地址和塊地址需要分不同的地址周期,因此NAND的地址需要5個周期送出,前兩個周期為頁地址,依次為地址的A0~A7、A8~A10,后三個周期為塊地址,依次為地址的A11~A18、A19~A26、A27~A29,頁地址和塊地址的最后一個周期不足8位,不足的高位均為0。
    Samsung K9K8G08U0A的讀過程如下:寫0x00命令、分5個周期寫地址、寫0x30命令、讀數據、根據讀出的數據生成ECC校驗數據、生成的ECC數據與讀出的ECC數據比對以確定數據是否有誤以及能否校正。
    寫過程如下:寫0x80命令、分5個地址周期寫地址、送出數據(包括ECC校驗數據)、寫0x10命令、讀取狀態直到busy信號無效、檢查是否出現寫錯誤。
    擦除過程如下:寫0x60命令、分三個地址周期寫塊地址、寫0xD0命令、讀取狀態直到busy信號無效、檢查是否出現擦除錯誤。
3.2 YAFFS2文件系統燒寫
    YAFFS2鏡像燒寫與U-BOOT下普通寫NAND Flash區別在于spare區域的數據不需要程序根據數據存儲區的數據生成,spare區域的數據在制作YAFFS2鏡像時,已經由鏡像制作工具生成并寫入了鏡像文件。因此在nand命令的write中增加.yaffs2選項,當使用nand write.yaffs2命令時,直接從指定地址中讀出2 048 B/頁數據以及數據后緊跟的64 B的spare區域數據,并將其寫入NAND Flash中。
    U-BOOT在Flash的讀寫過程中需要檢查壞塊情況,在開始讀寫每個塊的時候首先檢查該塊第一頁以及第二頁的spare區域的第一個數據是否為0xFF,如果不為0xFF則當前塊為壞塊,需要跳過它。
4 燒寫程序
    在UBL以及U-BOOT被固化進NAND Flash之前,系統處于裸機狀態,無法正常引導操作系統,燒寫程序的作用是在裸機狀態下借助仿真器的作用,將UBL以及U-BOOT燒寫到NAND Flash正確位置的。
    前面已經提到,本系統采用的Samsung K9K8G08U0A NAND Flash具有8 192個存儲塊(block)。這8 192個塊按照如下分配其使用方式:第0塊在出廠時確保不是壞塊,用作整個NAND Flash的壞塊信息存儲;第1~3塊存儲UBL;第4~7塊存儲U-BOOT;第8塊存儲U-BOOT環境變量;第9~40塊存儲Linux操作系統內核;第41~8 191塊存儲YAFFS2文件系統。
    實際中,UBL和U-BOOT都只需要占用一個存儲塊的存儲空間,由于考慮到NAND Flash可能有壞塊的存在,于是在設計燒寫程序時,為UBL增加了2個冗余塊,為U-BOOT增加了3個冗余塊,以確保系統穩定可靠地從NAND Flash上啟動。
    燒寫程序是系統在沒有任何程序的裸機情況下執行的,燒寫程序需要通過仿真器加載到系統目標板的DDR2中運行。由于加載程序時系統未執行任何程序,也就沒有做任何初始化,DDR2也處于不可用狀態,系統將無法加載程序。TI的CCS集成環境提供了GEL文件來解決這一問題,在仿真器連接目標板時會自動執行GEL文件中的OnTargetConnect()函數,在該函數中,需要對系統做初始化。
    燒寫程序在被加載到內存后,即可被執行來完成UBL以及U-BOOT的燒寫,程序執行過程如圖2所示。

    數據寫入時需要注意UBL是由TMS320DM6446內部的ROM BOOT LOADER讀入到內部RAM中然后執行的,因此,燒寫程序對于ECC校驗數據的生成以及ECC數據在spare區域的存儲位置必須要與ROM BOOT LOADER讀取數據時的校驗方式一致。ROM BOOT LOADER采用EMIF的硬件ECC校驗,每512 B的數據產生4 B的校驗數據,并按照如下方式存儲:spare區域地址從0x00到0x3F,其中0x08-0x0B存儲第1個512 B數據的第3-0位ECC數據,0x18-0x1B存儲第2個512 B數據的第3-0位ECC數據,0x28-0x2B存儲第3個512 B數據的第3-0位ECC數據,0x38-0x3B存儲第4個512 B數據的第3-0位ECC數據。因此,在燒寫程序中也使用EMIF硬件ECC校驗來生成校驗數據,在每次寫入數據達到512 B時,通過讀寄存器NANDF1ECC(地址為0x0200 0070)來獲得ECC值,最后在一頁數據寫入完畢后寫入到spare區域的對應位置。
    在UBL以及U_BOOT成功燒寫到NAND Flash后,系統上電,U_BOOT成功執行,通過U_BOOT將Linux操作系統內核以及YAFFS2文件系統鏡像燒寫到NAND Flash,設置U_BOOT環境變量,再次引導系統,Linux系統正常啟動。本系統中成功實現了從裸機到整個系統的構建,解決了對大頁面NAND Flash的不支持,同時考慮了NAND Flash存在的壞塊情況,系統在實際使用中運行穩定可靠。
參考文獻
[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啟動嵌入式操作系統[J].可編程控制器與工廠自動化,2009(5):79-80.
[5] Samsung Corporation. K9XXG08UXA Flash Memory[S],2006.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美一区二区三区播放老司机 | 久久精品久久99精品久久| 亚洲人精品午夜在线观看| 国产区精品在线观看| 国产精品国产精品| 欧美日韩在线三级| 欧美乱人伦中文字幕在线| 久久综合精品国产一区二区三区| 久久高清国产| 欧美在线观看你懂的| 久久福利电影| 欧美在线观看一区二区| 午夜精品国产| 性欧美video另类hd性玩具| 亚洲欧美中文另类| 欧美一级大片在线观看| 欧美一区免费视频| 久久精品99无色码中文字幕| 欧美淫片网站| 久久aⅴ国产紧身牛仔裤| 欧美一区亚洲| 久久精品视频免费播放| 久久久www成人免费无遮挡大片| 午夜久久久久久久久久一区二区| 亚洲免费中文字幕| 西西人体一区二区| 久久成人精品视频| 久久夜精品va视频免费观看| 另类春色校园亚洲| 欧美暴力喷水在线| 欧美日韩国产91| 国产精品久久久久久久久久免费| 国产精品一区一区| 国语自产精品视频在线看抢先版结局 | 亚洲欧美视频| 午夜精品www| 久久精品视频免费| 欧美va亚洲va国产综合| 欧美日本视频在线| 国产精品一香蕉国产线看观看 | 欧美日韩午夜在线| 国产精品麻豆va在线播放| 国产精品视频yy9099| 国产综合色在线视频区| 亚洲国产精品t66y| 一本色道**综合亚洲精品蜜桃冫 | 亚洲欧美中文日韩在线| 久久久久久久高潮| 欧美电影免费观看| 欧美性做爰猛烈叫床潮| 国产精品综合视频| 一区二区亚洲欧洲国产日韩| 最新中文字幕亚洲| 亚洲伊人一本大道中文字幕| 久久国产欧美精品| 夜夜爽av福利精品导航| 香蕉成人伊视频在线观看| 久久婷婷色综合| 欧美日韩亚洲天堂| 韩日精品在线| 99re热精品| 亚洲电影av| 亚洲在线成人| 久久夜色精品一区| 欧美日韩亚洲另类| 国内久久婷婷综合| 亚洲婷婷综合色高清在线| 亚洲国产人成综合网站| 亚洲在线视频免费观看| 美女视频一区免费观看| 国产精品久久久久99| 亚洲大片一区二区三区| 亚洲综合色视频| 亚洲免费av观看| 久久精品电影| 欧美日韩一区二区在线视频 | 欧美一区二区精品| 99伊人成综合| 久久综合成人精品亚洲另类欧美| 欧美午夜视频| 1204国产成人精品视频| 亚洲一区制服诱惑| 一区二区三区三区在线| 久久综合网hezyo| 国产精品天天看| 亚洲美女精品成人在线视频| 久久精品av麻豆的观看方式| 午夜精品成人在线视频| 欧美精品一区在线| 国内精品免费在线观看| 亚洲小视频在线| 99热在线精品观看| 老司机精品久久| 国产精品夜夜嗨| 一区二区三区黄色| 在线综合视频| 欧美刺激午夜性久久久久久久| 国产一区二区三区丝袜 | 亚洲美女免费视频| 久热爱精品视频线路一| 国产欧美日韩视频| 在线一区二区三区四区| 一区二区av在线| 欧美成年人网站| 狠狠色伊人亚洲综合网站色| 亚洲自拍都市欧美小说| 亚洲影院色在线观看免费| 欧美理论电影在线播放| 亚洲狠狠丁香婷婷综合久久久| 久久成人av少妇免费| 欧美在线免费| 国产精品日韩久久久久| 一区二区日韩欧美| 亚洲一区二区网站| 欧美午夜在线一二页| 一本色道久久综合亚洲精品不 | 欧美激情一区二区三区不卡| 亚洲第一色中文字幕| 亚洲黄网站在线观看| 久久夜色精品国产噜噜av| 国产主播喷水一区二区| 欧美一级免费视频| 久久精品国产精品亚洲综合| 国产日韩精品视频一区| 午夜精品视频在线观看| 欧美综合二区| 国产在线观看91精品一区| 欧美一级黄色录像| 久久一区二区视频| 国自产拍偷拍福利精品免费一| 久久精品免费| 欧美va亚洲va香蕉在线| 亚洲精品看片| 韩国女主播一区二区三区| 午夜精品美女久久久久av福利| 欧美国产亚洲视频| 91久久中文字幕| 亚洲图片在线| 国产精品香蕉在线观看| 亚洲欧美日韩国产一区| 久久精品国产99国产精品澳门| 国内精品久久久久影院薰衣草| 亚洲国产精品ⅴa在线观看 | 国产精品青草久久| 香蕉久久夜色精品国产使用方法| 久久精品国产第一区二区三区最新章节 | 欧美高清成人| 一本一本a久久| 欧美一区二区三区视频免费播放 | 久久精品国产欧美亚洲人人爽| 老司机免费视频一区二区三区| 亚洲国产99| 一本色道久久99精品综合 | 久久精品人人做人人爽| 免费成人小视频| 日韩亚洲欧美成人一区| 亚久久调教视频| 伊人男人综合视频网| 一本综合精品| 国产精品无码永久免费888| 欧美在线看片| 欧美久久久久免费| 亚洲一区在线播放| 老司机aⅴ在线精品导航| 亚洲免费精品| 欧美在线视频观看| 尤物99国产成人精品视频| 一区二区日本视频| 国产日韩欧美综合在线| 亚洲一区二区三区午夜| 亚洲婷婷在线| 久久成人精品电影| 亚洲第一精品影视| 亚洲小说欧美另类社区| 国产丝袜一区二区三区| 亚洲欧洲精品一区| 国产精品第一页第二页第三页| 欧美一区二区三区四区在线观看地址| 欧美va亚洲va香蕉在线| 亚洲综合色网站| 欧美华人在线视频| 亚洲欧美日韩综合国产aⅴ| 美女图片一区二区| 亚洲香蕉在线观看| 免费成年人欧美视频| 亚洲影院色无极综合| 美女尤物久久精品| 亚洲一区二区黄色| 欧美成人精品一区二区三区| 亚洲一区二区三区在线播放| 欧美一区二区精品| 欧美日韩在线亚洲一区蜜芽| 久久精品噜噜噜成人av农村| 欧美色欧美亚洲高清在线视频| 欧美中文在线免费| 欧美午夜a级限制福利片| 久久精品欧美| 国产精品婷婷| 一区二区成人精品 | 亚洲欧美日韩精品久久亚洲区 |