NandFlash驅(qū)動(dòng)超詳細(xì)分析_第1頁(yè)
NandFlash驅(qū)動(dòng)超詳細(xì)分析_第2頁(yè)
NandFlash驅(qū)動(dòng)超詳細(xì)分析_第3頁(yè)
NandFlash驅(qū)動(dòng)超詳細(xì)分析_第4頁(yè)
NandFlash驅(qū)動(dòng)超詳細(xì)分析_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、今天學(xué)習(xí)了 NandFlash 的驅(qū)動(dòng),硬件操作非常簡(jiǎn)單, 就是這個(gè) linux 下的驅(qū)動(dòng)比 較復(fù)雜,主要還是MTCg的問題,用了一下午時(shí)間整理出來一份詳細(xì)的分析,只是分析函數(shù)結(jié)構(gòu)和調(diào)用關(guān)系,具體代碼實(shí)現(xiàn)就不看了,里面有N個(gè)結(jié)構(gòu)體,搞得 我頭大。我用 linux2.6.25 內(nèi)核, 2440 板子,先從啟動(dòng)信息入手。內(nèi)核啟動(dòng)信息,NANDFE分:S3C24XX NAND Driver, (c) 2004 Simtec Electronicss3c2440-nand s3c2440-nand: Tacls=2, 20ns Twrph0=3 30ns, Twrph1=2 20ns NANDdevi

2、ce: Manufacturer ID: 0xec, Chip ID: 0x76 (SamsungNAND64MiB 3,3V 8-bit)Scanning device for bad blocksCreating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":0x00000000-0x00040000 : "boot"0x0004c000-0x0024c000 : "kernel"0x0024c000-0x03ffc000 : "yaffs2"第一行,在 driver/

3、mtd/nand/s3c2410.c 中第 910 行, s3c2410_nand_init 函數(shù): printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronicsn");行二行,同一文件,第 212 行, s3c2410_nand_inithw 函數(shù): dev_info(info->device, "Tacls=%d, %dnsTwrph0=%d%dns, Twrph1=%d%dnsn", tacls, to_ns(tacls, clkrate), twrph0, to_ns(twrph0, cl

4、krate), twrph1,to_ns(twrph1, clkrate);第三行,在 driver/mtd/nand/nand_base.c 中第 2346 行, printk(KERN_INFO "NAND device: Manufacturer ID:" " 0x%02x, Chip ID: 0x%02x (%s %s)n", *maf_id, dev_id, nand_manuf_idsmaf_, type->name);第四行,在 driver/mtd/nand/nand_bbt.c 中第 380 行, creat_bb

5、t 函數(shù): Printk(KERN INFO " Scanning device for bad blocks n");第五行,在 driver/mtd/mtdpart.c 中第 340 行, add_mtd_partitions 函數(shù): printk (KERN_NOTICE "Creating %d MTD partitions on "%s":n", nbparts, master->name);下面三行,是 flash 分區(qū)表,也在 mtdpart.c 同一函數(shù)中,第 430 行:printk (KERN_NOTICE

6、"0x%08x-0x%08x : "%s"n", slave->offset, slave->offset + slave->mtd.size, slave->);MTD體系結(jié)構(gòu):在 linux 中提供了 M T D( M emory Technology Device ,內(nèi)存技術(shù)設(shè)備)系統(tǒng)來建 立 Flash 針對(duì) linux 的統(tǒng)一、抽象的接口引入MTD后,linux系統(tǒng)中的Flash設(shè)備驅(qū)動(dòng)及接口可分為4層: 設(shè)備節(jié)點(diǎn)MTC設(shè)備層MTD原始設(shè)備層 硬件驅(qū)動(dòng)層硬件驅(qū)動(dòng)層:Flash硬件驅(qū)動(dòng)層負(fù)責(zé)底層硬件設(shè)備實(shí)際

7、的讀、寫、擦除,Linux MTD設(shè)備的NAN理Flash驅(qū)動(dòng)位于driver/mtd/nand 子目錄下s3c2410 對(duì)應(yīng)的 nand Flash 驅(qū)動(dòng)為 s3c2410.cMTD原始設(shè)備層:MTD®始設(shè)備層由兩部分構(gòu)成,一部分是 MTDM始設(shè)備的通用 代碼,另一部分是各個(gè)特定 Flash 的數(shù)據(jù),比如分區(qū) 主要構(gòu)成的文件有:drivers/mtd/mtdcore.c支持 mtd 字符設(shè)備driver/mtd/mtdpart.c支持 mtd 塊設(shè)備MTC設(shè)備層:基于MTD原始設(shè)備,Linux系統(tǒng)可以定義出MTD勺塊設(shè)備(主設(shè)備 號(hào)31)和字符設(shè)備(設(shè)備號(hào)90),構(gòu)成MTD設(shè)備層s

8、truct nand_oobinfo oobinfo; /oob 大小簡(jiǎn)單的說就是:使用一個(gè)mtd層來作為具體的硬件設(shè)備驅(qū)動(dòng)和上層文件系統(tǒng)的橋 梁。mtd給出了系統(tǒng)中所有 mtd設(shè)備(nand,nor,diskonchip )的統(tǒng)一組織方 式。u_char type;/MTD設(shè)備類型u_int32_t flags;/MTD設(shè)備屬性標(biāo)志u_int32_t size;/標(biāo)示了這個(gè)mtd設(shè)備的大小u_int32_t erasesize; /MTD設(shè)備的擦除單元大小,對(duì)于 NandFlash 來說就是 Block 的大小u_int32_t oobblock; /oob區(qū)在頁(yè)內(nèi)的位置,對(duì)于 512 字節(jié)

9、一頁(yè)的 nand來說是 512u_int32_t oobsize;/oob區(qū)的大小,對(duì)于512字節(jié)一頁(yè)的nand來說是16u_int32_t ecctype;/ecc校驗(yàn)類型u_int32_t eccsize;/ecc的大小char *name;/設(shè)備的名字int index;/設(shè)備在MTD列表中的位置mtd 層用一個(gè)數(shù)組 struct mtd_info *mtd_tableMAX_MTD_DEVICES 保存系統(tǒng)中 所有的設(shè)備,mtd設(shè)備利用struct mtd_info這個(gè)結(jié)構(gòu)來描述,該結(jié)構(gòu)中描述了 存儲(chǔ)設(shè)備的基本信息和具體操作所需要的內(nèi)核函數(shù),mtd系統(tǒng)的那個(gè)機(jī)制主要就 是圍繞這個(gè)結(jié)構(gòu)來

10、實(shí)現(xiàn)的。結(jié)構(gòu)體在 include/linux/mtd/mtd.h 中定義: struct mtd_info 區(qū)的信息,包括是否使用 ecc, ecc 的/以下是關(guān)于 mtd的一些讀寫函數(shù),將在 nand_base中的nand_scan中重載 int (*erase)int (*read)int (*write)int (*read_ecc)int (*write_ecc)int (*read_oob)int (*read_oob)void *priv;設(shè)備私有數(shù)據(jù)指針,對(duì)于 NandFlash來說指nand芯片的結(jié)構(gòu)下面看 nand_chip 結(jié)構(gòu),在 include/linux/mtd/na

11、nd.h 中定義: struct nand_chip void _iomem *IO_ADDR_R; / 這是 nandflash 的讀寫寄存器void _iomem*IO_ADDR_W;/ 以下都是 nandflash 的操作函數(shù),這些函數(shù)將根據(jù)相應(yīng)的配置進(jìn)行重載u_char (*read_byte)(struct mtd_info *mtd);void (*write_byte)(struct mtd_info *mtd, u_char byte);u16(*read_word)(struct mtd_info *mtd);void(*write_word)(struct mtd_info

12、 *mtd, u16 word);void (*write_buf)(structmtd_info *mtd, const u_char *buf, int len);void (*read_buf)(struct mtd_info *mtd, u_char *buf, int len);int (*verify_buf)(structmtd_info *mtd, const u_char *buf, int len);void (*select_chip)(struct mtd_info *mtd, int chip);int (*block_bad)(struct mtd_info *mt

13、d, loff_t ofs, int getchip);int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);void (*hwcontrol)(struct mtd_info *mtd, int cmd);int (*dev_ready)(struct mtd_info *mtd);void (*cmdfunc)(structmtd_info *mtd, unsigned command,int column,int page_addr);int (*waitfunc)(struct mtd_info *mtd, struct nand

14、_chip *this, intstate);int (*calculate_ecc)(structmtd_info *mtd, const u_char *dat, u_char*ecc_code);int (*correct_data)(struct mtd_info *mtd, u_char *dat, u_char*read_ecc, u_char *calc_ecc);void (*enable_hwecc)(struct mtd_info *mtd, int mode);inteccmode;/eccintchip_delay;/intpage_shift;/int (*scan_

15、bbt)(struct mtd_info *mtd);void (*erase_cmd)(struct mtd_info *mtd, int page);的校驗(yàn)?zāi)J剑ㄜ浖布┬酒瑫r(shí)序延遲參數(shù)頁(yè)偏移,對(duì)于512B/頁(yè)的,一般是9u_char *data_buf; / 數(shù)據(jù)緩存區(qū)跟nanD操作相關(guān)的函數(shù):1、nand_base.c :定義了 NANtB動(dòng)中對(duì)NAND芯片最基本的操作函數(shù)和操作流程,如擦除、讀寫 page、讀寫oob等。當(dāng)然這些函數(shù)都只是進(jìn)行一些常規(guī)的操作,若你的系統(tǒng)在對(duì)NAND操作時(shí)有一些特殊的動(dòng)作,則需要在你自己的驅(qū)動(dòng)代碼中進(jìn)行定義。2、nand_bbt.c :定義了 NAN

16、驅(qū)區(qū)動(dòng)中與壞塊管理有關(guān)的函數(shù)和結(jié)構(gòu)體。3、nand_ids.c :定義了兩個(gè)全局類型的結(jié)構(gòu)體: struct nand_flash_dev nand_flash_ids 和 struct nand_manufacturers nand_manuf_ids 。其中前者定義了一些 NAND 芯片的類型,后者定義了 NAND)芯片的幾個(gè)廠商。NAN芯片的ID至少包含兩項(xiàng) 內(nèi)容:廠商ID和廠商為自己的NAND芯片定義的芯片ID。當(dāng)NAND加載時(shí)會(huì)找這 兩個(gè)結(jié)構(gòu)體,讀出ID,如果找不到,就會(huì)加載失敗。4、nand_ecc.c :定義了 NAN驅(qū)動(dòng)中與softeware ECC有關(guān)的函數(shù)和結(jié)構(gòu)體,若你的系

17、統(tǒng)支持 hardware ECC,且不需要software ECC,則該文件也不需理會(huì)。我們需要關(guān)心的是 /nand/s3c2410, 這個(gè)文件實(shí)現(xiàn)的是 s3c2410/2440nandflash 控制器最基本的硬件操作,讀寫擦除操作由上層函數(shù)完成。s3c2410.c 分析:首先看一下要用到的結(jié)構(gòu)體的注冊(cè):struct s3c2410_nand_mtd struct mtd_infomtd; /mtd_info 的結(jié)構(gòu)體struct nand_chipchip; /nand_chip 的結(jié)構(gòu)體struct s3c2410_nand_set*set;struct s3c2410_nand_inf

18、o *info;intscan_res;enum s3c_cpu_type / 用來枚舉 CPU類型TYPE_S3C2410,TYPE_S3C2412,TYPE_S3C2440,;struct s3c2410_nand_info /* mtd info */struct nand_hw_controlcontroller;struct s3c2410_nand_mtd*mtds;struct s3c2410_platform_nand *platform;/* device info */ struct device struct resource struct clk*device;*are

19、a;*clk;*regs;*sel_reg;void _iomem void _iomemintsel_bit;intmtd_count;unsigned long save_nfconf; enum s3c_cpu_typecpu_type;設(shè)備的注冊(cè):static int _init s3c2410_nand_init(void)printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronicsn");platform_driver_register(&s3c2412_nand_driver);platform_dr

20、iver_register(&s3c2440_nand_driver);return platform_driver_register(&s3c2410_nand_driver);platform_driver_register 向內(nèi)核注冊(cè)設(shè)備,同時(shí)支持這三種 CPU。&s3c2440_nand_driver 是一個(gè) platform_driver 類型的結(jié)構(gòu)體:static struct platform_driver s3c2440_nand_driver = .probe= s3c2440_nand_probe,.remove= s3c2410_nand_remo

21、ve,.suspend = s3c24xx_nand_suspend, .resume= s3c24xx_nand_resume,.driver= .name= "s3c2440-nand",.owner = THIS_MODULE, ,;最主要的函數(shù)就是 s3c2440_nand_probe,(調(diào)用 s3c24XX_nand_probe),完成對(duì) nand 設(shè)備的探測(cè),static int s3c24xx_nand_probe(struct platform_device *pdev, enum s3c_cpu_type cpu_type)/* 主要完成一些硬件的初始化,

22、其中調(diào)用函數(shù): */ s3c2410_nand_init_chip (info, nmtd, sets);/*init_chip 結(jié)束后,調(diào)用 nand_scan 完成對(duì) flash 的探測(cè)及 mtd_info 讀寫函數(shù)的賦值 */nmtd->scan_res = nand_scan(&nmtd->mtd, (sets) ? sets->nr_chips : 1);if (nmtd->scan_res = 0) s3c2410_nand_add_partition (info, nmtd, sets);Nand_scan是在初始化nand的時(shí)候?qū)and進(jìn)行的一

23、步非常好重要的操作,在 nand_scan中會(huì)對(duì)我們所寫的關(guān)于特定芯片的讀寫函數(shù)重載到nand_chip結(jié)構(gòu)中去,并會(huì)將mtd_info結(jié)構(gòu)體中的函數(shù)用nand的函數(shù)來重載,實(shí)現(xiàn)了 mtd到底層 驅(qū)動(dòng)的聯(lián)系。并且在nand_scan函數(shù)中會(huì)通過讀取nand芯片的設(shè)備號(hào)和廠家號(hào)自動(dòng)在芯片列 表中尋找相應(yīng)的型號(hào)和參數(shù),并將其注冊(cè)進(jìn)去。static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, struct s3c2410_nand_mtd *nmtd, struct s3c2410_nand_set *set)struct

24、nand_chip *chip = &nmtd->chip;void _iomem *regs = info->regs;/* 以下都是對(duì) chip 賦值,對(duì)應(yīng) nand_chip 中的函數(shù)*/chip->write_buf = s3c2410_nand_write_buf; /寫 bufchip->read_buf = s3c2410_nand_read_buf; /讀 bufchip->select_chip = s3c2410_nand_select_chip;/片選chip->chip_delay = 50;chip->priv = n

25、mtd;chip->options = 0;chip->controller = &info->controller; /?switch (info->cpu_type) case TYPE_S3C2440:chip->IO_ADDR_W = regs + S3C2440_NFDATA; / 數(shù)據(jù)寄存器 info->sel_reg = regs + S3C2440_NFCONT; / 控制寄存器 info->sel_bit = S3C2440_NFCONT_nFCE;chip->cmd_ctrl = s3c2440_nand_hwcont

26、rol; /硬件控制chip->dev_ready = s3c2440_nand_devready; /設(shè)備就緒chip->read_buf = s3c2440_nand_read_buf; /讀 bufchip->write_buf = s3c2440_nand_write_buf;/ 寫 buf break;chip->IO_ADDR_R = chip->IO_ADDR_W; / 讀寫寄存器都是同一個(gè) nmtd->info = info;nmtd->mtd.priv= chip; / 私有數(shù)據(jù)指針指向 chipnmtd->mtd.owner

27、= THIS_MODULE;nmtd->set = set;/*后面是和ECC校驗(yàn)有關(guān)的,省略*/初始化后,實(shí)現(xiàn)對(duì) nand 的基本硬件操作就可以了,包括以下函數(shù): s3c2410_nand_inithw / 初始化硬件,在 probe 中調(diào)用 s3c2410_nand_select_chip / 片選s3c2440_nand_hwcontrol / 硬件控制,其實(shí)就是片選 s3c2440_nand_devready / 設(shè)備就緒s3c2440_nand_enable_hwecc / 使能硬件 ECC校驗(yàn) s3c2440_nand_calculate_ecc / 計(jì)算 ECC s3c24

28、40_nand_read_buf s3c2440_nand_write_buf注冊(cè)nand設(shè)備到MTD原始設(shè)備層:(這個(gè)函數(shù)由 probe調(diào)用)#ifdef CONFIG_MTD_PARTITIONS / 如果定義了 MTD分區(qū)static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info, struct s3c2410_nand_mtd *mtd, struct s3c2410_nand_set *set)if (set = NULL)return add_mtd_device(&mtd->mtd);if

29、 (set->nr_partitions > 0 && set->partitions != NULL) return add_mtd_partitions(&mtd->mtd, set->partitions, set->nr_partitions);return add_mtd_device(&mtd->mtd);#else注冊(cè)設(shè)備用這兩個(gè)函數(shù):add_mtd_device / 如果 nand 整體不分區(qū),用這個(gè),/ 該函數(shù)在 mtdcore.c 中實(shí)現(xiàn)add_mtd_partitions / 如果 nand 是分區(qū)

30、結(jié)構(gòu),用這個(gè),/ 該函數(shù)在 mtdpart.c 中實(shí)現(xiàn) 同樣,注銷設(shè)備也有兩個(gè)函數(shù):del_mtd_devicedel_mtd_partitionsNandFlash 還有一個(gè)分區(qū)表結(jié)構(gòu)體, mtd_partition ,這個(gè)是在 arch/arm/plat-s3c24XX/common-smdk.c 中定義的。static struct mtd_partition smdk_default_nand_part = 0 = .name = "boot",.size = 0x00040000,.offset = 0,1 = .name = "kernel"

31、,.offset = 0x0004C000,.size = 0x00200000,2 = .name = "yaffs2",.offset = 0x0024C000,.size = 0x03DB0000,;記錄了當(dāng)前的 nand flash 有幾個(gè)分區(qū),每個(gè)分區(qū)的名字,大小,偏移量是多少 系統(tǒng)就是依靠這些分區(qū)表找到各個(gè)文件系統(tǒng)的這些分區(qū)表 nand 中的文件系統(tǒng)沒有必然關(guān)系,分區(qū)表只是把 flash 分成不同的 部分 如果自己編寫一個(gè) nandflash 驅(qū)動(dòng),只需要填充這三個(gè)結(jié)構(gòu)體:Mtd_info nand_chip mtd_partition 并實(shí)現(xiàn)對(duì)物理設(shè)備的控制,

32、上層的驅(qū)動(dòng)控制已由 mtd 做好了,不需要關(guān)心2410NandFlash 控制器管腳配置D7:0: DATA0-7 數(shù)據(jù)/ 命令/地址/ 的輸入/輸出口(與數(shù)據(jù)總線共享)CLE : GPA17 命令鎖存使能 ( 輸出 )ALE : GPA18 地址鎖存使能(輸出)nFCE : GPA22 NAND Flash 片選使能(輸出)nFRE : GPA20 NAND Flash 讀使能 ( 輸出 )nFWE : GPA19 NAND Flash 寫使能 ( 輸出)R/nB : GPA21 NAND Flash 準(zhǔn)備好/ 繁忙(輸入) 相關(guān)寄存器:NFCONF Na ndFlash控制寄存器15Nan

33、dFlash 控制器使能 /禁止 0 = 禁止 1 = 使能 14:13保留12初始化ECC解碼器/編碼器 0 = 不初始化1 = 初始化 11 芯片使能 nFCE 控制 0 = 使能 1 = 禁止 10:8 TACLS 持續(xù)時(shí)間 = HCLK* (TACLS+)16:4 TWRPH02:0 TWRPH1NFCMD 命令設(shè)置寄存器7:0 命令值NFADDR地址設(shè)置寄存器 7:0 存儲(chǔ)器地址NFDATA數(shù)據(jù)寄存器7:0 存放數(shù)據(jù)NFSTAT犬態(tài)寄存器0 0 = 存儲(chǔ)器忙 1 = 存儲(chǔ)器準(zhǔn)備好NFECC EC(寄 存器23: 16 ECC校驗(yàn)碼 215: 8 ECC校驗(yàn)碼 18: 0 ECC 校驗(yàn)

34、碼 0寫操作: 寫入操作以頁(yè)為單位。寫入必須在擦除之后,否則寫入將出錯(cuò)。 頁(yè)寫入周期中包括以下步驟:寫入串行數(shù)據(jù)輸入指令(80h)。然后寫入4個(gè)字節(jié)的地址,最后串行寫入數(shù)據(jù)( 52 8Byte ) 。串行寫入的數(shù)據(jù)最多為 528byte 。串行數(shù)據(jù)寫入完成后,需要寫入“頁(yè)寫入確認(rèn)”指令10h,這條指令將初始化器件內(nèi)部寫入操作。10h 寫入之后, nand flash 的內(nèi)部寫控制器將自動(dòng)執(zhí)行內(nèi)部寫入和校驗(yàn)中必要的 算法和時(shí)序,系統(tǒng)可以通過檢測(cè)R/B的輸出,或讀狀態(tài)寄存器的狀態(tài)位(I/O 6 )來判斷內(nèi)部 寫入是否結(jié)束擦除操作:擦除操作時(shí)以塊 (16K Byte) 為單位進(jìn)行的擦除的啟動(dòng)指令為6

35、0h,隨后的3個(gè)時(shí)鐘周期是塊地址。其中只有 A14到A25是 有效的,而A9到A13是可以忽略的。塊地址之后是擦除確認(rèn)指令D0h,用來開始內(nèi)部的擦除操作。器件檢測(cè)到擦除確認(rèn)命令后,在/WE的上升沿啟動(dòng)內(nèi)部寫控制器,開始執(zhí)行擦除 和擦除校驗(yàn)。內(nèi)部擦除操作完成后,應(yīng)該檢測(cè)寫狀態(tài)位( I/O 0 ),從而了解擦 除操作是否成功完成。讀操作 有兩種讀模式:讀方式 1 用于讀正常數(shù)據(jù);讀方式 2 用于讀附加數(shù)據(jù) 在初始上電時(shí),器件進(jìn)入缺省的“讀方式 1 模式”。在這一模式下,頁(yè)讀取操作 通過將00h指令寫入指令寄存器,接著寫入3個(gè)地址(一個(gè)列地址和2個(gè)行地址) 來啟動(dòng)。一旦頁(yè)讀指令被器件鎖存,下面的頁(yè)操

36、作就不需要再重復(fù)寫入指令了。 寫入指令和地址后,處理器可以通過對(duì)信號(hào)線 R/B 的分析來判斷該才作是否完 成。外部控制器可以再以50ns為周期的連續(xù)/RE脈沖信號(hào)的控制下,從I/O 口依次 讀出數(shù)據(jù)備用區(qū)域的從 512到 527地址的數(shù)據(jù),可以通過讀方式 2指令進(jìn)行指令進(jìn)行讀取 (命令為50h)。地址A0A3設(shè)置了備用區(qū)域的起始地址,A4A7被忽略掉時(shí)序要求: 寫地址、數(shù)據(jù)、命令時(shí),nCE nWE言號(hào)必須為低電平,它們?cè)趎WE言號(hào)的上升 沿被鎖存。命令鎖存使能信號(hào)CLE和地址鎖存信號(hào)ALE用來區(qū)分I/O引腳上傳輸 的是命令還是地址。尋址方式:NAND Flash的尋址方式和 NAND Flas

37、h的memory組織方式緊密相關(guān)。NAND Flash的數(shù)據(jù)以bit的方式保存在 memory cell,個(gè)cell中只能存儲(chǔ)一個(gè) bit。這 些cell以8個(gè)或者16個(gè)為單位,連成 bit line,形成byte(x8)/word(x16),這就是 NAND 的數(shù)據(jù)寬度。這些Line會(huì)再組成Page典型情況下:通常是528Byte/page或者 264Word/pageb 然后,每 32 個(gè) page形成一個(gè) Block,Sizeof(block)=16.5kByte。 其中528Byte = 512Byte+16Byte,前512Byte為數(shù)據(jù)區(qū),后16Byte存放數(shù)據(jù)校驗(yàn) 碼等,因此習(xí)慣

38、上人們稱1page有512個(gè)字節(jié),每個(gè)Block有16Kbytes;現(xiàn)在在一些大容量的 FLASH 存貯設(shè)備中也采用以下配置: 2112 Byte /page 或 1056 Word/page; 64page/Block; Sizeof(block) = 132kByte;同上:2112 = 2048 +64,人們習(xí)慣稱一頁(yè)含 2k 個(gè)字節(jié),一個(gè) Block 含有 64個(gè)頁(yè),容量為 128KB;Block是NAND Flash中最大的操作單元,擦除可以按照block或page為單 位完成,而編程/讀取是按照page為單位完成的。所以,按照這樣的組織方式可以形成所謂的三類地址:-Block Address 塊地址-Page Address 頁(yè)地址-Column Address 列地址首先,必須清楚一點(diǎn),對(duì)于 NAND Flash 來講,地址和命令只能在 I

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論