学习TQ2440之硬件篇

来源:互联网 发布:ubuntu交叉编译链路径 编辑:程序博客网 时间:2024/06/17 13:47

    无论是TQ2440还是什么其它的XX2440开发板,底板的设计大同小异。现在已TQ2440为例,对2440的硬件以及常用的外设扩展进行一个讲解,希望能让初学者得到一些帮助。

    如下图所示,标识出了TQ2440上面的常用接口:

1.电源接口

  电源电路由一个3.3V和一个备用电源组成,适配器输入电流为5V。

2.Nor/Nand选择开关

  Nor和Nand分别指两种不同的存储器,s3c2440可选择任意一种启动方式。存储分配后面会详细讲解。

3.音频输入输出接口
  TQ2440 提供的音频接口完全按照标准接口提供,绿色为音频输出接口,红色为音频输入接口。

4.USB 接口
  在 TQ2440 开发板中有两个 USB 接口,一个是 USB A 口(开发板上面的 USB_HOST 接口,作为 HOST使用,主要用于接 U 盘,USB 摄像头等设备);另外一个是 USB B 口(开发板上面的 USB_Deive 接口,使用标配的 USB 延长线,连接到 PC,用于传输数据。当使用 USB 下载功能时,需要连接标配提供的 USB 延长线到开发板和 PC 直接。 

5.串口接口(串口 0 (RS232
  串口在 TQ2440 开发板的使用中是非常重要的接口之一, TQ2440 可以通过它用 PC 和开发板直接进行交互操作、传输数据、完成调试等。TQ2440 开发板提供的标配串口线是直连串口线,在使用开发板时请把串口线的一段接开发板的串口接口,另外一端接 PC 的串口接口,然后就可以通过串口进行交互等操作了。三串口扩展接口引出的串口的 TX 和 RX 引脚均是 3.3V 电平,如果需要使用 232 电平,请扩展 MAX3232或者 SP3232EEN 芯片转成 232 电平。 

6.网卡接口(RJ45
TQ2440 开发板提供了 100M 网卡接口。在启动操作系统后,接上网线就可以进行上网等操作;在 uboot的下载模式下面可以使用 TFTP 下载数据到开发板。

7.Jtag 接口
在 TQ2440 开发板中,Jtag 的用途是当 Nand Flash 或 Nor Flash 中没有 uboot 时,使用它烧写 uboot 进去;或者是进行仿真时使用它。使用时请接上 TQ2440 提供的 Jtag 板到开发板的 Jtag 接口和 PC 的并口接口,然后再使用 Jtag 软件进行烧写或仿真操作。

想了解更多关于开发板的使用操作,浏览《TQ2440开发板使用手册》,手册里面已经详述了开发板使用的细枝末节。

 下面来着重讲解对于S3C2440物理内存的分配问题:

    当我第一次看见核心板的原理图时候,着实被图上面的芯片看晕了。等了解了之后,其实就是一些存储器而已。上面的存储器总共可以分为3种:SDRAM、NOR FLASH、NAND FLASH.

一、SDRAM

 S3C2440 有 27 根地址线 ADDR[26:0]2^27= 128Mbyte ,这也相当于一个bank的最大容量,但是bank6bank7可配置大小,如果小于128M就有些高位地址线没用。在友善之臂上使用的是232MSDRAM,总容量为64M,2^26= 32Mbyte,因此这里用到最高地址总线为ADDR25

 

板上用到的是HY57V561620FTP4Mbit 4bank *16 ,共32Mbyte

这里要了解下 SDRAM 的寻址原理。 

SDRAM 内部是一个存储阵列。可以把它想象成一个表格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格称为逻辑BANK。目前的 SDRAM 基本都是 个 BANK。寻址的流程就是先指定 BANK 地址,再指定行地址,最后指定列地址。

HY57V561620F这个SDRAM有 

13根行地址线   RA0-RA12 

根列地址线    CA0-CA8 

BANK 选择线 BA0-BA1 

SDRAM的地址引脚是复用的,在读写SDRAM存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。/RAS 是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;/CAS 是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中,这样就更容易理解这里只有15个地址总线了。


   

在此,还有一个疑惑:板子使用手册上说,SDRAM的物理起始地址为 0x30000000,这个是怎么得出的呢?手册上解释说是它们都使用了nGCS6 作为片选。

2440根片选信号 ngcs0-ngcs7,对应 bank0-bank7,当ngcsx为低电平的时候,就选中对应的bankx,如果使用ngcx6作为片选信号,则选中的是bank6,查手册bank6的其实地址是0x30000000.这样是没错。

二、NOR FLASH

       NOR FLASH 的地址线和数据线是分开的。AM29LV160DB 是一个2Mbyte 的NOR FLASH,分区结构是:

1个16Kbyte扇区,2个8Kbyte扇区,1个32Kbyte扇区,31个64Kbyte扇区(字节模式);

1个8Kbyte扇区,2 个4Kbyte扇区,1个16Kbyte扇区,31个32Kbyte扇区(半字模式);

共35个扇区。引脚如下:

 S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

设计原理图如下:

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

说明:

AM29LV160DB 第47 脚是BYTE#脚,BYTE#接高电平时,器件数据位是16 位,接低电平时,数据位是8 位。

上图BYTE#接VCC,D0-D15 做为数据输入输出口。A0-A19 是地址线,在半字模式下,D0-D15 做为数据输入输出口。因为数据位是16 位,A0-A19 可以选择2^20 = 1M *2BYTE = 2Mbyte。正好是AM29LV160DB 的容量。

S3C2440 的ADDR1要接AM29LV160DB 的A0。上图中AM29LV160DB 的A20,A21是空脚,分别接的是LADDR21,LADDR22。这应该是为了以后方便扩展NOR FLASH 的容量。LADDR21,LADDR22 对AM29LV160DB是没用的。

当BYTE#接低电平时,D0-D7 做为8 位数据输入输出口,D15做为地址线A-1。相当于有了A-1,A0-A19 共21 根地址线。这个时候S3C2440 的ADDR0 应该接在D15(A-1)………,ADDR20 接A19。21根地址线的寻址空间是2^21 = 2Mbyte。正好是AM29LV160DB的容量。

三、与NAND FLASH的接线分析

1 、K9F1208 结构如下图


S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

K9F1208 位宽是8位(I/O0~I/O7)。

一页:1Page = 512byte + 16byte 最后16byte是用于存储校验码和其他信息用的,不能存放实际的数据。

一块有32 page:1block = 32* (512byte + 16byte) =(16k+512)byte

K9F1208 有4096 个块:

1 device = 4096 *32* (512byte + 16byte) = (64M+2M)byte,总共有64Mbyte可操作的芯片容量

NAND FLASH 以页为单位读写数据,以块为单位擦除数据。

其引脚如下:

 
S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

S3C24440 和K9F1208 的接线图如下:

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

当选定一个NAND FLASH 的型号后,要根据选定的NAND FLASH 来确定S3C2440 的NCON,GPG13,GPG14,GPG15 的状态。

下图是S3C2440 中4个脚位状态的定义

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

K9F1208 的一页是512byte,所以NCON 接低电平,GPG13 接高电平。

K9F1208 需要4个寻址命令,所以GPG14 接高电平

K9F1208 的位宽是8,所以GPG15 接低电平。

NAND FLASH 寻址:

对K9F1208 来说,地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。地址传递分为4 步,如下图:

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

说明:

第1 步发送列地址,既选中一页512BYTE中的一个字节。512byte需要9bit来选择,这里只用了A0 -A7,原因是把一页分成了2部分,每部分256 字节。通过发送的读命令字来确定是读的前256 字节还是后256 字节。

当要读取的起始地址(Column Address)在0~255 内时我们用00h 命令,

当读取的起始地址是在256~511 时,则使用01h 命令。

一个块有32 页,用A9-A13 共5位来选择一个块中的某个页。

总共有4096 个块,用A14-A25 共12位来选择一个块。

K9F1208 总共有64Mbyte,需要A0-A25 共26个地址位。

 

例如:要读NAND FLASH 的第5000字节开始的内容。

把5000分解成列地址和行地址。

Column_address = 5000%512 = 392

因为column_address>255,所以用01h 命令读

Page_address = (5000>>9) = 9

发送命令和参数的顺序是:

NFCMMD = 0x01;从后256 字节开始读

NFADDR = column_address & 0xff;取column_address 的低8 位送到数据线

NFADDR = page_address & 0xff;发送A9-A16

NFADDR = (page_address >>8) & 0xff; 发送A17-A24

NFADDR = (page_address >> 16) & 0xff;发送A25

上面的NFCMMD,NFADDR.是S3C2440 的NAND FLASH 控制寄存器。读取的数据会放在NFDATA 中。


四、S3C2440 开发板中SDRAM \NOR \ NAND地址分配

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

(1)SDRAM地址分配

这是S3C2440 的存储器地址分配图,SDARM只能接在BANK6 或BANK7。

从分析SDRAM接线图可以看到,SDRAM接的是ngcs6,也就是接在BANK6,因为选择的SDRAM 是2片32Mbyte,总容量是64Mbyte,所以SDRAM 的地址范围是0x3000 0000 --- 0x33ff ffff。

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

(2)NORFLASH地址分配

S3C2440启动方式如下:

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

上文讲述的NORFLASH 是16bit 数据位宽,选择从NOR FLASH 启动,所以

OM0 接VDD,OM1 接VSS。

从分析NOR FLASH 接线的接线图可看到,NOR FLASH接的ngcs0,也就是接在BANK0。因为选择NORFLASH是2Mbyte,所以NOR FLASH 的地址范围是0x0000 0000 --- 0x001f ffff。

上电时,程序会从Norflash中启动,ARM直接取Norflash 中的指令运行。

(3)NANDFLASH地址分配

最后来NANDFLASH,NANDFLASH 以页为单位读写,要先命令,再给地

址,才能读到NAND 的数据。NANDFLASH是接在NANDFLASH 控制器上而不是系统总线上,所以没有在8 个BANK 中分配地址。如果S3C2440 被配置成从Nand Flash 启动, S3C2440 的Nand Flash 控制器有一个特殊的功能,在S3C2440 上电后,Nand Flash 控制器会自动的把Nand Flash 上的前4K 数据搬移到4K 内部SRAM 中,系统会从起始地址是0x0000 0000 的内部SRAM 启动。

程序员需要完成的工作,是把最核心的启动程序放在Nand Flash 的前4K 中,也就是说,你需要编写一个长度小于4K 的引导程序,作用是将主程序拷贝到SDRAM 中运行。由于NandFlash 控制器从NandFlash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K 里,我们必须完成S3C2440 的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。

至于将2440 当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K 的时候,只要下到nand flash 中就会被搬运到内部RAM 中执行了。

不管是从NOR FLASH启动还是从NANDFLASH 启动,ARM都是从0x0000 0000 地址开始执行的。

  

0 0
原创粉丝点击