微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM S3C2410硬件手册上的重要部分

ARM S3C2410硬件手册上的重要部分

时间:11-11 来源:互联网 点击:

ANK7的起始地址是可变的,您可以从S3C2410数据手册第5章“Table 5-1. Bank 6/7 Addresses”中了解到BANK6、7的地址范围与地址空间的关系。

本开发板仅使用BANK6的64M空间,我们可以令位[2:1]=010(128M/128M)或001(64M/64M):这没关系,多出来的空间程序会检测出来,不会发生使用不存在的内存的情况——后面介绍到的bootloader和linux内核都会作内存检测。 位[6]、位[3]没有使用

6.MRSRB6、MRSRB7:0x00000030

能让我们修改的只有位[6:4](CL),SDRAM HY57V561620CT-H不支持CL=1的情况,所以位[6:4]取值为010(CL=2)或011(CL=3)。

Nand Flash

当OM1、OM0都是低电平——即开发板插上BOOT SEL跳线时,S3C2410从NAND Flash启动:NAND Flash的开始4k代码会被自动地复制到内部SRAM中。我们需要使用这4k代码来把更多的代码从NAND Flash中读到SDRAM中去。

NAND Flash的操作通过NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT和NFECC六个寄存器来完成。在开始下面内容前,请打开S3C2410数据手册和NAND Flash K9F1208U0M的数据手册。

在S3C2410数据手册218页,我们可以看到读写NAND Flash的操作次序:

1.Set NAND flash configuration by NFCONF register.

2.Write NAND flash command onto NFCMD register.

3.Write NAND flash address onto NFADDR register.

4.Read/Write data while checking NAND flash status by NFSTAT register. R/nB signal should be checked before read operation or after program operation.

1、NFCONF:设为0xf830——

使能NAND Flash控制器、初始化ECC、NAND Flash片选信号nFCE=1(inactive,真正使用时再让它等于0)

设置TACLS、TWRPH0、TWRPH1。

需要指出的是TACLS、TWRPH0和TWRPH1,请打开S3C2410数据手册218页,可以看到这三个参数控制的是NAND Flash信号线CLE/ALE与写控制信号nWE的时序关系。

我们设的值为TACLS=0,TWRPH0=3,TWRPH1=0,其含义为:TACLS=1个HCLK时钟,TWRPH0=4个HCLK时钟,TWRPH1=1个HCLK时钟。

请打开K9F1208U0M数据手册第13页,在表“AC Timing Characteristics for Command / Address / Data Input”中可以看到: CLE setup Time = 0 ns,CLE Hold Time = 10 ns, ALE setup Time = 0 ns,ALE Hold Time = 10 ns, WE Pulse Width = 25 ns 可以计算,即使在HCLK=100MHz的情况下,TACLS+TWRPH0+TWRPH1=6/100 uS=60 ns,也是可以满足NAND Flash K9F1208U0M的时序要求的。

2、NFCMD: 对于不同型号的Flash,操作命令一般不一样。对于本板使用的K9F1208U0M,请打开其数据手册第8页“Table 1. Command Sets”

3、NFADDR:地址

4、NFDATA:数据,只用到低8位

5、NFSTAT:状态,只用到位0,0-busy,1-ready

6、NFECC:校验

现在来看一下如何从NAND Flash中读出数据:

1、NFCONF = 0xf830

2、在第一次操作NAND Flash前,通常复位一下:

NFCONF &= ~0x800 (使能NAND Flash)

NFCMD = 0xff (reset命令)

循环查询NFSTAT位0,直到它等于1

3、NFCMD = 0 (读命令)

4、这步得稍微注意一下,请打开K9F1208U0M数据手册第7页,那个表格列出了在地址操作的4个步骤对应的地址线,A8没用到:

NFADDR = addr & 0xff

NFADDR = (addr>>9) & 0xff (注意了,左移9位,不是8位)

NFADDR = (addr>>17) & 0xff (左移17位,不是16位)

NFADDR = (addr>>25) & 0xff (左移25位,不是24位)

5、循环查询NFSTAT位0,直到它等于1

6、连续读NFDATA寄存器512次,得到一页数据(512字节)

7、NFCONF |= 0x800 (禁止NAND Flash)

UART

UART的寄存器有11X3个(3个UART)之多,我选最简单的方法来进行本实验,用到的寄存器也有8个。不过初始化就用去了5个寄存器,剩下的3个用于接收、发送数据。

1、初始化:

a.把使用到的引脚GPH2、GPH3定义为TXD0、RXD0:

GPHCON |= 0xa0 GPHUP |= 0x0c (上拉)

b.ULCON0 ( UART channel 0 line control register ):设为0x03 此值含义为:8个数据位,1个停止位,无校验,正常操作模式(与之相对的是Infra-Red Mode,此模式表示0、1的方式比较特殊)。

c.UCON0 (UART channel 0 control register ):设为0x05 除了位[3:0],其他位都使用默认值。位[3:0]=0b0101表示:发送、接收都

使用“中断或查询方式”——本实验使用查询查询方式。

d.UFCON0 (UART channel 0 FIFO control register ):设为0x00 每个UART内部都有一个16字节的发送FIFO和接收FIFO,但是本实验不使用FIFO,设为默认值0

e.UMCON0 (UART channel 0

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top