S3c2440 NandNor Falsh区别

xiaoxiao2021-02-28  83

Flash Rom 的种类

NOR FLASH 地址线和数据线分开,来了地址和控制信号,数据就出来。NAND Flash 地址线和数据线在一起,需要用程序来控制,才能出数据。 通俗的说,只给地址不行,要先命令,再给地址,才能读到 NAND 的数据,在一个总线完成的。 结论是: ARM 无法从 NAND 直接启动。除非装载完程序,才能使用 NAND Flash NAND FLASH 本身是连接到了控制器上而不是系统总线上。 CPU 启动后是要取指令执行的, 如果是 SROM、 NOR FLASH 等之类的, CPU 发个地址就可以取得指令并执行, NAND FLASH 不行,因为 NAND FLASH 是管脚复用,它有自己的一套时序,这样 CPU 无法取得可以执行的 代码,也就不能初始化系统了。NAND FLASH 是顺序存取设备,不能够被随机访问,程序就不能够分支或跳转,这样你如何 去设计程序。

在 2440 中为什么可以配置成从 Nand Flash 中启动程序?

在 S3C2440 上电后,Nand Flash 控制器会自动的把 Nand Flash 上的前 4K 数据搬移到 4K 内部 SRAM 中,(此内部 RAM 被称为 Steppingstone)并把 0x00000000 设置内部 RAM 的起始地 址,CPU 从内部 RAM 的 0x00000000 位置开始启动。这个过程不需要程序干涉。程序员需要完 成的工作,是把最核心的启动程序放在 Nand Flash 的前 4K 中,也就是说,你需要编写一个长度小 于 4K 的引导程序,作用是将主程序拷贝到 SDRAM 中运行

S3C2440 支持 Nor Flash 和 Nand Flash 启动,在 TQ2440 上可以通过跳线设置启动

OM[1:0]所决定的启动方式OM[1: 0]=00 时,处理器从 NAND Flash 启动OM[1: 0]=01 时,处理器从 16 位宽度的 ROM 启动OM[1: 0]=10 时,处理器从 32 位宽度的 ROM 启动。OM[1: 0]=11 时,处理器从 Test Mode 启动

**Arm 的启动都是从 0 地址开始,所不同的是地址的映射不一样。在 arm 开电的时候,要想 让 arm 知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这 时候你的程序还没启动,这时候 arm 会通过引脚的电平来判断**

当引脚 OM0 跟 OM1 有一个是高电平时,这时地址 0 会映射到外部 nGCS0 片选的空间 (Bank0),也就是 Norflash,程序就会从 Norflash 中启动, arm 直接取 Norflash 中的指令运 行。当 OM0 跟 OM1 都为低电平,则 0 地址内部 bootbuf(一段 4k 的 SRAM)开始。系统上 电, arm 会自动把 NANDflash 中的前 4K 内容考到 bootbuf(也就是 0 地址),然后从 0 地 址运行。

这时 NANDFlash 中的前 4K 就是启动代码(他的功能就是初始化硬件然后在把 NANDFlash 中的代码复制到 RAM 中,再把相应的指针指向该运行的地方)

启动代码应该做什么

由于 Nand Flash 控制器从 Nand Flash 中搬移到内部 RAM 的代码是有限的,所以在启动代码的 前 4K 里,我们必须完成 S3C2440 的核心配置以及把启动代码(U-BOOT)剩余部分搬到 RAM 中运 行,至于将 2440 当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于 4K 的时候, 只要下到 nand flash 中就会被搬运到内部 RAM 中执行了。

bootloader 在某种意义上来说即是一个启动代码,种类有很多(vivi uboot 等),但是功能上无 非就是完成一些初始化。 bootloader 是芯片复位后进入操作系统之前执行的一段代码,完成由硬 件启动到操作系统启动的过渡,为运行操作系统提供基本的运行环境,如初始化 CPU、堆栈、 初始化存储器系统等,其功能类似于 PC 机的 BIOS.

在实际的开发中,一般可以把 bootloader 烧入到 Norflash,程序运行可以通过串口交互, 进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。 Norflash 中的 Bootloader 还可以烧录内核到 Norflash 等等功能

存储控制器的作用

在 2440 中分了 8 个 bank,每个 bank 的基地址由 nCGSx 来选择,每个 bank 都接外设之后, 就可以通过存储控制器来进行地址上的选择了。每个 bank 与外设的连接方式不一样,主要 看外设是每次进行多少位的数据传输,如果是 8 位,这样 CPU 的地址线 A0 就可以直接接 外设的 A0,如果是 16 位,那么 CPU 的 A1 就该接到外设的 A0,一次类推往后移位,具体 原因见错位原因。 nor flash 接在 bank0,数据线为 16 位。存储控制器的特性如下:

大小端设置; 地址空间:每个 bank 为 128MB (总共 1GB); 地址空间:每个 bank 为 128MB (总共 1GB); 除了 bank0 其余所有 banks 的数据位宽是可编程的(8/16/32-bit);(bank0 是 16/32 位) 总共 8 个 memory banks,其中 6 个 bank 是接 ROM,SRAM 等,其余 2 个 bank 是接ROM,SRAM,SDRAM 等;5. 7 个 memory bank 的起始地址是固定的;(发现 size 也是固定的,128MB) 1 个 memory bank 的起始地址和大小是可灵活可变的; 所有 banks 的访问周期数是可编程的; 支持片外等待信号以扩充总线周期; SDRAM 在 Power down 模式下支持自动刷新.

Nand Flash 控制器

1. 自动启动: 系统复位后,boot code 搬运到 4KB Steppingstone,然后在其内部执行; 2. Nand Flash 存储接口: 支持 256Words,512Bytes,1KWords 和 2KBytes Page; 3. 软件模式: 用户能直接访问 nand flash; 4. 接口: 支持 8/16-bit Nand flash 存储接口; 5. 支持大小端模式; 6. 硬件 ECC 发生器:检测和指示(软件纠正)(此处不怎么理解); 7. Steppingstone: 4KB SRAM Buffer,在 nand flash 启动过后可以用作它处

当复位时,NAND Flash 控制器将通过引脚状态(NCON(先进闪存), GPG13(页大小),GPG14(地址周期), GPG15(总线宽度)—请参考引脚配置)来获取连接的 NAND Flash 的信息,在发生掉电或系统复位后,NAND Flash控制器自动加载 4K 字节的 BootLoader 代码。在加载完 BootLoader 代码后,Steppingstone 中的BootLoader 代码已经执行了。
转载请注明原文地址: https://www.6miu.com/read-42111.html

最新回复(0)