www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]實驗目的:突破4KB的Steppingstone存儲空間限制,讀取NandFlash中4KB后的代碼實現“點燈大法”,借此掌握NandFlash的操作。實驗環(huán)境及說明:恒頤S3C2410開發(fā)板H2410。H2410核心板的NandFlash選用的是三星片上(SOP)K9

實驗目的:突破4KB的Steppingstone存儲空間限制,讀取NandFlash中4KB后的代碼實現“點燈大法”,借此掌握NandFlash的操作。

實驗環(huán)境及說明:恒頤S3C2410開發(fā)板H2410。H2410核心板的NandFlash選用的是三星片上(SOP)K9F1208U0M,該NandFlash容量為64MB。

實驗思路:開發(fā)板上電啟動后,自動將NandFlash開始的4K數據復制到SRAM中,然后跳轉到0地址開始執(zhí)行。然后初始化存儲控制器SDRAM,調用NandFlash讀函數操作把4KB后的點燈代碼復制到SDRAM中,跳到點燈代碼的入口點實現點燈操作。

知識掌握:NandFlash內部結構、命令字及存儲控制器
一、NandFlash內部結構
不同開發(fā)板使用的NandFlash的型號可能不一樣,本文只是以K9F1208U0M為例做個簡單介紹。引腳描述如下所示:

'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_af4843899d603e0.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_af4843899d603e0.jpg');" border="0">
NandFlash存儲單元結構圖如下所示:

'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_b53cf1b5e09813b.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_b53cf1b5e09813b.jpg');" border="0" width="700">
Device、 Block和Page之間的關系---1 Device = 4,096 Blocks = 4096*32 Pages = 128K Pages;1 Block = 32 Page;1 Page = 528 Byte = 512 Byte + 16 Byte。其中1 Page中包含有數據寄存器512 Byte和16 Byte的備用位用于ECC校驗存儲。所以有528 columns * 128K rows(Pages)。1 Page中的512 Byte的數據寄存器又分為兩個部分1st 256 Bytes和 2nd 256 Bytes。用于數據存儲的單元有 512 Bytes * 32 Pages * 4096 Blocks = 64 MB,用于ECC校驗單元有16 Bytes * 32 Pages * 4096 Blocks = 2MB 。
二、NandFlash命令字
操作NandFlash時,先傳輸命令,然后傳輸地址,最后進行數據的讀/寫。K9F1208U0M的命令字如下所示:

'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://img.21ic.com/21ic_pic/danpianji/73_67_9f90461920e6b01.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_9f90461920e6b01.jpg');" border="0" width="700">
由于尋址需要26bit的地址,該26bit地址通過四個周期發(fā)送到NandFlash,如下圖所示:

'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_e8c052eed36f8b9.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_e8c052eed36f8b9.jpg');" border="0">
Read 1操作:該操作是對512 Bytes * 32 Pages * 4096 Blocks = 64 M的數據寄存器進行尋址。第一個周期發(fā)送A7~A0的8bit Column地址,8bit的尋址范圍是0~255,只能對1st 256 Bytes部分進行尋址。00h命令是1st 256 Bytes部分尋址。當發(fā)送01h命令時,A8將會被置1,此時尋址范圍變成了256~511了,所以01h命令是對2nd 256 Bytes部分進行尋址。(*注意:A8在發(fā)送00h命令后被清0,在發(fā)送01h命令后被置1,并且在發(fā)送01h對2nd尋址完畢后,A8會自動清0,指 針會自動地指向1st);第二個周期的A9~A13的5bit是對Page進行尋址(因為1 Block = 32 Pages,5bit的尋址范圍是0~31,可以對1 Block里面的所有Page進行尋址)。A14~A25的12bit則是對Block進行尋址,12bit的尋址范圍是0~4095,對整個 Device的4096個Blocks進行尋址。Read 2操作:該操作是對16 Bytes * 32 Pages * 4096 Blocks =2MB的備用位(ECC)進行尋址。50h命令為Read2操作,對1 Page里面的后16 Byte尋址。這樣,通過四個周期的發(fā)送即可對整個Device的所有存儲單元進行尋址。
三、NandFlash存儲控制器
S3C2410 為簡化對NandFlash的操作,提供了一組NandFlash控制器來實現對K9F1208U0M命令字的操作,主要有配置寄存器NFCONF、控制 寄存器NFCONT、命令寄存器NFCMD、地址寄存器NFADDR、數據寄存器NFDATA和狀態(tài)寄存器NFSTAT。
★NFCONF被用來使 能/禁止NandFlash控制器、使能/禁止控制引腳信號nFCE、初始化ECC、設置NandFlash的時序參數。TACLS、TWRPH0、 TWRPH1---這三個參數控制著NandFlash信號線CLE/ALE與寫控制信號new的時序關系。根據NandFlash的Datasheet 中對其最小讀/寫/控制時間的要求,聯(lián)系HCLK實際取值一般為100MHz,可以設這三個參數分別為1:3:1個HCLK即可(貌似ViVi中是 1:3:1),這樣可以滿足其時序要求。
★NandFlash狀態(tài)寄存器NFSTAT。只用到最低位[0],0:busy;1:ready。
NandFlash 存儲控制器根據OM[1:0]位的取值可以工作在①自動啟動模式---OM[1:0]=00時,復位之后,NandFlash的最先4KB的代碼被復制到 Steppingstone中即內部4KB的SRAM。Steppingstone被映射為Bank0(nGS0),且CPU在此4KB內部SRAM中開 始執(zhí)行啟動代碼;②NandFlash模式。

示例代碼解析:
★head.S頭文件來設置SDRAM,設置SDRAM,將第二部分代碼復制到SDRAM,然后跳到SDRAM繼續(xù)執(zhí)行。
.equMEM_CTL_BASE, 0x48000000

.text
.global _start
_start:
bldisable_watch_dog @關門喂狗
blmem_control_setup @設置存儲控制器
ldr sp, =4096 @設置棧指針,以下C函數調用前需要設好棧
blnand_init@初始化NandFlash
@將NandFlash中地址4096開始的1024字節(jié)代碼(led.c編譯得到)復制到SDRAM中
ldrr0, =0x30000000@目標地址=0x30000000,SDRAM起始地址
movr1, #4096@源地址=4096,連接的時候led代碼在4096開始處
movr2, #1024@復制長度=1024,對于本實驗的led足夠
blnand_read@調用C函數nand_read
ldrlr, =halt_loop @設置返回地址
ldrsp, =0x34000000 @重新設置棧
ldrpc, =main @使用向pc賦值的方法進行跳轉到點燈代碼
halt_loop:
bhalt_loop
★nand.c文件實現NandFlash的初始化和數據讀取
#define BUSY1

typedef unsigned long S3C2410_REG32;//貌似此處定義為unsigned int反匯編結果一樣的,也沒問題。猜可能是ARM指令直接按32位存儲了吧,知道的可以和我說一下!

/* NandFlash結構體 */
typedef struct {
S3C2410_REG32 NFCONF;
......
S3C2410_REG32 NFECC;
}S3C2410_NAND;

static S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000;

/* 供外部調用的函數聲明 */
void nand_init(void);
void nand_read(unsigned char *buf, unsigned long start_addr, int size);

/* S3C2410的NandFlash處理函數聲明 */
static void s3c2410_nand_reset(void);
......
static unsigned char s3c2410_read_data();

/* S3C2410的NandFlash操作函數實現 */

/* 復位 */
static void s3c2410_nand_reset(void)
{
s3c2410_nand_select_chip();
s3c2410_write_cmd(0xff);//發(fā)命令字0xFF實現復位操作復位
s3c2410_wait_idle();
s3c2410_nand_deselect_chip();
}

/* 等待NandFlash就緒 */
static void s3c2410_wait_idle(void)
{
int i;
volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFSTAT;
while(!(*p & BUSY))
for(i=0; i<10; i++);
}

/* 發(fā)出片選信號 */
static void s3c2410_nand_select_chip(void)
{
int i;
s3c2410nand->NFCONF &= ~(1<<11);//對NFCONF的11位寫0,激活NandFlash
for(i=0; i<10; i++);
}

/* 取消片選信號 */
static void s3c2410_nand_deselect_chip(void)
{
s3c2410nand->NFCONF |= (1<<11);//對NFCONF的11位寫1,使NandFlash不活動
}

/* 發(fā)出命令 */
static void s3c2410_write_cmd(int cmd)
{
volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFCMD;
*p = cmd;
}

/* 發(fā)出地址 */
static void s3c2410_write_addr(unsigned int addr)
{
int i;
volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFADDR;

*p = addr & 0xff;
for(i=0; i<10; i++);
*p = (addr >> 9) & 0xff;
for(i=0; i<10; i++);
*p = (addr >> 17) & 0xff;
for(i=0; i<10; i++);
*p = (addr >> 25) & 0xff;
for(i=0; i<10; i++);
}

/* 讀取數據 */
static unsigned char s3c2410_read_data(void)
{
volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFDATA;
return *p;
}

//設置TACLS、TWRPH0、TWRPH1三者的值,貌似ViVi等代碼中TWRPH0設為3,不知這樣的好處,知道的可以告訴我!
#define TACLS 0
#define TWRPH02
#define TWRPH10
/* 初始化NandFlash */
void nand_init(void)
{
/* 使能NandFlash控制器, 初始化ECC, 禁止片選, 設置時序 */
s3c2410nand->NFCONF = (1<<15)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
/* 復位s3c2410 NandFlash */
s3c2410_nand_reset();
}

#define NAND_SECTOR_SIZE512
#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
/* 讀函數 */
void nand_read(unsigned char *buf, unsigned long start_addr, int size)
{
int i, j;

if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
return ;/* 地址或長度不對齊 */
}
/* 選中芯片 */
s3c2410_nand_select_chip();
for(i=start_addr; i < (start_addr + size);) {
/* 發(fā)出READ0命令 */
s3c2410_write_cmd(0);
/* 寫地址*/
s3c2410_write_addr(i);
/*等待*/
s3c2410_wait_idle();
for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
*buf = s3c2410_read_data();
buf++;
}
}
/* 取消片選信號 */
s3c2410_nand_deselect_chip();

return ;
};

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

關于使用燒錄器燒錄Nand Flash,一直都是很多用戶頭疼的難點,他們強調已經使用了正確的壞塊管理方案,也制定了規(guī)范的操作流程,但是燒錄的良品率還是無法提高,只能每天眼睜睜看著一盤盤&ldqu

關鍵字: nandflash 燒錄器

5月26日消息,據國外媒體報道,集邦咨詢半導體研究中心(DRAMeXchange)在周一發(fā)布的一份報告中稱,今年第一季度,三星在全球NAND Flash市場上的份額為33.3%,與前一季度相比,環(huán)比略

關鍵字: nandflash 三星 芯片

華為作為美光最大的客戶之一,美國將華為列入實體名單一事對美光產生了非常嚴重的影響,美光業(yè)績已經逐漸露出下滑趨勢,上周五美光股價大跌近7%,南亞科、華邦電、威剛等存儲器企業(yè)也紛紛走低。 近期DRAM及N

關鍵字: DRAM nandflash 美光 芯片

6月24日消息 日前全球第二大閃存供應商東芝位于日本三重縣的閃存工廠因地震遭遇斷電事故,雖然停電過程非常短,13分鐘之后就恢復供電了,但是工廠卻一直停產,直到21日上午才恢復,至少停工了5天時間。 根

關鍵字: nandflash 東芝 臺積電 芯片 閃存

Nandflash芯片以其高性價比,大存儲容量在電子產品中廣泛應用。但是,在此量大質優(yōu)的應用領域,很多客戶卻痛苦于批量質量問題:專用工具無法滿足量產,量產工具卻可能出現極大的不良品率,那么究竟要如何解決呢?

關鍵字: nandflash 芯片 燒錄技巧

一、 首先先來看看核心板的原理圖我們發(fā)現數據線才有8條,而并沒有地址信號,所以該8條線一定是可以傳數據,也可以傳地址。而地址線肯定又不夠,那么,地址肯定又是多次發(fā)出的。從datasheet可以看到它要發(fā)出5個周期的

關鍵字: nandflash ok6410 硬件

實驗目的:通過串口顯示輸入的電壓值及采集按下觸摸屏的(x,y)坐標值借此掌握S3C2410的ADC和觸摸屏的使用。實驗環(huán)境及說明:恒頤S3C2410開發(fā)板H2410。H24X0E擴展板上AIN0~AIN1輸出懸空,通過外...

關鍵字: adc 觸摸屏 arm開發(fā)

它包含7個文件:head.Sinit.cmain.cMakefilenand.cnand.lds我們之前的程序都是在nandflash的前4k放代碼,上電后自動拷貝到SRAM中,之后將SRAM中的代碼拷貝到SDRAM中。...

關鍵字: nandflash 裸機程序

注:此文為部分摘錄,并且在原文基礎上有改動link這幾天一直在摸索s3c2410的啟動過程,幾天的困惑終于在昨天晚上基本解決.下面詳細分析一下它的最前面的啟動過程.1.在板子上電的一開始,首先自動判斷是否是autoboo...

關鍵字: nandflash s3c2410 啟動過程
關閉