Mini2440开发板及程序烧录、启动方式
本篇博客内容仅作为学习使用,如有侵权,请联系删除。
Mini2440是一款ARM9开发板,ARM9属于armv4t架构,由友善之臂开发,官方提供购买路径以及开发板最新的使用手册http://www.arm9.net。其外形如图:
注意:由于Mini2440开发板中采用的SRAM和FLASH芯片是多款芯片混用的,下文中的引用的电路图都是官方资料自带的,和我购买的板子上的实际芯片型号可能有区别,但是芯片的驱动控制都是相互兼容的。
一、Mini2440硬件资源(我购买的开发板)
- CPU处理器: Samsung S3C2440A,主频400MHz,最高533Mhz;
- SDRAM内存: Mini2440外接两片32MB的SDRAM(型号EM63A16STS-5G),它们并在一起形成32位总线数据宽度,使用了nGCS6片选。物理起始地址为0x30000000。 SDRAM 时钟频率高达100MHz;
- NAND FLASH存储: 在板256MB NAND FLASH(型号K9F2G08U0C), 掉电非易失;
- NOR FLASH:在板2M NOR FLASH(型号S29AL016D70TF102),掉电非易失,已经安装BIOS;
- 标准配置为统宝3.5”真彩LCD,分别率240x320,带触摸屏;
- 接口和资源:
- 1个100M以太网RJ-45接口(采用DM9000网络芯片)
- 3个串行口
- 1个USB Host
- 1个USB Slave B型接口
- 1个SD卡存储接口
-1路立体声音频输出接口,一路麦克风接口
- 1个2.0mm间距10针JTAG接口
- 4 USER Leds
- 6 USER buttons(带引出座)
- 1个PWM控制蜂鸣器
- 1个可调电阻,用于AD模数转换测试
- 1个I2C总线AT24C08芯片,用于I2C总线测试
- 1个2.0 mm间距20pin 摄像头接口
- 板载实时时钟电池
- 电源接口(5V),带电源开关和指示灯
- 扩展接口 :
1个34 pin 2.0mmGPIO接口
1个40 pin 2.0mm 系统总线接口
二、3SC2440启动方式
S3C2440对外引出了27根地址线ADDR0~ADDR26,它最多能够寻址128MB,而S3C2440的寻址空间可以达到1GB,这是由于S3C2440将1GB的地址空间分成了8个BANKS(Bank0~Bank7),其中每一个BANK对应一根片选信号线nGCS0~nGCS7,当访问BANKx的时候,nGCSx管脚电平拉低,用来选中外接设备, S3C2440通过8根选信号线和27根地址线,就可以访问1GB。如下图所示:
其中Bank0~Bank5可以焊接ROM或SRAM类型存储器,Bank6~Bank7可以焊接ROM,SRAM,SDRAM类型存储器,也就是说,S3C2440的SDRAM内存应该焊接在Bank6~Bank7上,最大支持内存256M,Bank0~Bank5通常焊接一些用于引导系统启动小容量ROM,具体焊接什么样存储器,多大容量,根据每个开发板生产商不同而不同。
以Mini2440开发板为例:将两片32M,16位宽SDRAM内存(型号HY57V561620FTP)焊接在Bank6和Bank7上,并联形成64M,32位内存。
- A0-A12是地址线:行地址、列地址复用,行地址使用A0-A12(13条),列地址使用A0-A8(9条)。 BA0-BA1是bank选择引脚。(bank选择与行地址(row address)同时下发,在列地址下发时,有其他用途)。
- 这个SDRAM有:13根行地址线 RA0-RA12 9根列地址线 CA0-CA8 2根BANK选择线 BA0-BA1;SDRAM的地址引脚是复用的,在读写SDRAM存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。$\overline{RAS}$是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;$\overline{CAS}$是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中;
- 需要注意的是LADDR2接的引脚是A0,这是因为一个地址对应4个字节,32位数据位宽。
- BA0,BA1接ADDR24,ADDR25,为什么用这两根地址线呢?BA0~BA1代表了SDRAM的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为64MB,那就需要A25~A0(64M=2^26)地址线来寻址,所以BA1~BA0地址线应该接到S3C2440的ADDR25~ADDR24引脚上。13根行地址线+9根列地址线 = 22根。另外HY57V561620F一个存储单元是2个字节,相当于有了23根地址线。BA0,BA1是最高地址位,所以应该接在ADDR24,ADDR25上。
- SDRAM地址空间:0x30000000~0x33F000000;
由于S3C2440是32位芯片,理论上讲可以达到4GB的寻址范围,除去上述8个BANK用于连接外部设备,还有一部分的地址空间是用于设备特殊功能寄存器,其余地址没有被使用。
2.1 启动方式
系统启动取决于S3C2440 CPU的OM0、OM1两个引脚的取值。在Mini2440中,直接将OM1接地(永远为0),OM0作为拨码开关,来选择是从NAND启动(接地,0)还是从NOR16-bit启动(悬空,1)。
NAND FLASH:ROM,容量大,适用于数据存储,ARM不能从NAND 中直接启动,主要是因为NAND FLASH不具有地址线,没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。但是它有专门的控制接口与CPU相连,数据总线为8-bit,但这并不意味着NAND FLASH读写数据会很慢。大部分的优盘或者SD卡等都是NAND FLASH制成的设备。
NOR FLASH:ROM,容量小,和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码。
SDRAM: RAM,容量大,操作系统等大型软件都运行在SDRAM中。
2.2 NAND启动
图1右侧是选择从NAND FLASH引导启动(启动模式选择开关拔到NAND端,此时OM0管脚拉低),S3C2440的NAND 控制器会自动把NAND FLASH中的前4K代码数据搬到内部SRAM中(在S3C2440片内有一块被称为SteppingStone的片内SRAM,它的大小为4K),片内SRAM被映射到nGCS0片选的空间(nGCS0片选的空间,即0x00000000),CPU从0x00000000位置开始运行程序。所以当中断发生的时候,PC指针指向0x0+offset(如:IRQ就是0x18),可以找到中断服务程序的入口。
Mini2440开发板就是将采用了的256MB的NAND FLASH(型号K9F2G08U0C)。
2.3 NOR启动
图1左侧对应NOR FLASH启动(启动模式选择开关拔到NOR端,此时OM0管脚拉高),0x00000000就是2MB NOR FLASH实际的起始地址,NOR FLASH中的程序就从这里开始运行,不涉及到数据拷贝和地址映射。
注意此时,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000 。
Mini2440开发板就是将2M的NOR FLASH(型号S29AL016D70TF102)焊接在了Bank0上,用于存放系统引导程序Bootloader。
- 地址线A1-A22,共22条(请注意地址是从A1开始的,这意味着它每次最小的读写单位是2字节),实际我们的开发板上只用了A1-A20条地址线,因为与A21、A22相连的S29AL016D70TF102的相应引脚是悬空的。;
- 数据线D0-D15,共16条;
2.4 程序大于4kb
那么当程序大于 4kb 的时候,当我们以 NAND FLASH启动后,前面的4kb 被拷贝到 片内RAM中去执行(自动完成)。我们在这前4kb的程序中初始化SDRAM,然后将NAND FLASH剩下的程序拷贝到 SDRAM中(不是只有4kb 被拷贝到片内RAM中执行了嘛)然后跳转到 SDRAM中去执行剩下的程序。
那么也就是说 通常当程序大于 4kb的 时候,我们就需要把程序拷贝到SDRAM中去运行。(程序小于4kb 那么也就可以不用拷贝了,以NAND FLASH方式 启动后,程序全被拷贝到 片内4kb的片内SRAM中去运行。)
那么,既然程序大于4kb的时候需要从 NAND FLASH中拷贝到 SDRAM中去运行。自然可以想到 烧到 NAND FLASH中的程序前面一部分代码应该 是初始化SDRAM(程序最终需要拷贝到SDRAM中去运行)和 将NAND FLASH中的剩余的程序拷贝到SDRAM中去(全考过去也行,方便点),然后跳转到SDRAM中执行。
采用NOR FLASH启动时,由于NOR FLAH为2MB、因此可以不用拷贝到SDRAM运行,但是我们也可以尝试这么做,可以参考s3c2440中断程序(烧录到NORFlash,运行在SDRAM中)
2.5 总结
NAND 启动时,地址0x00000000为内部SRAM映射的地址;
NOR启动时,地址0x00000000为NOR FLASH的实际起始地址。
向NOR FLASH中写数据需要特定的命令时序,而向内存中写数据可以直接向内存地址赋值。
三、基本电路
3.1 电源系统
Mini2440开发板直接使用外接5V电源,通过降压芯片产生整个系统所需要的三种电压:3.3V、1.8V、1.25V。降压芯片采用LM117-1.8V、LM117-3.3V等。
整个系统的电源通断是由S1拨动开关控制的,它不能通过软件实现开关机。
为了方便用户外接其他电源,开发板还设计了一个电源接口CON8,它是一个白色2.0mm间距的单排插座,中间均为“地”,两侧均为5V。注意,这两个5V并非是相通的,其中一个连接了外部电源的5V,另外一个则连接了经过拨动开关S1之后的5V。
它们的连接关系和相应的实物标称见下图:
3.2 复位电路
Mini2440开发板采用复位芯片MAX811实现CPU低电平复位。
3.3 LED电路
开发板具有4个用户可编程LED,它们直接与CPU的GPIO相连接,低电平有效(点亮):
LED1 | LED2 | LED3 | LED4 | |
GPIO | GPB5 | GPB6 | GPB7 | GPB8 |
可复用为 | nXBACK | nXREQ | nXDACK1 | nDREQ1 |
使能 | 低电平 | 低电平 | 低电平 | 低电平 |
3.4 按键电路
开发板总共有6个用户测试用按键,它们均从CPU中断引脚直接引出,属于低电平触发,这些引脚也可以复用为GPIO和特殊功能口,为了用户把它们引出作为其他用途,这6个引脚也通过CON12引出,6个按键和CON12的定义如下:
K1 | K2 | K3 | K4 | K5 | K6 | |
中断 | EINT8 | EINT11 | EINT13 | EINT14 | EINT15 | EINT19 |
复用GPIO | GPG0 | GPG3 | GPG5 | GPG6 | GPG7 | GPG11 |
特殊功能 | - | nSS1 | SPIMISO1 | SPIMOSI1 | SPICLK1 | TCLK1 |
对应CON12 | 1 | 2 | 3 | 4 | 5 | 6 |
3.5 A/D接口
Mini2440开发板引出4路A/D(模数转换)转换通道,它们位于板上的CON4-GPIO接口。为了方便测试, AIN0连接到了开发板上的可调电阻W1,原理图如下所示:
3.6 蜂鸣器接口
蜂鸣器连接到GPB0接口,通过PWM脉冲波输出控制(高电平触发)。
3.7 串口
S3C2440本身总共有3个串口UART0、1、2,它们分别对应Mini2440开发板的CON1、CON2、CON3接口。这3个接口都是从CPU直接引出的,是TTL电平。为了方便用户使用,其中UART0做了RS232电平转换,它们对应于COM0,可以通过附带的直连线与PC机互相通讯。
CON1,CON2,CON3在开发板上的位置和原理图中的连接定义对应关系如下图所示。
3.8 USB接口
Mini2440提供两种USB接口:
- 一种是USB Host,和PC机一样的USB接口,可以接USB摄像头、USB键盘、USB鼠标、优盘等常见的USB外设。
- 另外一种是USB Slave,我们一般使用它来下载程序到目标板,当开发板装载了WinCE系统时,它可以通过ActiveSync软件和Windows系统进行同步。
3.9 LCD接口
Mini2440开发板LCD接口是一个41 pin 0.5mm间距的白色座,其中包含了常见LCD所用的大部分控制信号(行场扫描、时钟和使能等),和完整的RGB数据信号(RGB输出为8:8:8,即最高可支持1600万色的LCD);为了用户方便试验,还引出了PWM输出(GPB1可通过寄存器配置为PWM),和复位信号(nRESET),其中LCD_PWR是背光控制信号。
另外,37、38、39、40为四线触摸屏接口,它们可以直接连接触摸屏使用。
J2为LCD驱动板供电选择信号,驱动板都使用5V供电。
Mini2440搭配的LCD有多种型号,比如TD35、P35,我这里使用的是P35型号。
3.10 EEPROM
Mini2440开发板外接了一个I2C信号引脚的EEPROM芯片AT24C08,它有1024字节,供用户测试I2C总线。
3.11 网络接口
Mini2440开发板外接DM9000网卡芯片,可以自适应10/100M网络。
3.12 音频接口
S3C2440内置I2S总线接口,可直接外接8/16比特的立体声CODEC,开发板采用基于I2S总线的UDA1341芯片实现音频解码系统,该芯片内部寄存器的初始化和设置则是采用 L3-bus 总线连接控制实现的,在这里沿用了三星公板的设计,分别使用CPU的GPB2、GPB3、GPB4 端口模拟实现 L3-Bus 规范的 L3MODE、L3DATA、L3CLOCK,它们在初始化完 UDA1341 以后就不再有用了,因此这三条控制线也可以使用普通的单片机模拟实现。
音频系统的输出为开发板上的常用3.5mm孔径插座,输入分为两路,一路为板载麦克风,另一路通过 CON10 白色 2.0mm 插座引出。两路音频输入通道的驱动是有些不同的,目前板载 MIC 对应的通道是可以录音使用的,注意:开发板并非专业的录音设备,音频输入的处理电路佷简单,录音时尽量把音源靠近麦克风。
3.13 JTAG接口
当开发板从贴片厂下线,里面是没有任何程序的,这时我们一般通过 JTAG 接口烧写第一个程序,就是 Superboot,借助 Superboot 可以使用 USB 口下载更加复杂的系统程序等.
除此之外,JTAG 接口在开发中最常见的用途是单步调试,不管是市面上常见的 JLINK还是 ULINK,以及其他的仿真调试器,最终都是通过 JTAG 接口连接的。标准的 JTAG 接口是 4 线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线,加上电源和地,一般总共 6 条线就够了;为了方便调试,大部分仿真器还提供了一个复位信号。都可以称为标准的 JTAG 接口。
因此,标准的 JTAG 接口是指是否具有上面所说的 JTAG 信号线,并不是 20Pin 或者10Pin 等这些形式上的定义表现。这就如同 USB 接口,可以是方的,也可以扁的,还可以是其他形式的,只要这些接口中包含了完整的 JTAG 信号线,都可以称为标准的 JTAG 接口。
Mini2440开发板提供了包含完整 JTAG 标准信号的10 Pin JTAG 接口,各引脚定义如图。
说明:对于打算致力于 Linux 初学者而言,JTAG 接口基本是没有任何意义和用途的,因为大部分开发板都已经提供了完善的 BSP,这包括最常用的串口和网络以及 USB 通讯口,当系统装载了可以运行的 Linux 系统,用户完全可以通过这些高级操作系统本身所具备的功能进行各种调试,这时是不需要 JTAG 接口的;即使你可以进行跟踪,但鉴于操作系统本身结构复杂,接口繁多,单步调试犹如大海捞针,毫无意义可言。
想一想你手头使用的 PC 机就知道了,或许你从没有见过甚至听过有谁会在 PC 主板上插一个仿真器,来调试 PCI 这样接口的 WindowsXP 或者 Linux 驱动。这就是为什么你经常见到或者听到那么多人在讲驱动“移植”,因为大部分人都是参考前辈的实现来做驱动的。
JTAG 仅对那些不打算采用操作系统,或者采用简易操作系统(例如 uCos2 等)的用户有用。大部分开发板所提供的 Bootloader 或者 BIOS 已经是一个基本完好的系统了,因此也不需要单步调试。
3.14 GPIO
GPIO 是通用输入输出口的简称,本开发板带有一个 34 Pin 2.0mm 间距的 GPIO 接口,标称为 CON4,如图。
实际上,CON4 不仅包含了很多富余的 GPIO 引脚,还包含了一些其他 CPU 引脚,如 AD0-AIN3,CLKOUT 等。你所看到的图中的 SPI 接口、I2C 接口、GPB0 和 GPB1 等,它们其实也是 GPIO,不过是以特殊功能接口来标称定义的,这些都可以通过相应的 CPU 寄存器来设置更改它们的用途,详细的接口资源见下表。
CON4 | 引脚名称 | 说明(有些端口可复用) | CON4 | 引脚名称 | 说明(有些端口可复用) |
1 | VDD5V | 5V电源(输入或者输出) | 2 | VDD33V | 3.3V电源(输出) |
3 | GND | 地 | 4 | nRESET | 复位信号(输出) |
5 | AIN0 | AD输入通道0 | 6 | AIN1 | AD输入通道1 |
7 | AIN2 | AD输入通道2 | 8 | AIN3 | AD输入通道3 |
9 | EINT0 | EINT0/GPF0 | 10 | EINT1 | EINT1/GPF1 |
11 | EINT2 | EINT2/GPF2 | 12 | EINT3 | EINT3/GPF3 |
13 | EINT4 | EINT4/GPF4 | 14 | EINT5 | ENT5/GPF5 |
15 | EINT6 | EINT6/GPF6 | 16 | EINT8 | ENIT8/GPG0 |
17 | EINT9 | EINT9/GPG1 | 18 | EINT11 | EIT11/GPG3/nSS1 |
19 | EINT13 | EINT13/GPG5/SPIMISO1 | 20 | EINT14 | EINT14/GPG6/SPIMOSI1 |
21 | EINT15 | EINT15/GPG7/SPICLK1 | 22 | EINT17 | EINT17/GPG9/nRST1 |
23 | EINT18 | EINT18/GPG10/nCTS1 | 24 | EINT19 | ENIT19/GPG11 |
25 | SPIMISO | SPIMISO/GPE11 | 26 | SPIMOSI | SPIMOSI/EINT14/GPG6 |
27 | SPICLK | SPICLK/GPE13 | 28 | nSS_SPI | nSS_SPI/ENT10/GPG2 |
29 | I2CSCL | I2CSCL/GPE14 | 30 | I2CSDA | I2CSDA/GPE15 |
31 | GPB0 | TOUT0/GPB0 | 32 | GPB1 | TOUT1/GPB1 |
33 | CLKOUT0 | CLKOUT0/GPH9 | 34 | CLKOUT1 | CLKOUT1/GPH10 |
3.15 CMOS CAMERA
S3C2440带有CMOS 摄像头接口,在开发板上通过标称为 CAMERA 的接口引出。它是一个 20 脚 2.0mm 间距的针座,用户可以直接使用我们提供的 CAM130 摄像头模块;其实CAM130摄像头模块上面没有任何电路,它只是一个转接板,它直接连接使用了型号为ZT130G2 摄像头模块,它们的定义如下图所示。
说明:CAMERA 接口是一个复用端口,它可以通过设置相应的寄存器改为GPIO使用,下表是它对应引脚的 GPIO 列表:
CAMERA | 引脚名称 | 可服用为 | CAMERA | 引脚名称 | 可复用为 |
1 | I2CSDA | GPE15 | 2 | I2CSCL | GPE14 |
3 | EINT20 | GPG12 | 4 | CAMRST | GPJ12 |
5 | CAMCLK | GPJ11 | 6 | CAM_HREF | GPJ10 |
7 | CAM_VSYNV | GPJ9 | 8 | CAM_PCLK | GPJ8 |
9 | CAMDATA7 | GPJ7 | 10 | CAMDATA6 | GPJ6 |
11 | CAMDATA5 | GPG5 | 12 | CAMDATA4 | GPJ4 |
13 | CAMDATA3 | GPJ3 | 14 | CAMDATA2 | GPJ2 |
15 | CAMDATA1 | GPJ1 | 16 | CAMDATA0 | GPJ0 |
17 | VDD33V | 3.3V电源 | 18 | VDD_CAM | VDD_CAM |
19 | VDD28V | 1.8V电源 | 20 | GND | 地 |
3.16 系统总线接口
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了