nand flash烧录详解--希尔特烧录器

文章详细介绍了NANDFLASH编程器的操作界面、坏块处理方法(包括跳过坏块、硬拷贝和分区烧录)、配置项如UBAstartblk和ECC的使用,以及烧录过程中遇到的问题与解决方案,如烧录偏移和UBI文件系统挂载问题的排查。
摘要由CSDN通过智能技术生成

1.NAND FLASH编程器烧录软件概述。

选择好K9F1208U0B后,将出现下图(Figure 1)。

https://i-blog.csdnimg.cn/blog_migrate/92d44d90c6a26b8ab35faaf54e6eb752.png
Device Information中,提示(1)提供了该芯片使用何种适配器。提示(2)简明扼要的讲述了本软件支持坏块处理方法的种类和技术要点。
下图是主软件界面(Figure 2)

https://i-blog.csdnimg.cn/blog_migrate/8b3b87b090d37acbd2229a9061b48007.png

   在主软件界面中,提示1列出了NAND烧录拥有的正常操作, 从上到下包括:自动批处理(Auto),编程写入(Program),读出数据(Read),校验(Verify),空检查(Blank_Check),擦除(Erase),启动代码块检查(Boot Block Check)。
  其中自动批处理(Auto)必须在提示4(Edit Auto)中设置好才能运行。启动代码块检查(Boot Block Check)在提示2中设置启动代码所占块(Blocks)的范围。
  提示2(Dev.Config)是NAND Flash烧录的配置中心,坏块处理方法,ECC,设置烧录范围,启动代码范围等的设置都在这个选项里面。
  提示3是烧录软件的信息输出区,算法的有关信息,烧录过程的有关信息和烧录出错信息都在这个区域打印输出。

2.NAND Flash 的坏块和坏块标志。

   由于制造工艺的原因,NAND Flash 在生产过程中可能会产生坏块,坏块在出厂前将会被标记。对于坏块而言,存储的信息可能会丢失,不能正常使用。另外在NAND Flash擦除或者编程过程中,出现操作失败后,表示该块不能正常使用,也应标记成坏块。所以在一般情况下,在操作NAND Flash之前,先要检查一下要操作的是否是坏块,以免坏块标记被破坏。此外,为了保证存储信息的可靠性,从NAND Flash中读取的数据还可以引入ECC校验,ECC码一般存放在该页的spare区(一般spare存放OOB,OOB包含ECC)。关于ECC,详细介绍见下一章。
  小页模式的NAND Flash(8bit)的坏块标志(BM)一般放在每个block第一页和第二页的第6个字节。
  Spare区:

0

1

2

3

4

BM

6

7

8

9

10

11

12

13

14

15

   小页模式的NAND Flash(16bit)的坏块标志(BM)一般放在每个block第一页和第二页的第1个字(双字节)。

  Spare区:

BM

1

2

3

4

5

6

  大页模式的NAND Flash(8bit)的坏块标志(BM)一般放在每个block第一页和第二页的第1个字节(一般nand flash是这种)。

Spare区:

BM

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

  大页模式的NAND Flash(16bit)的坏块标志(BM)一般放在每个block第一页和第二页的第1个字(双字节)。
  Spare区:

BM

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

  一般情况下坏块标志(BM)处为0xFF或者0xFFFF表示好块,非0xFF或者0xFFFF代表坏块。
  小页模式的NAND Flash(8bit)的坏块标志(BM)处会出现下面的情况。我们在总结多个厂商的要求后也把它作为一种坏块标志进行了集成化处理。
   Spare区:

0

1

2

3

OEM
Reserved

BM

6

7

8

9

10

11

12

13

14

15

  其中OEM Reserved 标志:为OEM 系统保留块(比如NBOOT,TOC,EBOOT使用),一般可以对外界表示这段代码区为只读属性。
  BM标志:为0x00当前块为坏块,为0xFF, 当前块为好块,但如果此时的OEM Reserved标志处为设定的值的话,此处BM标志为0x00,在烧录过程中做好块。  

3.烧录器配置项解析

UBA start blk:表示从nand的何处偏移开始烧录,一般是从头开始烧录,所以是0值

Size of UBA blks:表示烧录的块的大小,一般软件会根据烧录文件自动计算

Boot start blk:表示boot区的偏移

Size of boot blks:表示boot区的大小

Boot check assert:表示是否使能boot区内坏块的检测。一般nand的前几个block都会做成没有坏块,用来存放boot。这个选项配合boot start blksizeof boot blks,可以检测选择区域里不能有坏块,有坏块则烧录失败。

EXCLUDE SPARE AREA:数据文件不包含spare区,默认不打勾,表示包含spare

Ondie-ECC:使能该选项表示使用nand自身的ECC,而disable该选项表示使用SOC中nand控制的ECC。

Bad block handle mode:包含三种烧录方式,下面详解。

4.常用的三种坏块处理方法

A) 跳过坏块 (Skip bad block)。

这是一种最常用的坏块处理方法。它的实现原理比较简单,顺序烧录,发现某一块为坏块后,将相应数据烧录到下有个好块,如果发现连续的坏块的话,也连续的跳过这些坏块,并把数据烧录的下一个出现的好块中。其原理如下图(Figure 5)。

https://i-blog.csdnimg.cn/blog_migrate/44255db520929fd1e07620e514ec31f8.png

  采用这种烧录方法,要关注提示2的设置,以便对NAND的存储区域进行更灵活的访问。
  其中UBA start blk(hex): 指定文件从那个块开始烧录,Size of UBA blks(hex): 的内容表示烧录的文件占用多少个好块,例如:烧录芯片K9F1208U0B,烧录的文件包含spare区的内容。烧录文件的大小为19M整,烧录的起始块为第0块。K9F1208U0B为小页模式的NAND,每个块包含spare区的大小为0x4200Bytes = 16896(dec)Bytes。那么要烧写的block = 19*1024*1024/16896 = 1179.15,取整为1180(dec) = 0x49C.所以UBA start blk(hex): 0000, Size of UBA blks(hex): 0x49C。
  注:如果小页模式不包含spare区的内容,则每个块的大小为0x4000Bytes. 大页模式包含spare区的内容,每个块的大小为0x21000Bytes,大页模式不包含spare区的内容,每个块的大小为0x20000.
  采用这种烧录方法的话,坏块标志位是不允许写成非“0xFF”或者“0xFFFF”(16bit),所以在缓冲区(buffer)中的数据,在烧录过程中,坏块标志为都被强制改写0xFF或者0xFFFF。 具有OEM Reserved值的情况下,如果坏块标志的处的值满足其判断要求,将不作强制修改。
B) 硬拷贝 (Hard Copy)。
  Hard Copy的方法在读写过程中,没有判断坏块,而是把它当成一般的Flash进行处理的。但在烧写过程,由于坏块的存在,导致对应的数据无法烧写进去,所以在一般情况下,我们不推荐使用这种方式烧写NANDFLASH。
  不过在读取芯片(母片)的时候,有时候我们并不清楚该芯片的坏块标志位是不是被改变,不清楚该芯片用的是什么坏块处理方法,我们还是推荐采用这种方法读芯片内容。这种方法可以读出芯片的完全内容,以便进行下一步分析,或者直接拷贝。在读取芯片完全内容时,例如读取芯片K9F1208U0B,该芯片共有4096(0x1000)个block。那么在器件配置字中要设置Size of UBA blks(hex) : 1000 。这样读取的时候就把所有块的内容读出来。
  用这种方法之间拷贝芯片的时候,要尽量确保目标的芯片是没有坏块的芯片,才能保证拷贝的成功率。

C)分区烧录(patition)

分区模式是由一张分区表对NAND进行定位烧写的。在烧录准备前,先要装载或编辑一张分区表

在分区表中,每16个字节代表一个分区,16个字节中的第1~4个字节表示该分区的起始块地址,第5~8个字节表示该分区的结束块地址,第9~12个字节表示该分区实际使用到的块大小,第13~16个字节为保留字节。当遍历到分区的起始块地址为FF FF FF FF时,遍历结束。当在烧录过程中遇到坏块时,按Skip Bad Block处理。

一般建议使用分区的烧录方式。

NAND FLASH编程器烧录详解_nand flash编程器烧写-CSDN博客

编程器烧写NAND flash的一些说明_大容量 nand flash 如何进行烧写-CSDN博客

5.烧录问题分享

问题一:烧录后kernel无法启动

将烧录后的kernel分区通过dd if=/dev/mtd5 of=kernel.bin分区获取kernel分区的数据,与原始烧录包对比,发现从nand flash dump出的数据前1个blcok全为0xff,经分析,问题原因为使用skip bad block的方式烧录,kernel分区前的某个位置出现坏块导致烧录出现偏移,才出现kernel分区的第一个block为0xff,如下图解释:

该问题可以通过patition的方式进行烧录解决。

问题二:烧录后ubi文件系统无法正常挂载(分区方式烧录)

  1. 首先确认制作的ubi文件系统是否正确
  1. 确认原始ubi文件系统无误

通过nand erase offset size;nand write addr offset size命令将原始镜像升级到nand中,看是否能正常挂载使用

  1. 确认原始ubi文件系统添加了oob后生成镜像无误

通过nand erase offset size;nand write.raw addr offset size命令将原始镜像升级到nand中,看是否能正常挂载使用

  1. 确认nand flash中的数据状况,可通过dd命令将ubi分区数据dump出来与原始镜像对比,注意dump时需要保证没有进行过操作过,例如:ubiattach等命令。
  2. 确认分区表的制作是否正确

本次问题就是分区表制作有误,ubi文件分区的起始与偏移都是对的,但是ubi分区实际的size制作有误,比实际的镜像size小,导致没有将ubi文件系统镜像完全烧录,才出现挂载不上的问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值