zoukankan      html  css  js  c++  java
  • 嵌入式Linux之Mini2440开发板及程序烧录、启动方式

    本篇博客内容仅作为学习使用,如有侵权,请联系删除。

    Mini2440是一款ARM9开发板,由友善之臂开发,官方提供购买路径以及开发板最新的使用手册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,BA1ADDR24,ADDR25,为什么用这两根地址线呢?BA0~BA1代表了SDRAM的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为64MB,那就需要A25~A0(64M=2^26)地址线来寻址,所以BA1~BA0地址线应该接到S3C2440ADDR25~ADDR24引脚上。13根行地址线+9根列地址线 = 22根。另外HY57V561620F一个存储单元是2个字节,相当于有了23根地址线。BA0,BA1是最高地址位,所以应该接在ADDR24,ADDR25上。
    • SDRAM地址空间:0x30000000~0x34000000;

    由于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),片内RAM被映射到nGCS0片选的空间(nGCS0片选的空间,即0x00000000),CPU从0x00000000位置开始运行程序。所以当中断发生的时候,PC指针指向0x0+offset(如:IRQ就是0x18),可以找到中断服务程序的入口。

    Mini2440开发板就是将采用了的256MB的NAND FLASH(型号K9F2G08U0C)

    2.3 NOR启动

    图1左侧对应NOR FLASH启动(启动模式选择开关拔到NOR端,此时OM0管脚拉高),0x00000000就是NOR FLASH实际的起始地址,NOR FLASH中的程序就从这里开始运行,不涉及到数据拷贝和地址映射。

    注意此时,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000。

    Mini2440开发板就是将2M的NOR FLASH(型号AM29LV160DB)焊接在了Bank0上,用于存放系统引导程序Bootloader。

    • 地址线A0-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等。

    3.2 复位电路

    Mini2440开发板采用复位芯片MAX811实现CPU低电平复位。

    3.3 LED电路

     

      LED1 LED2 LED3 LED4
    GPIO GPB5 GPB6 GPB7 GPB8
    可复用为 nXBACK nXREQ nXDACK1 nDREQ1
    使能 低电平 低电平 低电平 低电平

    3.4 按键电路

     

      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接口。

    3.6 蜂鸣器接口 

    蜂鸣器连接到GPB0接口,通过PWM脉冲波输出控制(高电平触发)。

    3.7 串口

     

    S3C2440本身总共有3个串口UART0、1、2,它们分别对应Mini2440开发板的CON1、CON2、CON3接口。这3个接口都是从CPU直接引出的,是TTL电平。为了方便用户使用,其中UART0做了RS232电平转换,它们对应于COM0,可以通过附带的直连线与PC机互相通讯。

    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为四线触摸屏接口,它们可以直接连接触摸屏使用。

    3.10 EEPROM

    Mini2440开发板外接了一个I2C信号引脚的EEPROM芯片AT24C08,它有256字节,供用户测试I2C总线。

    3.11 网络接口

    Mini2440开发板外接DM9000网卡芯片,可以自适应10/100M网络。

    3.12 音频接口

    3.13 JTAG接口

    3.14 GPIO

    3.15 CMOS CAMERA

    3.16 系统总线接口

    更多信息请参考官方手册,这里不过多一一列举。

    四、开发板使用(程序烧录)

    开发板出厂时NOR FLASH和NAND FLASH都是烧录了Bootloader程序的。

    4.1 启动方式选择

    Mini2440开发板拨动开关S2到NOR FLASH一侧时,系统采用NOR FLASH启动。

    Mini2440开发板拨动开关S2到NAND FLASH一侧时,系统采用NAND FLASH启动。

    4.2 USB转TTL接串口1

    COM1从上到下依次为TXD0、RXD0、VDD5V、GND引脚。我们将USB转TTL模块的接口和COM1接口按如下方式连接:

    • TXD -> RXD
    • RXD -> TXD

     

    我们按上面要求连接好串口后,打开设备管理器,我们可以看到我们的串口号:COM5;

     

    主要注意的是这里如果你使用的usb转串口:需要安装PL2303to串口驱动,如果使用的是USB转TL:需要安装CH340驱动(USB串口驱动)驱动

    我们设置串口助手参数如下,并打开助手:

    我们采用NAND启动方式,给开发板上电,uboot启动时会打印出如下等信息:

    4.3 MiniTools工具使用(烧录到NAND FLASH)

    Minitools是一款Android内核烧录软件,MiniTools是友善之臂提供的全新USB下载工具,可以方便来Mini2440烧写操作系统,就像刷手机一样刷开发板:

    • 无需串口连接:MiniTools完全使用USB传输数据,无需串口,让你的桌面更整洁;
    • 真正一键烧写:无需从串口输入命令,再点选USB下载,并且要通过多个步骤才能烧写整个系统,较为繁琐,MiniTools真正实现一键烧写,烧写文件可单选,也可全选;
    • 支持32/64-bit电脑:MiniTools安装程序已经包含32/64-bit所需要的下载驱动,通吃所有Windows平台;
    • 跨平台:MiniTools采用Qt4开发,可支持各种Windows和Linux发行版;
    • 支持裸机程序:支持裸机程序的直接下载运行和烧写;

    通过MiniTools工具,可直接通过USB数据线,把各个系统方便的安装到开发板上,并快速启动,更加方便调试开发。在使用MiniTools工具之前,需要安装SuperVivi-Transfer-Tool-Complete驱动,双击exe文件进行安装:

    安装完成之后,将usb连接到开发板USB Slave接口,并打开设备管理器查看设备是否正常,如果出现驱动异常,类似下图:

    此时可以选择使用驱动人生进行驱动修复。

    使用USB烧写系统前的准备工作:

    (1) 将开发板上的S2开关切换到NOR FLASH一侧;

    (2)上电并开机,开发板将进入USB下载模式,此时,如果你连接了串口线并打开了串口终端,终端上会显示Hello USB Loop:

    (3) 用USB线连接电脑与开发板,MiniTools左下角将显示已连接开发板,串口终端会显示USB Mode:Connected

    (4) 接下来,你就可以使用MiniTools烧写系统了。

    注意:只有Superboot才能配合MiniTools的USB下载功能。

    (5) 要开始烧写系统,请在主界面的左侧,选择你要烧写的系统,例如Linux,将出现该系统的配置界面,如下图所示

    (6)  你可以手动选择zImage、文件系统等烧写文件,手工填写Kernel CommandLine,不过,一个更方便的方法是点击界面上的【选择images目录】按钮,并将目录定位到images目录下,MiniTools会自动读取所选images目录下的FriendlyARM.ini配置文件,将内核和文件系统等烧写信息填写到界面上。

    noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

    使用MiniTools,你可以全选烧写更新整个系统,也可以单选烧写其中的某个部分,例如只烧写Kernel,或者只烧写文件系统等。设置完成后,点击【开始烧写】按钮进行一键烧写,烧写界面如下图所示:

     (7) 烧写完成后,点击左下角的【快速启动】按钮,可以直接从Nand Flash启动系统,而无需拨动S2和电源开关.

    4.4 Jlink程序烧录

    由于当前我手上没有Jlink这里就不演示了,通过jlink向NOR FLASH烧录Superboot可以参考玩转mini2440开发板之【如何使用JLink下载烧录boot程序到NorFlash】

     

    参考文章

    [1] S3C2440存储器地址段(Bank)

    [2]S3C2440开发板 NOR启动 和 NAND启动

    [3]s3c2440的内存管理机制

    [4]mini2440用户手册

    [5]mini2440原理图

    [6]ROM 、RAM和FLASH 的区别

  • 相关阅读:
    元组,字典
    python字符串
    tensorflow 学习笔记
    tensorflow example1
    python第二章(2)列表
    python3.5学习第二章(1)标准库,bytes
    类加载过程
    数据值与地址值
    类的初始化与实例化顺序
    SpringCloudBus
  • 原文地址:https://www.cnblogs.com/zyly/p/14832238.html
Copyright © 2011-2022 走看看