第5章 应用系统设计与调试(2)
5.2.4 S3C4510B的系统管理器(System Manager)
概述
S3C4510B 微处理器的系统管理器(System Manager)在整个系统工作中起至关重要作用,只有清楚的了解系统管理器在系统中的作用及工作原理,才能进行程序设计和系统开发,但同时,相对于8位或16位微处理器而言,S3C4510B系统管理器的工作原理又是比较复杂的,因此需要读者认真细致的阅读该部分内容,并通过编程实践加以掌握。
S3C4510B 微处理器的系统管理器具有以下功能:
— 基于固定的优先级,仲裁来自几个主功能模块的系统总线访问请求。
— 为访问外部存储器提供必需的存储器控制信号。例如DMA控制器或CPU要访问DRAM组的某地址,则系统管理器的DRAM控制器就会产生必需的normal/EDO 或SDRAM访问信号。可由SYSCFG[31]设定访问normal/EDO或SDRAM的信号。
— 为S3C4510B和ROM/SRAM,以及外部I/O组之间的总线通信提供必需的信号。
— 为外部存储器的数据总线和内部数据总线之间的数据流协调总线宽度的差别。
— 对外部存储器和I/O设备,S3C4510B同时支持小端模式和大端模式的访问方式。
通过产生外部总线请求信号,外设可访问S3C4510B的外部总线。另外,S3C4510B可通过插入等待周期(WAIT信号)访问低速外设。WAIT信号由外设产生,可延长CPU的存储器访问周期。
系统管理器寄存器(System Manager Registers)
系统管理器使用一组专用的特殊功能寄存器来控制外部存储器的读/写操作,通过对该组特殊功能寄存器编程,可以设定:
— 存储器的类型
— 外部数据总线宽度及访问周期
— 定时的控制信号(例如RAS和CAS)
— 存储器组的定位
— 存储器组的大小
在标准系统配置中访问外设必需的控制信号、地址信号和数据信号,系统管理器通过设置特殊功能寄存器的值来控制其产生和处理。特殊功能寄存器也被用于控制对ROM/SRAM/Flash组的访问,同时还能控制对多达四个DRAM 组和四个外部I/O组以及一个特殊功能寄存器映射区域的访问。
每个存储器组在组内通过基指针(Base Pointer)寻址,其寻址范围是64KB(16位),而基指针本身为10位。因此S3C4510B的最大可寻址范围是226=64MB(或16M字)。
在进行系统存储器映射时,注意两个相连的存储器组的地址空间决不能重叠。图5.2.4 为S3C4510B系统存储器映射。
图5.2.4 S3C4510B系统存储器映射
系统存储器映射(System Memory Map)
关于S3C4510B系统存储器映射,以下是几个应当注意的重点:
- S3C4510B采用统一编址的方式,将系统的片外存储器、片内存储器、特殊功能寄存器和外部的I/O设备,都映射到64MB的地址空间,同时,为便于管理,又将地址空间分为如图5.2.4所示的若干个存储器组,可以通过配置包含基指针(Base Pointer)和尾指针(End Pointer) 的特殊功能寄存器,设定每个存储器组的大小和位置。用户可利用基指针和尾指针设置连续的存储器映射。具体操作如下:即把某个存储器组的基指针的地址设置为 前一个存储器组的尾指针的地址。请注意在设定存储器组的控制寄存器时,每两个相连的存储器组的地址空间决不能重叠,即使这些组被禁用。
- 四个外部I/O组被定义在一个连续的地址空间中。只需要将基指针分配给外部I/O组0,外部I/O组1的起始地址就等于外部I/O组0的起始地址+16KB,同理,外部I/O组2的起始地址就等于外部I/O组0的起始地址+32KB,外部I/O组3的起始地址就等于外部I/O组0的起始地址+48KB。因此,四个外部组的总的连续的可寻址范围被定义在外部I/O组0的起始地址+64KB的地址空间。在整个可寻址的地址空间中,外部I/O组的起始地址并没有被固定。通过设定组的基指针,可以设定一个具体的组起始地址,但总的地址空间是连续的64KB。
- 每个组的起始物理地址为“基指针左移16位”, 每组末尾的物理地址为“尾指针左移16位 - 1”。
在上电或系统复位后,所有组的地址指针寄存器都被初始化到其缺省值。这时,所有的组指针(ROM/SRAM/Flash组0和特殊功能寄存器组除外)都被清零。这意味着:除ROM/SRAM/Flash组0和特殊功能寄存器组以外,所有其它组在系统启动时都是未被定义的。这一点很重要,用户在进行程序设计时,一般总是要首先通过配置相应寄存器,定义系统的存储空间。
ROM/SRAM/Flash组0的尾指针和基指针的复位值分别为0x200和0x0。这意味着系统复位后将自动定义ROM/SRAM/Flash组0的地址空间为32MB,实际地址范围为0x0000,0000~0x0200,0000-1。ROM/SRAM/Flash组0的这种初始化定义使得系统在上电或复位后,将系统的控制权交给了由用户编写的启动代码,当然这些启动代码应存放在外部ROM中的,并映射到ROM/SRAM/Flash组0。当起动代码执行时,它执行各种系统初始化任务,并根据应用系统的外部存储器和设备的实际情况来重新配置系统的存储器映射。
特殊功能寄存器组的基址针在系统复位时被初始化为0x3FF0000,一般不再改动。
图5.2.5是在系统启动或复位时的系统存储器映射。
图5.2.5 系统复位时的存储器映射
表5-2-4为系统管理器对应的寄存器,系统的存储器映射可通过对这些寄存器的配置来完成。
表5-2-4 系统管理器对应的寄存器
寄存器 | 偏移量 | 操作 | 描 述 | 复位值 |
SYSCFG | 0x0000 | 读/写 | 系统配置寄存器 | 0x37FFFF91 |
CLKCON | 0x3000 | 读/写 | 时钟控制寄存器 | 0x00000000 |
EXTACON0 | 0x3008 | 读/写 | 外部I/O时序寄存器1 | 0x00000000 |
EXTACON1 | 0x300C | 读/写 | 外部I/O时序寄存器2 | 0x00000000 |
EXTDBWTH | 0x3010 | 读/写 | 分组数据总线的宽度设置寄存器 | 0x00000000 |
ROMCON0 | 0x3014 | 读/写 | ROM/ARAM/FLASH组0控制寄存器 | 0x20000060 |
ROMCON1 | 0x3018 | 读/写 | ROM/ARAM/FLASH组1控制寄存器 | 0x00000060 |
ROMCON2 | 0x301C | 读/写 | ROM/ARAM/FLASH组2控制寄存器 | 0x00000060 |
ROMCON3 | 0x3020 | 读/写 | ROM/ARAM/FLASH组3控制寄存器 | 0x00000060 |
ROMCON4 | 0x3024 | 读/写 | ROM/ARAM/FLASH组4控制寄存器 | 0x00000060 |
ROMCON5 | 0x3028 | 读/写 | ROM/ARAM/FLASH组5控制寄存器 | 0x00000060 |
DRAMCON0 | 0x302C | 读/写 | DRAM组0控制寄存器 | 0x00000000 |
DRAMCON1 | 0x3030 | 读/写 | DRAM组1控制寄存器 | 0x00000000 |
DRAMCON2 | 0x3034 | 读/写 | DRAM组2控制寄存器 | 0x00000000 |
DRAMCON3 | 0x3038 | 读/写 | DRAM组3控制寄存器 | 0x00000000 |
REFEXTCON | 0x303C | 读/写 | 刷新与外部I/O控制寄存器 | 0x000083FD |
根据外部存储器的宽度决定外部地址译码方法(External Address Translation Method Depends on the Width of External Memory)
与某些ARM芯片不同,S3C4510B应用系统的地址总线的连接方式相对简单。由于ARM7TDMI采用32位地址总线,所有的地址都可以看作字节地址,地址总线提供4GB的线性寻址空间,当发出字访问信号时,存储系统忽略低2位A[1:0],当发出半字访问信号时,存储系统忽略低位A[0],基于以上原因,某些ARM系统在与存储器接口时,地址总线的连接需要错开,而S3C4510B则通过一个片内的地址总线生成部件,隐藏该过程,用户在设计系统时,只需将S3C4510B的地址总线与存储器的地址总线一一对应连接即可(即S3C4510B的A[0]与外部存储器的A[0]对齐)。表5-2-5和图5.2.6说明了该过程。
表5-2-5 地址总线生成
数据总线宽度 | 外部地址引脚,ADDR[21:0] | 可访问的存储空间 |
8位 | A21-A0(内部) | 4M字节 |
16位 | A21-A1(内部) | 4M半字 |
32位 | A21-A2(内部) | 4M字 |
图5.2.6 地址总线变换
总线仲裁(Bus Arbitration)
对于S3C4510B微处理器,“系统总线”是指连接各个功能模块的地址和数据总线。S3C4510B的片内功能模块和片外设备都可请求总线控制权,然后占用总线以完成数据的传输。但S3C4510B在系统设计时,任一时刻只允许一个部件占用总线,因此,当有两个或两个以上的片内功能模块或外设同时请求总线控制权时,就要求总线控制器进行仲裁。
当某一个片内功能模块或外设取得总线控制权时,其他的总线请求被悬挂(等候处理)直到原来的总线控制设备释放总线控制权时才能被响应。
为便于总线仲裁,S3C4510B内部的每一个功能模块都设置了优先级,总线控制器就根据这个固定的优先级对各个模块的总线请求进行仲裁。通常,总线控制权总是分配给优先级较高的功能模块。表5-2-6列出了优先级。
表5-2-6 总线仲裁优先级
功能模块 | 总线优先级(分组) |
外部总线主控器 | A-1(A组中的最高优先级) |
DRAM存储器刷新控制器 | A-2 |
General DMA1(GDMA1) | A-3 |
General DMA0(GDMA0) | A-4 |
高层数据链路控制器B(HDLC B) | A-5 |
高层数据链路控制器A(HDLC A) | A-6 |
MAC带缓冲DMA(BDMA) | A-7(A组中的最低优先级) |
写缓冲器 | B-1(B组中的最高优先级) |
总线路由器 | B-2(B组中的最低优先级) |
注:S3C4510B的内部功能模块分为A、B两组,在每个组内,其优先级根据设置固定。
外部总线控制(External Bus Mastership)
S3C4510B微处理器能检测并响应由外部总线主控器产生的总线请求信号(ExtMREQs)。当CPU发出外部总线应答信号(ExtMACK)后,总线控制权就交给外部总线主控器,此时外部总线请求信号应继续有效。
当S3C4510B的外部总线应答信号有效时,其存储器接口处于高阻状态,以便外部总线主控器能驱动外部存储器接口。
当S3C4510B不控制总线时,它也不再进行DRAM的刷新操作,因此,当外部的总线主控器取得总线控制权且会持续一段较长的时间,必须负责完成DRAM的刷新操作。
控制寄存器(Control Register)
系统配置寄存器(System Configuration Register)
系统管理器中有一个系统配置寄存器SYSCFG,该寄存器决定系统管理器中特殊功能寄存器组的起始地址,以及片内SRAM的使用方式和起始地址。在系统存储器映射中,特殊功能寄存器组的地址空间固定为64KB,可参考图5.2.4。
用户可以通过SYSCFG的设定控制诸如写缓冲、缓存模式、DRAM模式、以及片内SRAM的起始地址等。
该寄存器的设置对系统的运行及性能有很大的影响,系统设计者应仔细理解每一位所代表的意义并正确设置。
SYSCFG寄存器
寄存器 | 偏移地址 | 操作 | 描 述 | 复位值 |
SYSCFG | 0x0000 | 读/写 | 系统配置寄存器 | 0x67FFFF91 |
[0]Stall使能(SE)
该位必须置为0。
[1]Cache使能(CE)
该位置1,Cache操作使能。
[2]写缓冲使能(WE)
该位置1,写缓冲操作使能。
[5:4]Cache模式(CM)
该两位决定如何分配片内8KB存储器为Cache和SRAM。
00 = 4KB SRAM,4KB Cache
01 = 0KB SRAM,8KB Cache
10 = 8KB SRAM,0KB Cache
11 = 系统保留
注:当设置为10时,CE位自动清零。
[15:6]片内SRAM的基指针
该设置值左移16位即为片内SRAM的起始物理地址。
[25:16]特殊功能寄存器组的基指针
该设置值左移16位即为特殊功能寄存器组的起始物理地址。
[30:26]产品号(PD_ID)
00001=S3C4510X(KS32C50100)
11001=S3C4510B
[31]SDRAM模式
0=4个DRAM组均设置为普通/EDO DRAM接口
1=4个DRAM组均设置为SDRAM接口
起始地址设置(Start Address Setting)
系统管理器中特殊功能寄存器组的起始地址在系统加电或复位时被初使化为0x3FF0000,用户也可通过配置SYSCFG寄存器的值,将特殊功能寄存器组的起始地址设定在64MB地址空间的任意位置。每一个特殊功能寄存器的实际物理地址为特殊功能寄存器组的起始地址加上该寄存器的偏移地址。
例如,系统复位时特殊功能寄存器组的起始地址初始化为0x3FF0000,特殊功能寄存器ROMCON的偏移地址为0x3014,因此,ROMCON的物理地址是:
0x3FF0000+0x3014=0x3FF3014
如果用户重新设定特殊功能寄存器组的起始地址为0x3000000,则ROMCON新的物理地址是0x3003014。
在大多数情况下,并不需要去重新设置特殊功能寄存器组的起始地址,而直接使用其初始化值0x3FF0000。
Cache禁止/使能(Cache Disable/Enable)
用户可通过设置SYSCFG中的CE位来禁止或使能Cache,但由于Cache没有自动更新的特性,用户在使能Cache时必须验证数据的一致性。
片内8KB的SRAM可以通过设置SYSCFG[5:4]用作Cache,如果不准备将8KB全部用作Cache,也可将余下的空间作为片内的SRAM,其起始地址由片内SRAM的基指针设定。
写缓冲禁止/允许(Write Buffer Disable/Enable)
S3C4510B内含4个可编程的写缓冲寄存器以提高存储器写操作的速度。当使能写缓冲器,CPU首先将数据写入写缓冲器,而不直接写入外部的存储器。4个写缓冲寄存器可以增强ARM7TDMI内核的数据存储操作性能。
系统时钟和MUX总线控制寄存器(System clock and MUX Bus Control Register)
时钟控制寄存器(Clock Control Register,CLKCON)
在系统管理器中有一个时钟控制寄存器,可对系统时钟分频。通过设置时钟的分频值可降低系统的工作频率,该寄存器具体定义与设置,请参考S3C4510B用户手册。
系统时钟(System Clock)
如果将S3C4510B的CLKSEL引脚置为高电平,由XCLK引脚输入的外部时钟就直接作为内部系统时钟,若将CLKSEL引脚置为低电平,外部时钟则会通过片内的PLL电路后才作为内部系统时钟,在这种情况下,内部系统时钟等于XCLK×MF(倍乘因子)。例如,要得到50MHz的内部系统时钟,只需要10MHz的外部时钟。
图5.2.7 为系统时钟电路。
图5.2.7 系统时钟电路
外部I/O访问控制寄存器(External I/O Access Control Registers,EXTACON0/1)
系统管理器内的外部I/O访问控制寄存器用于控制外部I/O的访问周期,该寄存器具体定义与设置,请参考S3C4510B用户手册。
数据总线宽度寄存器(Data Bus Width Register,EXTDBWTH)
S3C4510B可以以8/16/32位的数据宽度访问外部ROM、SRAM、Flash存储器,DRAM、SDRAM以及外部I/O口。通过设置数据宽度寄存器,用户可设定与特定外部存储器和外部I/O组相对应的数据宽度。
EXTDBWTH寄存器
寄存器 | 偏移地址 | 操作 | 描 述 | 复位值 |
EXTDBWTH | 0x3010 | 读/写 | 配置每组的数据总线宽度 | 0x00000000 |
[1:0]ROM/SRAM/FLASH组0的数据总线宽度(DSR0)
DSR0的属性为只读,ROM/SRAM/FLASH组0在系统中通常作为启动ROM区,其值由B0SIZE[1:0]引脚的状态决定。
00 = 不允许
01 = 字节(8位)
10 = 半字(16位)
11 = 字(32位)
[3:2]ROM/SRAM/FLASH组1的数据总线宽度(DSR1)
[5:4] DSR2,[7:6] DSR3,[9:8] DSR4,[11:10] DSR5
00 = 禁止
01 = 字节(8位)
10 = 半字(16位)
11 = 字(32位)
[13:12]DRAM组0的数据总线宽度(DSD0)
[15:14] DSD1,[17:16] DSD2,[19:18] DSD3
00 = 禁止
01 = 字节(8位)
10 = 半字(16位)
11 = 字(32位)
[21:20]外部I/O组0的数据总线宽度(DSX0)
[23:22] DSX1,[25:24] DSX2,[27:26] DSX3
00 = 禁止
01 = 字节(8位)
10 = 半字(16位)
11 = 字(32位)
当选择“禁止”时,S3C4510B不产生相应的访问信号。
ROM/SRAM/Flash控制寄存器(ROM/SRAM/FLASH Control Register,ROMCON)
系统管理器内含6个用于控制ROM、SRAM、Flash存储器的寄存器,分别对应于S3C4510B所支持的6个ROM/SRAM/FLASH组。
对于ROM/SRAM/FLASH组0,其外部数据总线宽度由B0SIZE[1:0]引脚的状态决定:
当B0SIZE[1:0]= “01”,ROM/SRAM/FLASH组0的外部数据总线宽度为8位。
当B0SIZE[1:0] = “10”,ROM/SRAM/FLASH组0的外部数据总线宽度为16位。
当B0SIZE[1:0] = “11”,ROM/SRAM/FLASH组0的外部数据总线宽度为32位。
ROM/SRAM/Flash控制寄存器
寄存器 | 偏移地址 | 操作 | 描 述 | 复位值 |
ROMCON0 | 0x3014 | 读/写 | ROM/SRAM/FLASH组0控制寄存器 | 0x20000060 |
ROMCON1 | 0x3018 | 读/写 | ROM/SRAM/FLASH组1控制寄存器 | 0x00000060 |
ROMCON2 | 0x301C | 读/写 | ROM/SRAM/FLASH组2控制寄存器 | 0x00000060 |
ROMCON3 | 0x3020 | 读/写 | ROM/SRAM/FLASH组3控制寄存器 | 0x00000060 |
ROMCON4 | 0x3024 | 读/写 | ROM/SRAM/FLASH组4控制寄存器 | 0x00000060 |
ROMCON5 | 0x3028 | 读/写 | ROM/SRAM/FLASH组5控制寄存器 | 0x00000060 |
以下是ROM/SRAM/Flash控制寄存器(ROMCON0-ROMCON5)每位的定义:
[1:0]页模式配置(PMC)
00 = 普通ROM 01 = 4字/页
10 = 8字/页 11 = 16字/页
[3:2]页地址访问时间(tPA)
00 = 5个周期 01 = 2个周期
10 = 3个周期 11 = 4个周期
[6:4]可编程访问周期(tACC)
000 = 该组禁用 001 = 2个周期
010 = 3个周期 011 = 4个周期
110 = 7个周期 111 = 保留
[19:10] ROM/SRAM/Flash组基指针
该设置值左移16位即为ROM/SRAM/Flash组的起始物理地址。
[29:20] ROM/SRAM/Flash组尾指针
该设置值左移16位-1即为ROM/SRAM/Flash组的结束物理地址。
DRAM控制寄存器(DRAM Control Registers)
系统管理器内含4个DRAM控制寄存器,DRAMCON0~DRAMCON3,分别对应于S3C4510B所支持的4个DRAM组。REFEXTCON寄存器用于设置外部I/O组0的基指针。
S3C4510B支持EDO、普通、同步DRAM(SDRAM)。通过将SYSCFG[31]置1可选择SDRAM模式,如果将该位置1,所有的DRAM组均选择SDRAM,置0则所有DRAM组均选择EDO/FP DRAM。
DRAM及外部I/O控制寄存器
寄存器 | 偏移地址 | 操作 | 描 述 | 复位值 |
DRAMCON0 | 0x302C | 读/写 | DRAM组0控制寄存器 | 0x00000000 |
DRAMCON1 | 0x3030 | 读/写 | DRAM组1控制寄存器 | 0x00000000 |
DRAMCON2 | 0x3034 | 读/写 | DRAM组2控制寄存器 | 0x00000000 |
DRAMCON3 | 0x3038 | 读/写 | DRAM组3控制寄存器 | 0x00000000 |
REFEXTCON | 0x303C | 读/写 | 刷新与外部I/O控制寄存器 | 0x00000000 |
0 = 普通DRAM(快速页模式DRAM)
1 = EDO DRAM
[2:1]CAS锁存时间(tCS)
00 = 1个周期 01 = 2个周期
10 = 3个周期 11 = 4个周期
[3]CAS预充电时间(tCP)
0 = 1个周期 1 = 2个周期
[6:4]系统保留
系统默认值为000,但用户在使用时应置为001
[7]RAS到CAS的延迟(tRC或tRCD)
0 = 1个周期 1 = 2个周期
[9:8]RAS预充电时间(tRP)
00 = 1个周期 01 = 2个周期
10 = 3个周期 11 = 4个周期
[19:10] DRAM组基指针
该设置值左移16位即为DRAM组的起始物理地址。
[29:20] DRAM组尾指针
该设置值左移16位-1即为DRAM组的结束物理地址。
[31:30] DRAM组的列地址位数(CAN)
00 = 8位 01 = 9位
10 = 10位 11 = 11位
DRAM接口特性(DRAM Interface Features)
S3C4510B具有完全可编程的外部DRAM接口,通过设置相应的DRAM控制寄存器,用户可方便的控制各种接口特性。这些可编程的特性包括:
— 外部数据总线宽度。
— 通过DRAMCON[0]选择快速页模式或EDO模式。
— 通过SYSCFG[31]选择快速页模式/EDO模式或SDRAM模式。
— 每个DRAM组的访问周期数、CAS锁存时间、CAS预充电时间、RAS到CAS时延、RAS预充电时间等。
刷新及外部I/O控制寄存器(REFEXTCON),用于控制DRAM的刷新操作及对外部I/O组的访问。通过自动产生刷新控制信号,S3C4510B系统不再需要其他的外部刷新信号刷新DRAM。
通过23位内部地址总线,S3C4510B可产生用于DRAM访问的行、列地址信号。同时,S3C4510支持同步或异步DRAM。
访问SDRAM (Synchronous DRAM Accesses)
SDRAM的接口控制信号包括CKE、SDCLK、nSDCS[3:0]、nSDCAS、nSDRAS及DQM[3:0]等。SDRAM的接口方法将在硬件设计部分详细描述。
DRAM组的地址空间(DRAM Bank Space)
S3C4510B的DRAM接口支持4个DRAM组,各DRAM组可以是不同的配置。用户可通过DRAM控制寄存器(DRAMCON0~DRAMCON3)设置DRAM访问周期和存储器组在地址空间中的位置。
每一个DRAM控制寄存器都包含两个10位的地址指针,首指针和尾指针,用以指示DRAM组的起始地址和结束地址。10位的指针值对应A[25:16],因此,在每一个组内,其地址空间为216=64KB。
系统初始化值(System Initialization Values)
当系统初始化时,4个DRAM控制寄存器均被置为0x00000000,同时禁用所有的外部DRAM。
DRAM刷新与外部I/O控制寄存器(DRAM Refresh and External I/O Control Register,REFEXTCON)
S3C4510B的DRAM接口支持对EDO/FP DRAM的CBR(CAS-before-RAS)刷新模式和SDRAM的自动刷新。通过设置DRAM刷新与外部I/O控制寄存器,REFEXTCON,可控制DRAM的刷新模式、刷新时序及刷新间隔。REFEXTCON同时还包含10位外部I/O组0的基指针值。
[9:0]外部I/O组0基指针(基地址)
该设置值左移16位即为外部I/O组0的起始物理地址。外部I/O组0的结束物理地址为该设置值左移16位+16KB-1。
4个外部I/O组的地址空间连续,每组均固定大小为16KB,因此,通过该基指针可以计算出其他3个外部I/O组的起始和结束地址。
[15]特殊功能寄存器域有效性(VSF)
0 = 存储器组不可访问
1 = 存储器组可访问
[16]刷新使能(REN)
0 = 禁止DRAM刷新
1 = 使能DRAM刷新
[19:17]CAS持续时间(tCHR)
000 = 1个周期 001 = 2个周期
010 = 3个周期 011 = 4个周期
100 = 5个周期 101 = 未用
110 = 未用 111 = 未用
[20]CAS设置时间(tCSR)
0 = 1个周期
1 = 2个周期
[31:21]刷新计数值(持续时间)
刷新周期 = (211-该值+1)/fMCK
以上是对S3C4510B的系统管理器及相关特殊功能寄存器的简单介绍,这些内容将会在程序设计,特别是系统初始化部分的程序设计中反复用到。限于篇幅,还有部分系统管理器的特殊功能寄存器未做介绍,请读者自行参考S3C4510B用户手册。
5.3 系统的硬件选型与单元电路设计
从这一节开始,将详细描述系统的硬件选型与设计,希望通过对这些章节的阅读,能使读者具有初步设计特定系统的能力。
尽管硬件选型与单元电路设计部分的内容是基于S3C4510B的系统,但由于ARM体系结构的一致性和常见外围电路的通用性,只要读者能真正理解本部分的设计方法,从而设计出基于其他ARM微处理器的系统,应该也是比较容易的。
需要说明,以下的应用电路可能不是最佳的,但经验证是可以正常工作的。
5.3.1 S3C4510B芯片及引脚分析
S3C4510B共有208只引脚,采用QFP封装,这对于那些常使用8位/16位DIP封装微控制器的读者来说,可能会觉得有点复杂,然而,尽管S3C4510B引脚较多,但根据各自的功能,分布很有规律。
首先,电源和接地引脚有近50根,再除去地址总线、数据总线和通用I/O口,以及其他的专用模块如HDLC、UART、IIC、MAC等的接口,真正需要仔细研究的引脚数就不是很多了,但这些引脚主要是控制信号,需要认真对待,在此先进行简单的分析,其后的单元电路设计里,会有更再详细的说明。
在硬件系统的设计中,应当注意芯片引脚的类型,S3C4510B(也包括其他的微处理器)的引脚主要分为三类,即:输入(I)、输出(O)、输入/输出(I/O)。
输出类型的引脚主要用于S3C4510B对外设的控制或通信,由S3C4510B主动发出,这些引脚的连接不会对S3C4510B自身的运行有太大的影响。
输入/输出类型的引脚主要是S3C4510B与外设的双向数据传输通道。
而某些输入类型的引脚,其电平信号的设置是S3C4510B本身正常工作的前提,在系统设计时必须小心处理。
S3C4510B的主要控制信号如下:
LITTLE(Pin49):大、小端模式选择引脚。高电平 = 小端模式;低电平 = 大端模式;该引脚在片内下拉,系统默认为大端模式,但在实际系统中一般使用小端模式,更符合我们的使用习惯,因此该引脚可上拉或接电源。
FILTER(Pin55):如果使用PLL倍频电路,应在该引脚和地之间接820pF的陶瓷电容。在实际系统中,一般应使用PLL电路,因此,该电容应连接。
TCK、TMS、TDI、TDO、nTRST(Pin58~Pin62):JTAG接口引脚。根据IEEE标准,TCK应下拉,TMS、TDI和nTRST应上拉。S3C4510B已按此标准在片内连接,只需要与JTAG插座直接相连即可,但某些ARM芯片并未做相应的处理,在设计电路时应注意。
TMODE(Pin63):测试模式。高电平 = 芯片测试模式;低电平 = 正常工作模式;用户一般不作芯片测试,该引脚下拉或接地,使芯片处于正常工作模式。
nEWAIT(Pin71):外部等待请求信号。该引脚应上拉。
B0SIZE[1:0](Pin74,Pin73):BANK0数据宽度选择。’01’ = 8位;’10’ = 16位;’11’ = 32位;’00’ = 系统保留。
CLKOEN(Pin76):时钟输出允许/禁止。高电平 = 允许;低电平 = 禁止。一些外围器件(如SDRAM)需要CPU的时钟输出作为自身的时钟源,该引脚一般接高电平,使时钟输出为允许状态。
XCLK(Pin80):系统时钟源。接有源晶振的输出。
nRESET(Pin82):系统复位引脚。低电平复位,当系统正常工作时,该引脚应处于高电平状态。
CLKSEL(Pin83):时钟选择。高电平 = XCLK直接作为系统的工作时钟;低电平 = XCLK经过PLL电路倍频后作为系统的工作时钟。
ExtMREQ(Pin108):外部主机总线请求信号。该引脚应下拉。
S3C4510B的其余引脚为电源线、接地线、数据总线、地址总线以及其他功能模块地输入/输出线,对CPU自身地运行地影响相对较小,其连接方式也比较简单,在此不作详述。
5.3.2 电源电路
在该系统中,需要使用5V和3.3V的直流稳压电源,其中,S3C4510B及部分外围器件需3.3V电源,另外部分器件需5V电源,为简化系统电源电路的设计,要求整个系统的输入电压为高质量的5V的直流稳压电源。系统电源电路如下图所示:
图5.3.1 系统的电源电路
有很多DC-DC转换器可完成5V到3.3V的转换,在此选用Linear Technology的LT108X系列。常见的型号和对应的电流输出如下:
LT1083 7.5A
LT1084 5A
LT1085 3A
LT1086 1.5A
设计者可根据系统的实际功耗,选择不同的器件。
5.3.3 晶振电路与复位电路
晶振电路用于向CPU及其他电路提供工作时钟。在该系统中,S3C4510B使用有源晶振。不同于常用的无源晶振,有源晶振的接法略有不同。常用的有源晶振的接法如下图所示:
图5.3.2 系统的晶振电路
根据S3C4510B的最高工作频率以及PLL电路的工作方式,选择10MHz的有源晶振,10MHz的晶振频率经过S3C4510B片内的PLL电路倍频后,最高可以达到50MHz。片内的PLL电路兼有频率放大和信号提纯的功能,因此,系统可以以较低的外部时钟信号获得较高的工作频率,以降低因高速开关时钟所造成的高频噪声。
有源晶振的1脚接5V电源,2脚悬空,3脚接地,4脚为晶振的输出,可通过一个小电阻(此处为22欧姆)接S3C4510B的XCLK引脚。
在系统中,复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的RC电路构成,也可使用其他的相对较复杂,但功能更完善的电路。
本系统采用较简单的RC复位电路,经使用证明,其复位逻辑是可靠的。复位电路如图5.3.3所示:
图5.3.3 系统的复位电路
该复位电路的工作原理如下:在系统上电时,通过电阻R1向电容C1充电,当C1两端的电压未达到高电平的门限电压时,Reset端输出为低电平,系统处于复位状态;当C1两端的电压达到高电平的门限电压时,Reset端输出为高电平,系统进入正常工作状态。
当用户按下按钮S1时,C1两端的电荷被泻放掉,Reset端输出为低电平,系统进入复位状态,再重复以上的充电过程,系统进入正常工作状态。
两级非门电路用于按钮去抖动和波形整形;nReset端的输出状态与Reset端相反,以用于高电平复位的器件;通过调整R1和C1的参数,可调整复位状态的时间。
5.3.4 Flash存储器接口电路
Flash存储器是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。作为一种非易失性存储器,Flash在系统中通常用于存放程序代码、常量表以及一些在系统掉电后需要保存的用户数据等。常用的Flash为8位或16位的数据宽度,编程电压为单3.3V。主要的生产厂商为ATMEL、AMD、HYUNDAI等,他们生产的同型器件一般具有相同的电气特性和封装形式,可通用。
以该系统中使用的Flash存储器HY29LV160为例,简要描述一下Flash存储器的基本特性:
图5.3.4 HY29LV160的逻辑框图
HY29LV160的单片存储容量为16M位(2M字节),工作电压为2.7V~3.6V,采用48脚TSOP封装或48脚FBGA封装,16位数据宽度,可以以8位(字节模式)或16位(字模式)数据宽度的方式工作。
HY29LV160仅需单3V电压即可完成在系统的编程与擦除操作,通过对其内部的命令寄存器写入标准的命令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦除以及其他操作。
HY29LV160的逻辑框图、引脚分布及信号描述分别如图5.3.4、图5.3.5和表5-3-1所示:
图5.3.5 HY29LV160引脚分布(TSOP48封装)
表5-3-1 HY29LV160的引脚信号描述
引 脚 | 类型 | 描 述 |
A[19:0] | I | 地址总线。在字节模式下,DQ[15]/A[-1]用作21位字节地址的最低位。 |
DQ[15]/A[-1] DQ[14:0] | I/O 三态 | 数据总线。在读写操作时提供8位或16位的数据宽度。在字节模式下,DQ[15]/A[-1]用作21位字节地址的最低位,而DQ[14:8]处于高阻状态。 |
BYTE# | I | 模式选择。低电平选择字节模式,高电平选择字模式 |
CE# | I | 片选信号,低电平有效。在对HY29LV160进行读写操作时,该引脚必须为低电平,当为高电平时,芯片处于高阻旁路状态 |
OE# | I | 输出使能,低电平有效。在读操作时有效,写操作时无效。 |
WE# | I | 写使能,低电平有效。在对HY29LV160进行编程和擦除操作时,控制相应的写命令。 |
RESET# | I | 硬件复位,低电平有效。对HY29LV160进行硬件复位。当复位时,HY29LV160立即终止正在进行的操作。 |
RY/BY# | O | 就绪/忙 状态指示。用于指示写或擦除操作是否完成。当HY29LV160正在进行编程或擦除操作时,该引脚位低电平,操作完成时为高电平,此时可读取内部的数据。 |
VCC | -- | 3.3V电源 |
VSS | -- | 接地 |
以上为一款常见的Flash存储器HY29LV160的简介,更具体的内容可参考HY29LV160的用户手册。其他类型的Flash存储器的特性与使用方法与之类似,用户可根据自己的实际需要选择不同的器件。
下面,我们使用HY29LV160来构建Flash存储系统。由于ARM微处理器的体系结构支持8位/16位/32位的存储器系统,对应的可以构建8位的Flash存储器系统、16位的Flash存储器系统或32位的Flash存储器系统。32位的存储器系统具有较高的性能,而16位的存储器系统则在成本及功耗方面占有优势,而8位的存储器系统现在已经很少使用。在此,分别介绍16位和32位的Flash存储器系统的构建。
16位的FLASH存储器系统:
图5.3.6为16位Flash存储器系统的实际应用电路图。
在大多数的系统中,选用一片16位的Flash存储器芯片(常见单片容量有1MB、2MB、4MB、8MB等)构建16位的Flash存储系统已经足够,在此采用一片HY29LV160构建16位的Flash存储器系统,其存储容量为2MB。Flash存储器在系统中通常用于存放程序代码,系统上电或复位后从此获取指令并开始执行,因此,应将存有程序代码的Flash存储器配置到ROM/SRAM/FLASH Bank0,即将S3C4510B的nRCS<0>(Pin75)接至HY29LV160的CE#端。
HY29LV160的RESET#端接系统复位信号;
OE#端接S3C4510B的nOE(Pin72);
WE#端S3C4510B的nWBE<0>(Pin100);
BYTE#上拉,使HY29LV160工作在字模式(16位数据宽度);
RY/BY#指示HY29LV160编程或擦除操作的工作状态,但其工作状态也可通过查询片内的相关寄存器来判断,因此可将该引脚悬空;
地址总线[A19~A0]与S3C4510B的地址总线[ADDR19~ADDR0]相连;
16位数据总线[DQ15~DQ0]与S3C4510B的低16位数据总线[XDATA15~XDATA0]相连。
注意此时应将S3C4510B的B0SIZE[1:0]置为‘10’,选择ROM/SRAM/FLASH Bank0为16位工作方式。
图5.3.6 16位FLASH存储系统电路图
32位的FLASH存储器系统:
图5.3.7为32位Flash存储器系统的实际应用电路图。
作为一款32位的微处理器,为充分发挥S3C4510B的32性能优势,有的系统也采用两片16位数据宽度的Flash存储器芯片并联(或一片32位数据宽度的Flash存储器芯片)构建32位的Flash存储系统。其构建方式与16位的Flash存储器系统相似。
采用两片HY29LV16并联的方式构建32位的FLASH存储器系统,其中一片为高16位,另一片为低16位,将两片HY29LV16作为一个整体配置到ROM/SRAM/FLASH Bank0,即将S3C4510B的nRCS<0>(Pin75)接至两片HY29LV16的CE#端;
两片HY29LV160的RESET#端接系统复位信号;
两片HY29LV160的OE#端接S3C4510B的nOE(Pin72);
低16位片的WE#端接S3C4510B的nWBE<0>(Pin100),高16位片的WE#端接S3C4510B的nWBE<2>(Pin102);
两片HY29LV160的BYTE#均上拉,使之均工作在字模式;
两片HY29LV160的地址总线[A19~A0]均与S3C4510B的地址总线[ADDR19~ADDR0]相连;
低16位片的数据总线与S3C4510B的低16位数据总线[XDATA15~XDATA0]相连,高16位片的数据总线与S3C4510B的高16位数据总线[XDATA31~XDATA16]相连。
注意此时应将S3C4510B的B0SIZE[1:0]置为‘11’,选择ROM/SRAM/FLASH Bank0为32位工作方式。
图5.3.7 32位FLASH存储系统电路图
5.3.5 SDRAM接口电路
与Flash存储器相比较,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash存储器,且具有读/写的属性,因此,SDRAM在系统中主要用作程序的运行空间,数据及堆栈区。当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码一般应调入SDRAM中运行,以提高系统的运行速度,同时,系统及用户堆栈、运行数据也都放在SDRAM中。
SDRAM具有单位空间存储容量大和价格便宜的优点,已广泛应用在各种嵌入式系统中。SDRAM的存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充电)。因此,要在系统中使用SDRAM,就要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑电路。S3C4510B及其他一些ARM芯片在片内具有独立的SDRAM刷新控制逻辑,可方便的与SDRAM接口。但某些ARM芯片则没有SDRAM刷新控制逻辑,就不能直接与SDRAM接口,在进行系统设计时应注意这一点。
目前常用的SDRAM为8位/16位的数据宽度,工作电压一般为3.3V。主要的生产厂商为HYUNDAI、Winbond等。他们生产的同型器件一般具有相同的电气特性和封装形式,可通用。
以该系统中使用的HY57V641620为例,简要描述一下SDRAM的基本特性及使用方法:
HY57V641620存储容量为4组×16M位(8M字节),工作电压为3.3V,常见封装为54脚TSOP,兼容LVTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh),16位数据宽度。
HY57V641620引脚分布及信号描述分别如图5.3.8和表5-3-2所示:
表5-3-2 HY57V641620引脚信号描述
引 脚 | 名称 | 描 述 |
CLK | 时钟 | 芯片时钟输入。 |
CKE | 时钟使能 | 片内时钟信号控制。 |
/CS | 片选 | 禁止或使能除CLK、CKE和DQM外的所有输入信号。 |
BA0,BA1 | 组地址选择 | 用于片内4个组的选择。 |
A11~A0 | 地址总线 | 行地址:A11~A0,列地址:A7~A0,自动预充电标志:A10 |
/RAS, /CAS, /WE | 行地址锁存 列地址锁存 写使能 | 参照功能真值表,/RAS,/CAS和/WE定义相应的操作。 |
LDQM,UDQM | 数据I/O屏蔽 | 在读模式下控制输出缓冲;在写模式下屏蔽输入数据 |
DQ15~DQ0 | 数据总线 | 数据输入输出引脚 |
VDD/VSS | 电源/地 | 内部电路及输入缓冲电源/地 |
VDDQ/VSSQ | 电源/地 | 输出缓冲电源/地 |
NC | 未连接 | 未连接 |
图5.3.8 HY57V641620引脚分布
以上为一款常见的SDRAM HY57V641620的简介,更具体的内容可参考HY57V641620的用户手册。其他类型SDRAM的特性与使用方法与之类似,用户可根据自己的实际需要选择不同的器件。
根据系统需求,可构建16位或32位的SDRAM存储器系统,但为充分发挥32位CPU的数据处理能力,大多数系统采用32位的SDRAM存储器系统。
HY57V641620为16位数据宽度,单片容量为8MB,系统选用的两片HY57V641620并联构建32位的SDRAM存储器系统,共16MB的SDRAM空间,可满足嵌入式操作系统及各种相对较复杂的算法的运行要求。
图5.3.9为32位SDRAM存储器系统的实际应用电路图。
与Flash存储器相比,SDRAM的控制信号较多,其连接电路也要相对复杂。
两片HY57V641620并联构建32位的SDRAM存储器系统,其中一片为高16位,另一片为低16位,可将两片HY57V641620作为一个整体配置到DRAM/SDRAM Bank0~DRAM/SDRAM Bank3的任一位置,一般配置到DRAM/SDRAM Bank0,即将S3C4510B的nSDCS<0>(Pin89)接至两片HY57V641620的/CS端。
两片HY57V641620的CLK端接S3C4510B的SDCLK端(Pin77);
两片HY57V641620的CLE端接S3C4510B的CLE端(Pin97);
两片HY57V641620的/RAS、/CAS、/WE端分别接S3C4510B的nSDRAS端(Pin95)、nSDCAS端(Pin96)、nDWE端(Pin99);
两片HY57V641620的A11~A0接S3C4510B的地址总线ADDR<11>~ADDR<0>;
两片HY57V641620的BA1、BA0接S3C4510B的地址总线ADDR<13>、ADDR<12>;
高16位片的DQ15~DQ0接S3C4510B的数据总线的高16位XDATA<31>~XDATA<16>,低16位片的DQ15~DQ0接S3C4510B的数据总线的低16位XDATA<15>~XDATA<0>;
高16位片的UDQM、LDQM分别接S3C4510B的nWEB<3>、nWEB<2>,低16位片的UDQM、LDQM分别接S3C4510B的nWEB<1>、nWEB<0>。
5.3.6 串行接口电路
几乎所有的微控制器、PC都提供串行接口,使用电子工业协会(EIA)推荐的RS-232-C标准,这是一种很常用的串行数据传输总线标准。早期它被应用于计算机和终端通过电话线和MODEM进行远距离的数据传输,随着微型计算机和微控制器的发展,不仅远距离,近距离也采用该通信方式。在近距离通信系统中,不再使用电话线和MODEM,而直接进行端到端的连接。
RS-232-C标准采用的接口是9芯或25芯的D型插头,以常用的9芯D型插头为例,各引脚定义如表5-3-3所示:
表5-3-3 9芯D型插头引脚信号描述
引 脚 | 名 称 | 功 能 描 述 |
1 | DCD | 数据载波检测 |
2 | RXD | 数据接收 |
3 | TXD | 数据发送 |
4 | DTR | 数据终端准备好 |
5 | GND | 地 |
6 | DSR | 数据设备准备好 |
7 | RTS | 请求发送 |
8 | CTS | 清除发送 |
9 | RI | 振铃指示 |
要完成最基本的串行通信功能,实际上只需要RXD、TXD和GND即可,但由于RS-232-C标准所定义的高、低电平信号与S3C4510B系统的LVTTL电路所定义的高、低电平信号完全不同,LVTTL的标准逻辑“1”对应2V~3.3V电平,标准逻辑“0”对应0V~0.4V电平,而RS-232-C标准采用负逻辑方式,标准逻辑“1”对应-5V~-15V电平,标准逻辑“0”对应+5V~+15V电平,显然,两者间要进行通信必须经过信号电平的转换,目前常使用的电平转换电路为MAX232,其引脚分布如图5.3.10。
图5.3.10 MAX232引脚分布
关于MAX232更具体的内容可参考MAX232的用户手册。
图5.3.11为 MAX232的常见应用电路图。
图5.3.11 MAX232的常见应用电路图
为缩小电路板面积,系统只设计了一个9芯的D型插头,通过两个跳线选择S3C3410B的UART0或UART1,同时设计数据发送与接收的状态指示LED,当有数据通过串行口传输时,LED闪烁,便于用户掌握其工作状态以及进行软、硬件的调试。
5.3.7 IIC接口电路
IIC总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两线在连接到总线上的器件之间传送信息,并根据地址识别每个器件:不管是微控制器、存储器、LCD驱动器还是键盘接口。带有IIC总 线接口的器件可十分方便地用来将一个或多个微控制器及外围器件构成系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连接线和连接引脚少,因此 其构成的系统价格低,器件间总线简单,结构紧凑,而且在总线上增加器件不影响系统的正常工作,系统修改和可扩展性好。即使有不同时钟速度的器件连接到总线 上,也能很方便地确定总线的时钟,因此在嵌入式系统中得到了广泛的应用。
S3C4510B内含一个IIC总线主控器,可方便的与各种带有IIC接口的器件相连。在该系统中,外扩一片AT24C01作为IIC存储器。AT24C01提供128字节的EEPROM存储空间,可用于存放少量在系统掉电时需要保存的数据。
AT24C01引脚分布及信号描述和应用电路如图5.3.12、图5.3.13所示:
图5.3.12 AT24C01引脚分布及信号描述
图5.3.13 AT24C01应用电路
5.3.8 JTAG接口电路
JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。JTAG接口还常用于实现ISP(In-System Programmable在系统编程)功能,如对FLASH器件进行编程等。
通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。目前JTAG接口的连接有两种标准,即14针接口和20针接口,其定义分别如下所示。
14针JTAG接口定义:
表5-3-4 14针JTAG接口定义
引 脚 | 名 称 | 描 述 |
1、13 | VCC | 接电源 |
2、4、6、8、10、14 | GND | 接地 |
3 | nTRST | 测试系统复位信号 |
5 | TDI | 测试数据串行输入 |
7 | TMS | 测试模式选择 |
9 | TCK | 测试时钟 |
11 | TDO | 测试数据串行输出 |
12 | NC | 未连接 |
20针JTAG接口定义:
表5-3-5 20针JTAG接口定义
引 脚 | 名 称 | 描 述 |
1 | VTref | 目标板参考电压,接电源 |
2 | VCC | 接电源 |
3 | nTRST | 测试系统复位信号 |
4、6、8、10、12、 14、16、18、20 | GND | 接地 |
5 | TDI | 测试数据串行输入 |
7 | TMS | 测试模式选择 |
9 | TCK | 测试时钟 |
11 | RTCK | 测试时钟返回信号 |
13 | TDO | 测试数据串行输出 |
15 | nRESET | 目标系统复位信号 |
17、19 | NC | 未连接 |
5.3.9 10M/100M以太网接口电路
作为一款优秀的网络控制器,基于S3C4510B的系统若没有以太网接口,其应用价值就会大打折扣,因此,就整个系统而言,以太网接口电路应是必不可少的,但同时也是相对较复杂的。从硬件的角度看,以太网接口电路主要由MAC控制器和物理层接口(Physical Layer,PHY)两大部分构成,目前常见的以太网接口芯片,如RTL8019、RTL8029、RTL8039、CS8900、DM9008等,其内部结构也主要包含这两部分。
S3C4510B内嵌一个以太网控制器,支持媒体独立接口(Media Independent Interface,MII)和带缓冲DMA接口(Buffered DMA Interface,BDI)。可在半双工或全双工模式下提供10M/100Mbps的以太网接入。在半双工模式下,控制器支持CSMA/CD协议,在全双工模式下支持IEEE802.3 MAC控制层协议。
因此,S3C4510B内部实际上已包含了以太网MAC控制,但并未提供物理层接口,因此,需外接一片物理层芯片以提供以太网的接入通道。
常用的单口10M/100Mbps高速以太网物理层接口器件主要有RTL8201、DM9161等,均提供MII接口和传统7线制网络接口,可方便的与S3C4510B接口。以太网物理层接口器件主要功能一般包括:物理编码子层、物理媒体附件、双绞线物理媒体子层、10BASE-TX编码/解码器和双绞线媒体访问单元等。
在该系统中,使用RTL8201作为以太网的物理层接口。图5.3.14为RTL8201的引脚分布,表6-3-6相关引脚功能描述,表中仅列出芯片在100Mbps MII接口方式下的引脚定义,当工作于7线制网络接口方式,部分引脚定义不同。更具体的内容和使用方法可参考RTL8201的用户手册。
图5.3.14 RTL8201的引脚分布
表5-3-6 RTL8201引脚功能描述
信号 | 类型 | 引脚 | 功 能 描 述 |
TXC | O | 7 | 发送时钟:该引脚提供连续时钟信号作为TXD[3:0]和TXEN的时序参考。 |
TXEN | I | 2 | 发送使能:该引脚指示目前TXD[3:0]上的4位信号有效。 |
TXD[3:0] | I | 3,4, 5,6 | 发送数据:当TXEN有效时,MAC随TXC同步送出TXD[3:0]。 |
RXC | O | 16 | 接收时钟:该引脚提供连续时钟信号作为RXD[3:0]和RXDV的时序参考,在100Mbps时,RXC的频率为25MHz,10Mbps时为2.5MHz。 |
COL | O | 1 | 冲突检测:当检测到冲突时,COL置为高电平。 |
CRS | I/O | 23 | 载波侦听:在非IDEL状态时,该引脚置为高电平。 |
RXDV | O | 22 | 接收数据有效:当接收RXD[3:0]上的数据时,该引脚置高电平,接收结束时置低电平。该信号在RXC的上升沿有效。 |
RXD[3:0] | O | 18,19, 20,21 | 接收数据:该引脚随RXC同步将数据从PHY传送给MAC。 |
RXER | O | 24 | 接收错误:当接收数据发生错误时,该引脚置为高电平。 |
MDC | I | 25 | 站管理时钟信号:该引脚为MDIO提供同步时钟信号,但可能与TXC和RXC时钟异步。该时钟信号最高可达2.5MHz。 |
MDIO | I/O | 26 | 站数据输入输出:该引脚提供用于站管理的双向数据信息。 |
X2 | O | 47 | 25MHz晶振输出:该引脚提供25MHz晶振输出。当X1外接25MHz振荡器时,该引脚必须悬空。 |
X1 | I | 46 | 25MHz晶振输入:该引脚提供25MHz晶振输入。当外接25MHz振荡器时,该引脚作为输入。 |
TPTX+ TPTX- | O O | 34,33 | 发送输出。 |
RTSET | I | 28 | 发送差分电阻连接:该引脚应通过一2.0K的电阻下拉。 |
TPRX+ TPRX- | I I | 31,30 | 接收输入。 |
ISOLATE | I | 43 | 该引脚置高将RTL8201与MAC和MDC/MDIO管理接口隔离。在该模式下,功耗最小。 |
RPTR/ RTT2 | I | 40 | 该引脚置高将RTL8201设为转发器工作模式。在测试模式下,该引脚重定义为RTT2。 |
SPEED | I | 39 | 该引脚置高RTL8201以100Mbps的速率工作。 |
DUPLEX | I | 38 | 该引脚置高使能全双工模式。 |
ANE | I | 37 | 该引脚置高使能自动协议模式,置低为强制模式。 |
LDPS | I | 41 | 该引脚置高RTL8201进入未连接省电(LDPS)模式。 |
MII/SNIB | I | 44 | 该引脚置高RTL8201进入MII模式工作。 |
LED0/PAD0 | O | 9 | 连接LED显示。 |
LED1/PAD1 | O | 10 | 全双工LED显示。 |
LED1/PAD2 | O | 12 | 10M连接/应答LED显示。 |
LED1/PAD3 | O | 13 | 100M连接/应答LED显示。 |
LED1/PAD4 | O | 15 | 冲突LED显示。 |
RTT3/CTRL | O | 27 | 目前用作测试,可作为将来的功能扩展。 |
RESETB | I | 42 | 芯片复位引脚,低电平复位。 |
AVDD0/ AVDD1 | P | 32,36 | 模拟电源:为片内模拟电路提供3.3V电源,应接去耦合电容。 |
AVDD2 | P | 48 | 为片内PLL电路提供3.3V电源,应接去耦合电容并用100ohm@100MHz磁珠接到模拟地。 |
AGND | P | 29,35,45 | 模拟地:接地。 |
DVDD0/ DVDD1 | P | 8,14 | 数字电源:为片内数字电路提供3.3V电源。 |
DGND | P | 11,17 | 数字地:接地 |
图5.3.15 RTL8201应用电路图
由于S3C4510B片内已有带MII接口的MAC控制器,而RTL8201也提供了MII接口,各种信号的定义也很明确,因此RTL8201与S3C4510B地连接比较简单。图5.3.15为RTL8201地实际应用电路图。
S3C4510B的MAC控制器可通过MDC/MDIO管理接口控制多达31个RTL8201,每个RTL8201应有不同的PHY地址(可从00001B到11111B)。当系统复位时,RTL8201锁存引脚9,10,12,13,15的初始状态作为与S3C4510B管理接口通信的PHY地址,但该地址不能设为00000B,否则RTL8201进入掉电模式
为减少芯片的引脚数,RTL8201的LED引脚同时复用为PHY的地址引脚,因此引脚9,10,12,13,15不能直接接到电源或地。图5.3.16为引脚9,10,12,13,15地连接方法,此时RTL8201的PHY地址为00001B。引脚通过5.1K的电阻上拉或下拉,决定RTL8201的PHY地址,在正常工作时,LED显示RTL8201的工作状态,当不需要LED状态显示时,LED+510欧姆的电阻可去掉。
在图5.3.15中,信号地发送和接收端应通过网络隔离变压器和RJ45接口接入传输媒体,其实际应用电路见图5.3.17。
图5.3.16 RTL8201的LED与PHY地址配置
图5.3.17 RTL8201与网络隔离变压器及RJ45的连接图
5.3.10 通用I/O接口电路
S3C4510B提供了18个可编程的I/O端口,用户可将每个端口配置为输入模式、输出模式或特殊功能模式,由片内的特殊功能寄存器控制。在该系统的设计中,P3~P0外接4只LED显示器,用作程序运行状态的显示或其他输出功能,P7~P4外接跳线选择高、低电平用作状态输入,以控制程序流程或其他输入功能,其应用电路如图图5.3.18。
图5.3.18 通用I/O口用作输入输出
5.4 硬件系统的调试
通过5.3节对S3C4510B应用系统设计方法的阅读,具有一定系统开发经验的读者就可以设计开发自己的特定应用系统,上节所介绍的内容实际上可理解为一个基于S3C4510B的最小系统,读者可根据自己的实际需要做适当的增减。
当系统设计 制作完成时,必须经过仔细的调试,才能保证系统按照设计意图正常工作。尽管系统的调试与个人对电路工作原理的理解和实际的电路调试经验有很大的关系,但一 定的调试方法也是必不可少的。掌握正确的调试方法可使调试工作变得容易,大大缩短系统的开发时间,反之,可能会使整个系统的开发前功尽弃,以失败告终。
本节以单元 电路为单位,并结合笔者自身在系统调试时所遇到的一些具有代表性的问题,循序渐进的介绍整个系统的调试过程。在此,笔者建议:当用户的印制电路板制作完毕 后,不要急于焊接元器件,请首先对照原理图仔细检查印制电路板的连线,确保无误后方可焊接。同时,尽可能的以各单元电路为单位,一个个焊接调试,以便在调 试过程中遇到困难时缩小故障范围,在系统上电后,应先检查电路工作有无异常,芯片在工作时有一定的发热是正常的,但如果有芯片特别发烫,则一定有故障存 在,需断电检查确认无误后方可继续通电调试。
调试工具需要示波器、万用表等,同时需要ARM调试开发软件ADS或SDT及相应的仿真器,本系统在调试时使用ADS1.2及由北京微芯力科技有限公司开发的ARM JTAG仿真器。关于ADS的使用方法在以后的章节有详细的叙述。
5.4.1 电源、晶振及复位电路
电源电路、晶振电路和复位电路相对比较简单,按图5.3.1、图5.3.2和图5.3.3连接后应该就可以正常工作,此时电源电路的输出因为DC 3.3V。
用示波器观测,有源晶振的输出应为10MHz;
复位电路的RESET端在未按按钮时输出应为高电平(3.3V),按下按钮后变为低电平,按钮松开后应恢复到高电平。
电源电路、晶振电路和复位电路是整个系统正常工作的基础,应首先保证他们的正常工作。
5.4.2 S3C4510B及JTAG接口电路
在保证电源电路、晶振电路和复位电路正常工作的前提下,可通过JTAG接口调试S3C4510B,在系统上电前,首先应检测JTAG接口的TMS、TCK、TDI、TDO信号是否已与S3C4510B的对应引脚相连,其次应检测S3C4510B的nEWAIT引脚(Pin71)是否已上拉,ExtMREQ引脚(Pin108)是否已下拉,对这两只引脚的处理应注意,作者遇到多起S3C4510B不能正常工作或无法与JTAG接口通信,均与没有正确处理这两只引脚有关。
给系统上电后,可通过示波器查看S3C4510B对应引脚的输出波形,判断是否已正常工作,若S3C4510B已正常工作,在使能片内PLL电路的情况下,SDCLK/MCLKO引脚(Pin77)应输出频率为50MHz的波形,同时,MDC引脚(Pin50)和其他一些引脚也应有波形输出。
在保证S3C4510B已正常工作的情况下,可使用ADS或SDT通过JTAG接口对片内的部件进行访问和控制。
在此,首先通过对片内控制通用I/O口的特殊功能寄存器的操作,来点亮连接在P3~P0口上的4只LED,用以验证ADS或SDT调试环境是否已正确设置,以及与JTAG接口的连接是否正常。
ADS和SDT均为ARM公司为方便用户在ARM芯片上进行应用开发而推出的一整套集成开发工具,其中,ADS为SDT的升级版本。该系统的调试以ADS为例,同时也适合于SDT开发环境。图5.4.1为调试系统的硬件连接。
图5.4.1 调试系统的硬件连接
按图5.4.1连接好硬件后,打开AXD Debugger,建立与目标板(待调试的系统板)的连接,AXD Debugger有软件仿真方式和带目标系统的调试方式,此时应工作在带目标系统的调试方式。
选择菜单System Views→Command Line Interface功能,该选项为AXD Debugger的一个命令行窗口,可在该窗口内输入各种调试命令,使用非常方便。在命令行窗口输入:
>setmem 0x3FF5000, 0xFFFF, 32
>setmem 0x3FF5008, 0xFFFF, 32
setmem命令用于对特定的地址设置特定的值,待设定的值可以是8位、16位或32位,在此,对通用I/O口的模式寄存器和数据寄存器设置相应的值,点亮LED。
S3C4510B在复位后,特殊功能寄存器的基地址为0x3FF0000, 由表5-2-3可知,I/O口的模式寄存器偏移地址为0x5000,因此,I/O口的模式寄存器的物理地址为0x3FF5000,设定该寄存器的值为0xFFFF,将I/O口置为输出方式。I/O口的数据寄存器的物理地址为0x3FF5008,设定该寄存器的值为0xFFFF,将I/O口的输出置为高电平。
在执行完以上两条命令后,连接在通用I/O口的4只LED应被点亮,表示调试系统的软、硬件连接完好,可进行下一步的调试工作,否则,应重新检查调试系统。
用户若使用SDT作为调试工具,操作方法类似。按图5.4.1连接好硬件后,打开ARM Debugger for Windows,建立与目标板(待调试的系统板)的连接,选择菜单View→Command功能,即可显示命令行窗口,在命令行窗口输入:
Debug:let 0x3FF5000 = 0xFFFF
Debug:let 0x3FF5008 = 0xFFFF
执行完以上两条命令后,连接在通用I/O口的4只LED应被点亮。
关于通用I/O口更具体的工作原理和使用方法,可参考S3C4510B用户手册。
用户系统若能正常完成上述操作并成功点亮连接在P3~P0口上的LED显示器,则表明S3C4510B已在正常工作,且调试环境也已正确建立,以后的调试工作就相对简单。笔者曾遇到多个用户系统因为不能完成这步工作,使开发者失去信心而最终放弃。
5.4.3 SDRAM接口电路的调试
在系统的两类存储器中,SDRAM相对于FLASH存储器控制信号较多,似乎调试应该困难一些,但由于SDRAM的所有刷新及控制信号均由S3C4510B片内的专门部件控制,无需用户干预,在S3C4510B正常工作的前提下,只要连线无误,SDRAM就应能正常工作,反之,Flash存储器的编程、擦除操作均需要用户编程控制,且程序还应在SDRAM中运行,因此,应先调试好SDRAM存储器系统,再进行Flash存储器系统的调试。
在进行存储器系统调试之前,用户必须深入了解S3C4510B系统管理器关于存储器映射的工作原理。
基于S3C4510B系统的最大可寻址空间为64MB,采用统一编址的方式,将系统的SDRAM、SRAM、ROM、Flash、外部I/O以及片内的特殊功能寄存器和8K一体化SRAM均映射到该地址空间。为便于使用与管理,S3C4510B又将64MB的地址空间分为若干个组,分别由相应的特殊功能寄存器进行控制:
- ROM/SRAM/Flash组0~ROM/SRAM/Flash组5,用于配置ROM、SRAM或Flash,分别由特殊功能寄存器ROMCON0~ROMCON5控制;
- DRAM/SDRAM组0~DRAM/SDRAM组3用于配置DRAM或SDRAM,分别由特殊功能寄存器DRAMCON0~DRAMCON3控制;
- 外部I/O组0~外部I/O组3用于配置系统的其他外扩接口器件,由特殊功能寄存器REFEXTCON控制;
- 特殊功能寄存器组用于配置S3C4510B片内特殊功能寄存器的基地址以及片内的8K一体化SRAM,由特殊功能寄存器SYSCFG控制;
在该系统中,使用了Flash存储器和SDRAM,分别配置在ROM/SRAM/FLASH组0和DRAM/SDRAM组0,暂未使用外扩接口器件。
参照表5-2-4和5.2.4节对应特殊功能寄存器的相关描述可知,当系统复位时,只有ROM/SRAM/FLASH组0被映射到地址空间为0x0000,0000~0x0200,0000的位置,特殊功能寄存器的基地址被映射到0x03FF,0000,片内8K一体化SRAM的起始地址被映射到0x03FE,0000,它们是可访问的,而其他的存储器组均未被映射,是不可访问的。
因此,要调试SDRAM存储器系统,首先应配置相关的特殊功能寄存器,使系统中的SDRAM能被访问。表5-4-1为针对该系统的与系统管理器相关的特殊功能寄存器的配置,以下详细说明该系统所使用的相关特殊功能寄存器的配置方法。
表5-4-1 系统管理器相关特殊功能寄存器的配置
寄存器 | 偏移量 | 配置值 |
SYSCFG | 0x0000 | 0xE7FF,FF82 |
EXTDBWTH | 0x3010 | 0x0000,3000 |
ROMCON0 | 0x3014 | 0x0200,0060 |
DRAMCON0 | 0x302C | 0x1401,0380 |
REFEXTCON | 0x303C | 0xCE33,83FD |
SYSCFG = 0xE7FF,FF82;其含义为:
为4个DRAM组选择SDRAM;特殊功能寄存器组的基地址为0x03FF,0000;片内SRAM基地址为0x03FE,0000;4KB配置为SRAM,另外4KB配置为Cache;使能Cache操作。
EXTDBWTH = 0x0000,3000;其含义为:
4个外部I/O组禁用;DRAM/SDRAM组0配置为32位数据宽度,其余的DRAM/SDRAM组禁用;ROM/SRAM/FLASH组0由B0SIZE[1:0]的状态配置,其余ROM/SRAM/FLASH组禁用。
ROMCON0 = 0x0200,0060;其含义为:
该系统共有2MB的FLASH存储器,映射到地址空间的0x0000,0000~(0x0020,0000-1)处。
DRAMCON0 = 0x1401,0380;其含义为:
该系统共有16MB的SDRAM,映射到地址空间的0x0040,0000~(0x0140,0000-1)处。
用户也可将Flash存储器和SDRAM映射到地址空间的其他位置,但注意组与组之间的地址不要发生重叠。
DRAMCON0 = 0xCE33,83FD;其含义为:
配置SDRAM的刷新计数值,刷新时间、刷新使能等。
系统管理器对应的其他特殊功能寄存器使用其复位值,用户也可根据自身系统的特定情况,对相关特殊功能寄存器进行配置。
在C:/下建立文本文件memmap.txt,其内容为:
setmem 0x3FF0000,0xE7FFFF82,32
setmem 0x3FF3010,0x00003000,32
setmem 0x3FF3014,0x02000060,32
setmem 0x3FF302C,0x14010380,32
setmem 0x3FF303C,0xCE3383FD,32
打开AXD Debugger的命令行窗口,执行obey命令,配置对应的控制寄存器:
>obey C:/memmap.txt
此时,文本文件memmap.txt中的几条控制寄存器配置命令已经执行完毕,Flash存储器和SDRAM已分别映射到地址空间的0x0000,0000~(0x0020,0000-1)和0x0040,0000~(0x0140,0000-1)处。
选择菜单Processor Views→Memory选项,出现存储器窗口,在存储器起始地址栏输入SDRAM的映射起始地址:0x0040,0000,数据区应显示SDRAM中的内容,此时所显示的内容为一些随机数。双击其中的任一数据,输入新的值,如输入0xAA,若对应的存储单元能正确显示刚才输入的数据,则表明SDRAM存储器已能正常工作。
在连续的4个字节输入0xAA,然后再输入0x55,检测32位数据是否正确传输,若其中的某一位或几位数据出现错误,则多半是由于对应的数据线不通或连接错误所引起的。
在SDRAM能正确访问后,用户就可以将自己编写的各种应用程序,编译并下载到SDRAM中运行。
若使用SDT调试环境,调试过程与上述步骤相似,简述如下:
在C:/下建立文本文件memmap.txt,其内容为:
let 0x3FF0000 = 0xE7FFFF82
let 0x3FF3010 = 0x00003000
let 0x3FF3014 = 0x02000060
let 0x3FF302C = 0x14010380
let 0x3FF303C = 0xCE3383FD
打开ARM Debugger for Windows的命令行窗口(View→Command),执行obey命令:
>obey C:/memmap.txt
此时,Flash存储器和SDRAM已分别映射到地址空间的0x0000,0000~(0x0020,0000-1)和0x0040,0000~(0x0140,0000-1)处。
选择菜单View→Memory选项,出现存储器的起始地址输入窗口,在此输入SDRAM的映射起始地址:0x0040,0000,数据区应显示SDRAM中的内容,此时所显示的内容为一些随机数。双击其中的任一数据,输入新的值,如输入0xAA,若对应的存储单元能正确显示刚才输入的数据,则表明SDRAM存储器已能正常工作。
5.4.4 Flash接口电路的调试
Flash存储器的调试主要包括Flash存储器的编程(烧写)和擦除,与一般的存储器件不同,用户只需对Flash存储器发出相应的命令序列,Flash 存储器通过内部嵌入的算法即可完成对芯片的操作,由于不同厂商的Flash存储器在操作命令上可能会有一些细微的差别,Flash存储器的编程与擦除工具一般不具有通用性,这也是为什么Flash接口电路相对较难调试的原因之一,因此,应在理解Flash存储器编程和擦除的工作原理的情况下,根据不同型号器件对应的命令集,编写相应的程序对其进行操作。
打开AXD Debugger的命令行窗口,执行obey命令:
>obey C:/memmap.txt
此时,2MB的Flash存储器映射到地址空间的0x0000,0000~0x001F,FFFF处,选择菜单Processor Views→Memory选项,出现存储器窗口,在存储器起始地址栏输入Flash存储器的映射起始地址:0x0,数据区应显示Flash存储器中的内容,若Flash存储器为空,所显示的内容应全为0xFF,否则应为已有的编程数据。双击其中的任一数据,输入新的值,对应存储单元的内容应不能被修改,此时可初步认定Flash存储器已能被访问,但是否能对其进行正确的编程与擦除操作,还需要编程验证,通过程序对Flash存储器进行编程和擦除操作,放在下一章的内容里说明。
若使用SDT调试环境,调试过程与上述步骤相似。
5.4.5 10M/100M以太网接口电路
以太网接口电路主要由MAC控制器和物理层接口(Physical Layer,PHY)两大部分构成,而MAC控制器在S3C4510B片内,需要用户作硬件调试的只是外接的物理层接口RTL8201。由于MAC控制器的工作原理相对复杂,相应的特殊功能寄存器也比较多,在此不作详述,对此有兴趣的读者可参考已移植到S3C4510B的uClinux内核代码中对MAC控制器的驱动部分。
RTL8201和S3C4510B均有MII接口,对应引脚及功能定义明确,只要正确连接,一般都能正常工作。当RTL8201正常工作在100Mbps状态时,其发送时钟引脚(Pin7)、接收时钟引脚(Pin16)均应有波形输出,同时,对应的LED指示灯也能正确指示芯片的工作状态。
5.5 印刷电路板的设计注意事项
在本章结束之前,对该系统的印刷电路板(PCB)设计中应注意的事项作一个简要的说明。
在系统中,S3C4510B的片内工作频率为50MHz,其以太网接口电路的工作速率更高达100MHz以上,因此,在印刷电路板的设计过程中,应该遵循一些高频电路的设计基本原则,否则会使系统工作不稳定甚至不能正常工作。印刷电路板的设计人员应注意以下几个方面:
— 注意电源的质量与分配。
— 同类型信号线应该成组、平行分布。
5.5.1 电源质量与分配
在设计印刷电路板时,能给各个单元电路提供高质量的电源,就会使系统的稳定性大幅度的提高。但如何能提高电源的质量,常用的手段有以下几个:
1、 电源滤波
为提高系统的电源质量,消除低频噪声对系统的影响,一般应在电源进入印刷电路板的位置和靠近各器件的电源引脚处加上滤波器,以消除电源的噪声,常用的方法是在这些位置加上几十到几百微法的电容。
同时,在系统中除了要注意低频噪声的影响,还要注意元器件工作时产生的高频噪声,一般的方法是在器件的电源和地之间加上0.1uF左右地电容,可以很好地滤出高频噪声的影响。
2、 电源分配
实际的工程应用和理论都证实,电源的分配对系统的稳定性有很大的影响,因此,在设计印刷电路板时,要注意电源的分配问题。
在印刷电路 板上,电源的供给一般采用电源总线(双面板)或电源层(多层板)的方式。电源总线由两条或多条较宽的线组成,由于受到电路板面积的限制,一般不可能布得过 宽,因此存在较大的直流电阻,但在双面板得设计中也只好采用这种方式了,只是在布线的过程中,应尽量注意这个问题。
在多层板的设计中,一般使用电源层的方式给系统供电。该方式专门拿出一层作为电源层而不再在其上布信号线。由于电源层遍及电路板的全面积,因此直流电阻非常的小,采用这种方式可有效的降低噪声,提高系统的稳定性。
5.5.2 同类型信号线的分布
在各种微处 理器的输入输出信号中,总有相当一部分是相同类型的,例如数据线、地址线。对这些相同类型的信号线应该成组、平行分布,同时注意它们之间的长短差异不要太 大,采用这种布线方式,不但可以减少干扰,增加系统的稳定性,还可以使布线变得简单,印刷电路板的外观更美观。
以本系统的印刷电路板设计为例,成组的信号线主要是数据线和地址线,可在元器件位置确定后,首先完成他们的布线,尽可能做到成组、平行分布,同时应尽可能的短。然后在进行各种控制信号的布线,最后处理电源和接地引脚。
5.6 本章小节
本章主要介绍S3C4510B的基本结构和工作原理,同时介绍了设计一个基于S3C4510B的最小硬件系统的详细步骤、实现细节以及硬件系统的调试方法等内容。
需要说明,本章中所使用的器件和电路等,可能不是最优的,但可以保证是能正常工作的,在系统开发的过程中,不同的人会碰到不同的问题,本章的内容只是对笔者系统开发过程的一个描述和简要的总结,希望能对读者的系统设计工作有一点帮助。