arm9+linux fl2440 第一次开机烧录

来源:互联网 发布:二木淘宝店 编辑:程序博客网 时间:2024/05/23 21:17

一、烧录相关软件下载

USB转串口相关芯片驱动  :  CH341SER.ZIP
J-link驱动             :  Setup_JLinkARM_V410i.exe
windows下tftp服务器工具:  tftpd32.exe

注意:
1, 只有在bootloader阶段才能使用j-link下载调试,一旦Linux运行起来后,j-link就不能再使用了。
2, 如果开发板上没有出厂时的wince系统,就可以跳过前面的擦除出厂系统自带bootloader的过程,直接使用j-link下载bootstrap程序并烧录u-boot 
3,所有的flash都只能由1 write成0,不能由0 write成1; 如果要从0变为1,只能erase; 所以在往flash写数据之前,必须先擦除要写的地址空间;

烧录文件说明:
--------------------
bootstrap-s3c2440.bin
bootstrap文件是郭工用汇编写的一段代码,主要用来初始化CPU外部的SDRAM;在烧录时,该程序需要使用j-link下载到0x0(CPU内部SRAM)地址上去运行,另外此程序不需要烧录到Nandflash上。
u-boot-s3c2440.bin
--------------------
u-boot就相当于电脑的BIOS程序,该程序用来烧录/启动Linux系统等。在运行完bootstrap后,我们需要使用j-link将它加载到0x33f80000(CPU外部SDRAM)中去运行,当他在内存中运行起来后,再使用nand write命令将他烧录到nandflash的0地址上去;

linuxrom-s3c2440.bin
--------------------
linuxrom是linux系统文件,我们需要在u-boot运行时,使用tftp命令下载到SDRAM的0x30008000地址上,然后再使用nand write命令将其烧录到nandflash的0x100000地址上,记得flash再写之前一定要先使用nand erase命令擦除。


二、连接串口和用j-link烧写程序

1,在安装完USB转串口驱动后,然后右击我的电脑,打开设备管理器,在端口的地方可以看到USB转串口的串口号(我的是COM8)


2,然后secureCRT如下设置,点击连接


然后就可以看到select Menu,接下来选择6,再选择0,然后y,这样就干掉了开发板的出场设置,接下来用jlink烧写我们自己的程序。

3,如果成功安装了jlink 工具的话,我们就能够运行这个j-link commander,然后按如下步骤来烧写

j-link加载u-boot命令:(j-link是可以直接操作CPU以及CPU内部的SRAM)
--------------------
h   停止CPU中正在执行的程序,如果没有停下,可以多按几次h
speed 12000   设置J-link调试速度为12M
loadbin loadbin E:\bootfile\bootstrap-s3c2440.bin 0       加载bootstrap程序到CPU内部的4K SRAM中运行
setpc 0     让PC寄存器指向SRAM的起始地址,该地址放的是刚才下载的bootstrap程序
g           开始执行bootstrap程序,该程序用来初始化外部扩展的64M SDRAM,地址空间为0x3000 0000~(0x3000 0000+64M)
h           停止bootstrap程序的执行,如果没有停下,可以多按几次h
loadbin E:\fl2440_bin\u-boot-s3c2440.bin 0x33f80000   将u-boot加载到SDRAM的0x33f80000
setpc 0x33f80000    使PC寄存器指向0x33f80000,即u-boot程序的第一条代码
g      开始执行u-boot程序

4,烧写完之后,会出现下面的运行界面,

U-Boot 2010.09 (Jan 26 2016 - 10:34:01)

DRAM:  64 MiB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0
[fl2440@shaocongshuai]#
[fl2440@shaocongshuai]#

三、u-boot模式下将程序烧写进nandflash

此时u-boot就在内存中运行起来了,然后要让u-boot.bin 文件烧到nandflash上,让其能够直接启动, 在这之前的删除之前nandflash上的数据,相当于格式化系统盘。

[fl2440@shaocongshuai]# nand scrub

然后运行tftpd32.exe通过网络将文件下载到u-boot上

[fl2440@shaocongshuai]# set ipaddr 192.168.1.244

[fl2440@shaocongshuai]# set serverip 192.168.1.93

I. 设置u-boot环境变量:
-----
set ethaddr    设置fl2440开发板上的u-boot程序中的MAC地址
set ipaddr     设置fl2440开发板上的u-boot程序中的IP地址
set serverip   指定tftp下载时使用的tftp服务器的IP地址

save              保存所设置的环境变量

reset             u-boot环境下的重启


注意

不管怎么样,serverip和ipaddr 必须处在同一网段内.

1.如果是网线连接的是无线路由器的LAN口,则serverip是linux下搭建的tftp服务器的ip

2.如果是用的本地连接,则serverip是本地连接手动设置的ipv4的ip(只要是私有ip),网关、dns可以不设置(处在同一局域网内)。本地连接时ipv4的ip(也就是serverip)设置必须是手动设置,不能dhcp,防止与pc的无线网路发生冲突。而且本地连接的网卡默认是关闭的,只有下载是才会使能。windows下的tftpd的server interface只有在下载是才会显示serverip.


II. 下载并烧录u-boot程序:
-----
tftp 30008000 u-boot-s3c2440.bin   将u-boot临时下载到SDRAM的30008000地址
nand erase 0 100000   将nandflash的0~1M的分区擦除,该分区是用来存放u-boot程序的;
nand write 30008000 0 ${filesize} 将刚下载到SDRAM 30008000地址上的u-boot写到nandflash的0地址偏移处,大小为下载的U-boot文件大小;

III. 下载并烧录linux系统:
-----
tftp 300008000 linuxrom-s3c2440.bin   将linux系统程序临时下载到SDRAM的30008000地址
nand erase 100000 F00000   将nandflash的1M~16M的分区(总共15M)擦除,该分区是用来存放linux系统的;
nand write 30008000 100000 ${filesize} 将刚下载到SDRAM 30008000地址上的linux系统写到nandflash的1M地址偏移处,大小为下载的linux系统文件大小;

四、设置环境变量让系统一上电后自动加载Linux内核

[fl2440@shaocongshuai]# set bootargs 'console=ttyS0,115200 mem=64M rw loglevel=7'
[fl2440@shaocongshuai]# set bootcmd 'nand read 30008000 100000 f00000;bootm 30008000'.

[fl2440@shaocongshuai]# pri
baudrate=115200
ethaddr=08:00:3e:93:0a:5b
ipaddr=192.168.1.244
serverip=192.168.1.93
netmask=255.255.255.0
ethact=dm9000
bkr=tftp 30008000 linuxrom-s3c2440.bin;bootm 30008000
bootdelay=3
stdin=serial
stdout=serial
stderr=serial
bootargs=console=ttyS0,115200 mem=64M rw loglevel=7
bootcmd=nand read 30008000 100000 f00000;bootm 30008000

Environment size: 336/131068 bytes

附上:

ARM CPU:  Samsung S3C2440(ARM920T, ARMv4t)
RAM:
   SRAM   (CPU片内的SRAM,只有4K)  --NGCS0(0x0000 0000~+4K)
   SDRAM  (外扩的32M*2=64M SDRAM, Samsung K4S561632C-TC75)  --NGCS6(0x3000 0000~+64M)
   DDRAM  (NC)
 
Flash:
   Nandflash  (Samsung 256MB*1 K9F2G08)
   Norflash   (NGCS0 --)
  
内存32MB/4个Bank = 一个bank 8MB
K4S561632C 总共有13行,9列
访问时,先通过addr0~addr12给行地址,选定相应行;
再通过addr0~addr8 给列地址
SDRAM单片是16位的数据线(DQ0~DQ15)
+-+-+-+-+   
+-+-+-+-+
+-+-+-+-+
+-+-+-+-+

13*9=2^22=4MB 一次是读16个位(即2个字节),总共寻址8MB
L(Lower)DQM和U(Upper)DQM负责选择低字节还是高字节给CPU

BA0~BA1这两个线是用来控制究竟选中SDRAM里的哪一个Bank

CPU是否选中SDRAM工作,是由SDRAM的NSCS这个引脚决定的,原理图
上他接到了CPU的NGCS6上,所以SDRAM的地址线空间是从0x3000 0000开始

http://img.my.csdn.net/uploads/9425_130970411215O5.jpg

在开发板中,SDRAM连接到内存控制器的Bank6中,它的开始内存地址是0x30000000,大小为64M,即0x20000000。 ARM Linux kernel将SDRAM的开始地址定义为PHYS_OFFSET。经bootloader加载kernel并由自解压部分代码运行后,最终kernel被放置到KERNEL_RAM_PADDR(=PHYS_OFFSET + TEXT_OFFSET,即0x30008000)地址上的一段内存,经此放置后,kernel代码以后均不会被移动。

在board/samsung/smdk2410/config.mk文件中
  TEXT_BASE = 0x33F80000

0 0
原创粉丝点击