我的AT91RM9200板
来源:互联网 发布:南风知我意2txt下载 编辑:程序博客网 时间:2024/05/08 04:15
CYCLONE板子移植笔记
马志军
一:板载资源
■ 32MB HYNIX SDRAM 连接于CS1上。起始地址:0x2000000
■ 2MB AMD NOR FLASH 连接于CS0上。起始地址:0x1000000
■ 16MB INTEL NOR FLASH连接于CS2上。起始地址:0x3000000
■ 32MB SANMSUNG NAND FLASH连接于CS3上。起始地址:0x4000000
■ 256KB IIC EEPROM连接于 TWI
■
■ RTC 连接于 TWI
■ 2.0 CAN连接于 NPCS1
■ 3 RS232
■ 1 RS485
■ 1 SD CARD
■ 1 USB HOST
■ 1 USB DEVICE
■ 1 TFT LCD CONTROLLER连接于 NCS4
■ 1 TOUCH连接于 TWI
■ 1 CHARACTER LCD(128X64)
■ 8 KEYS
■ 8 LEDS
■ EXTERN PORTS
二:UBOOT常用命令使用介绍
1:IIC和SDRAM相互拷贝命令
◆ 命令:icpout
作用:拷贝IIC中的数据到SDRAM中
格式:icpout chip_num addr[.1,.2,.3] SDRAM_start_addr length
解释:
chip_num代表第几个iic器件
addr为地址,括号中的数字代表使用的IIC器件的地址宽度
(1表示8位,2表示16位,3表示24位)
SDRAM_start_addr为SDRAM中起始地址
length为需要拷贝的数据长度
(注意:该命令由马志军编写,源UBOOT不具备该命令)
例如:将第IIC总线上第1个存储器的0地址开始处的32个字节拷贝到SDRAM的0开始处。(注意程序中的第一个编号为0)
icpout 0 0.2 00000000 32
◆ 命令:icpin
作用:拷贝SDRAM中的数据到IIC中
格式:icpin chip_num addr[.1,.2,.3] SDRAM_start_addr length
解释:
chip_num代表第几个iic器件
addr为地址,括号中的数字代表使用的IIC器件的地址宽度
(1表示8位,2表示16位,3表示24位)
SDRAM_start_addr为SDRAM中起始地址
length为需要拷贝的数据长度
(注意:该命令由马志军编写,源UBOOT不具备该命令)
例如:将第IIC总线上第1个存储器的0地址开始处的32个字节拷贝到SDRAM的0开始处。(注意程序中的第一个编号为0)
icpin 0 0.2 00000000 32
◆ 命令:imw
作用:IIC器件指定地址处数据修改
格式:imw chip_num addr[.1,.2,.3] value length
解释:
chip_num代表第几个iic器件
addr为地址,括号中的数字代表使用的IIC器件的地址宽度
(1表示8位,2表示16位,3表示24位)
value为写入指定地址的数据
length为写入的数据长度
例如:将第IIC总线上第1个存储器的0x2500地址开始处的2个字节修改为ffff。(注意程序中的第一个编号为0)
imw 0 2500.2 ffff 2
◆ 命令:imd
作用:查看IIC器件指定地址处数据
格式:imd chip_num addr[.1,.2,.3]
解释:
chip_num代表第几个iic器件
addr为地址,括号中的数字代表使用的IIC器件的地址宽度
(1表示8位,2表示16位,3表示24位)
例如:查看IIC总线上第1个存储器的0x2500地址开始处的数据。(注意程序中的第一个编号为0)
Imd 0 2500.2
◆ 命令:protect
作用:锁定FLASH或解锁FLASH
格式:protect on/off blank num
protect on/off N:Sec_start-Sec_end
protect on/off all
解释:
blank num代表第几个存储器件
N代表第几个存储器件
Sec_start需要操作的扇区首地址
Sec_end 需要操作的扇区尾地址(该地址是下个扇区首地址减1)
例如:锁定FLASH的第二个到第3个扇区
protect on 30020000 3005ffff
例如:解锁FLASH的第二个到第3个扇区
protect off 30020000 3005ffff
protect off 1:2-3
(注意每个flash扇区的地址不一样。结束扇区地址是下一个扇区起始地址减1)
◆ 命令:erase
作用:擦除芯片
格式:erase all
erase N:Sec_start-Sec_end
解释:
N代表第几个存储器件
Sec_start需要操作的扇区首地址
Sec_end 需要操作的扇区尾地址(该地址是下个扇区首地址减1)
例如:擦除储存器所有扇区
erase all
例如:擦除第一块FLASH的第二个和第3个扇区
erase 30020000 3005ffff
erase 1:2-3
(注意每个flash扇区的地址不一样。结束扇区地址是下一个扇区起始地址减1)
◆ 命令:cp[.b,.w.,.l]
作用:存储器相互拷贝命令
格式:cp.b/w/l start_addr end_addr
解释:
b代表单字节拷贝
w代表双字节拷贝
l代表四字节拷贝
start_addr需要拷贝的源起始地址
end_addr 需要拷贝的目标起始地址
(该命令可以在SDRAM和FLASH之间,SDRAM和SDRAM之间,FLASH和FLASH之间相互拷贝)
例如:拷贝SDRAM的0地址处32个字节到FALSH中0地址开始处
cp.b 20000000 30000000 32
cp.w 20000000 30000000 16
cp.l 20000000 30000000 8
◆ 命令:md
作用:存储器查看命令
格式:md start_addr
解释:
start_addr需要拷贝的源起始地址
(该命令可以查看SDRAM和FLASH指定开始地址处的内容)
例如:查看SDRAM的0地址开始处的内容
md 20000000
◆ 命令:flinfo
作用:存储器信息查看
格式:flinfo
解释:查看 FLASH相关信息,包括扇区起始地址,存储器大小,锁定状态等
例如:查看FLASH信息
flinfo
三:目标板的启动过程
本实验板使用的ATMEL的AT91RM9200处理器,该处理器在上电复位后,启动内部的一级boot代码检测各个外设存储器开始的32个字节是否存在有效的向量代码,如果有就下载到内部的16KB RAM运行。如果所有存储器都没有有效向量,存储器启动内部XMODEM协议向串口打出”C”字符,等待PC机下传数据。
在此我们需要用到三个boot代码,bootloader,boot,uboot。前两个文件全部可以从ATMEL网站找到,后一个文件可以从sourceforge网站上找到。bootloader是芯片外用户的一级boot,它负责初始化CPU,IIC设备,SDRAM和串口。然后把后面的boot代码从指定存储器(这儿我们仍然放在IIC器件中)中拷贝到SDRAM指定地址处运行。boot的作用是把UBOOT解压到SDRAM制定地址处并运行。最后uboot再解压LINUX映象到SDRAM,传递参数给LINUX内核,并启动内核。
Bootloader.bin存放在AT
Boot.bin存放在AT
Uboot.bin存放在SDRAM中并的0x21000000开始处。
Uboot.bin.gz存放在INTEL FALSH中0x3002000开始处。
实施步骤1:
1:连接目标板串口和PC串口,打开超级终端,打开实验版上电,此时PC的超级终端中不断显示”C”
2:右键点击超级终端,选择发送文件(使用XMODEM协议),选择Bootloader.bin发送
3:发送完毕后超级终端仍然不断显示”C”,此时右键点击超级终端,选择发送文件(使用XMODEM协议),选择Uboot.bin发送,发送完毕后uboot已经运行,超级终端中可以看到uboot运行的信息。
4:解锁FLASH指定扇区。(命令:protect off 1:1-2)
5:擦除FLASH指定扇区。(命令:erase 1:1-2或erase 30020000 3005ffff)
6:下载Uboot.bin.gz。(命令:loadb)输入命令后回车。此时右键点击超级终端,选择发送文件(使用Kermit协议),选择Uboot.bin.gz发送,发送完毕后请仔细查看终端中显示的起始地址和数据长度。后面有用。
7:拷贝数据到FLASH。(命令:cp.w 21000000 30020000
此时已经在目标板的第一个扇区存入了uboot的压缩影像。
实施步骤2:
下面只要在IIC中放入bootloader和boot文件即可。
1:下载bootloader文件到内存(命令:loadb)回车后,右键点击“发送文件…”,然后选择bootloader.bin文件发送
2:写入下载的数据到IIC器件。(命令:icpin 0 0.2 21000000
3:修改第6个向量区首字节为0x14,这样保证CPU自动读取bootloader时能完整下载完整个bootloader文件。因为CPU自动检测32个字节向量,并以第6个向量的数据作为下载代码的长度。
在此我们必须把偏移地址为0x14的一个字节修改为0x17。(命令:imw 0 14.2 17 1)完成后我们即可下载MyBoot.bin文件
4:下载MyBoot.bin文件到内存(命令:loadb),回车后右键点击超级终端,选择MyBoot.Bin发送
5:写入MyBoot.bin到IIC器件中,偏移地址为0x2500处。(命令:icpin 0 2500.2 21000000 2980)
注意,因为我的MyLoader下载的起始地址是IIC的0x2500地址处,所以此处的MyBoot.bin必须烧写到该地址处。否则MyLoader无法正确下载MyBoot程序并正确运行。
四:可能的问题
1:在移植uboot时,请注意使用板上的FLASH对应的驱动,没有的话在别的板级目录中找一个。
2:INTEL的flash的驱动有一个swap(x)函数,请改成16位交换函数,参考32位交换函数,否则写入flash的16位数据时倒的。
3:请参考bootloader,并在其中添加boot代码拷贝函数。注意bootloader编译后的大小理论上不能大于16K,实际上应该不大于14K,保留2K的堆栈空间。
4:
辅助知识
如何生成Makefile?
首先,您的系统中必须具备以下工具
1:Autoconf
2:Automake
3:m4
4:perl
5:libtool(其中libtool非必须)。
开始制作Makefile文件
生成 Makefile 过程
首先进入 project 目录,在该目录下运行一系列命令,创建和修改几个文件,就可以生成符合该平台的Makefile文件,操作过程如下:
1) 运行autoscan命令
2) 将configure.scan 文件重命名为configure.in,并修改configure.in文件
3) 在project目录下新建Makefile.am文件,并需要单独生成Makefile文件的子目录下也新建Makefile.am文件
4) 在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件(非必须步骤)
5) 运行aclocal命令
6) 运行autoconf命令
7) 运行automake –add-missing命令
8) 运行./confiugre脚本(该命令运行后产生Makefile文件)
Automake
安装指导参见: the 节 called 安装 Automake-1.8 在 第 6 章.
官方下载地址
Automake (1.8):
ftp://ftp.gnu.org/gnu/automake/
Automake的内容
Automake 产生 Makefile.in 文件,与 Autoconf 配合使用。
安装下列程序: acinstall, aclocal, aclocal-1.8, automake, automake-1.8, compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh, missing, mkinstalldirs, py-compile, symlink-tree, ylwrap
简短说明
acinstall是用来安装aclocal-style M4文件的脚本.
aclocal 根据configure.in文件的内容,自动生成aclocal.m4文件。
automake根据Makefile.am文件的内容,自动生成Makefile.in文件。要为一个包建立所有的Makefile.in文件,通过在目录的顶层以没有参数的形式运行automake程序。automake会自动找到每一个合适的Makefile.am (通过扫描configure.in)并且产生相应的Makefile.in。
compile 是编译器的包装脚本。
config.guess是用来为特定的编译、主机或目标架构来尝试猜测标准的系统名称的脚本。
config.sub 是配置验证子脚本。
depcomp在编译程序同时产生其依赖信息的脚本。
elisp-comp 能按字节编译 Emacs Lisp 代码。
install-sh 是能安装程序, 脚本或者数据文件的脚本。
mdate-sh 打印程序和目录更改时间的脚本.
missing 是一个用来填充在安装过程检查出的缺失的GNU程序空位的脚本.
mkinstalldirs产生目录树结构的脚本.
py-compile 编译 Python 程序。
symlink-tree 为整个目录创建符号链接的脚本。
ylwrap 是lex或yacc的包装脚本。
Automake 安装依赖关系
Automake 依赖于: Autoconf, Bash, Coreutils, Diffutils, Grep, M4, Make, Perl, Sed.
- 我的AT91RM9200板
- AT91RM9200的启动过程
- - AT91RM9200
- 移植pcap库到AT91RM9200板的一些总结
- AT91RM9200处理器的启动机制
- AT91RM9200 EMAC的MAC配置
- AT91RM9200处理器的内部启动机制
- ATMEL公司的AT91RM9200调试手册
- mplayer在ARM9(AT91RM9200)上的移植
- AT91RM9200的USB挂载过程
- AT91RM9200与S1D13505的LCD调试全过程
- AT91RM9200平台的辅助时钟研究
- dm9161和at91rm9200的收、发过程
- ATMEL公司的AT91RM9200调试手册
- 基于AT91RM9200+linux平台的MCP2510驱动
- 基于AT91RM9200的以太网接口模块设计
- AT91RM9200引导程序的建立(三)--------U-Boot1.1.4在AT91RM9200上的移植
- AT91RM9200引导程序的建立-U-Boot1.1.4在AT91RM9200上的移植
- Windows Mobile 触摸屏(Touch Panel)截获(pwinuser.h)
- 日记2008.9.25
- 学习了一下,有点收获!继续努力,加油!
- C++学习笔记
- split的应用
- 我的AT91RM9200板
- 如何在SQL Server数据库中加密数据
- 警惕二十九岁现象
- ASP.NET AJAX中的异步Web Services调用
- SQL:in和exists的区别(zt)
- DirectX SDK下载地址
- 男人至少的道德底线
- Spring中的事件与监听
- 原创253页图文并茂电子书:深入浅出系列之二_Subversion