简单的介绍
打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。
为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所以叫笔记而不是文章,是因为它们完全是本人个人学习经验的总结,而这些经验都来自于其他前辈的无私奉献,在这里对这些乐于发表自己经验的前辈致以由衷的感谢!现在我把这些前辈的文章经过自己的理解写出来一方面是对于他们的尊重,另一方面也希望觉得本人的笔记有参考意义的朋友把这种精神继续传下去。
再次声明,本人确实是个菜鸟,现在手头的板子是自己画的,以RT&ZQ的板子为底版,对部分电路进行了改动。比如加入了SD卡,IIC总线键盘,触摸屏,GPS,GPRS等等。并对LCD接口进行改造,使之完全适合手头的SHARP液晶。把网络,串口,USB这些调试用接口都外扩了,目的是使主板尽量小(目前第一版为了调试方便,主板特意画的比较大)。但是存储部分(RAM ROM)没有做任何变动,在这里对RT&ZQ致谢!
这块板子是本人第二个板子(第一块是个接口板,30根线。)所以走线,设计都经不起推敲,但是同样非常希望大家能够指点!
板子基本元件清单说一下吧,方便其他人参考
CPU:44B0
RAM:HY57V641620
ROM:AM29LV160
NET:8019
USB:D12
KEY:ZLG7290
LCD:SHARP LM7M632
目前为止本人做的工作
1 板子的硬件调试是跟着软件来的
2 ADS AXD调试环境搭建
3 FLSH烧写笔记
4 UBOOT移植笔记
5 UCLINUX编译下载简单笔记
6 字符设备驱动开发
C工程模板使用说明
本模板用于使44B0运行C程序
一般说来汇编用来初始化 之后跳到C入口MAIN函数处
一、关于工程文件
1、本目录下建工程文件(.MCP)
2、工程文件至少包含3个文件44binit.s 44blib_a.s *.c(自己的c文件)
3、44binit.s中开头部分INCLUDE两个文件MEMCFG.S Option.s用于基本设置
注意这两个文件的存放目录,即让INCLUDE找到它们
4、以上文件除自己的c文件之外均为三星公版,不需修改
二、关于CodeWarrior设置
1、DebugRel Setting里一般设置几项
1)Target Setting->Linker里选ARMLinker
用于设置连接
2)Target Setting->Post-Linker选ARM fromELF
用于生成FLASH烧录代码(只在RAM里运行 而不烧录则不用)
3)ARM Linker->RO BASE里添地址
根据板子来,这板子上RAM接的NSCS6,地址0XC000000-0XC7FFFFF;
FLASH接的NSCS0,地址0X00000-0XFFFFF
地址分配原理见44B0数据手册内存管理那章的内存分配图
想在RAM里调试就添0XC000000(比如0XC008000)的地址
但是注意的是地址不要添过界,比如想在RAM里调试却添0X00000000 程序可以 进入C代码 但没法运行
再有
想生成用于烧写得FLASH代码 RO地址就需要设置为0X0000000开始的 而且LAYOUT中也必须设置44BINIT.O为初始加载文件
以上FLASH测试结论经FLASHPGM测试
而且FLASHPGM不支持BIN文件 只支持INTEL得HEX文件
4)RW可以添 可以不添 一般RO解释为数据段,RW解释为数据段
有时高兴了就添上0XC100000(RAM调试时)
5)ARM Linker->OPTION->Image entry point选择0xc000000(RAM调试时)
6)ARM Linker->Layout->Object/Symbol里可以添工程起始程序44BINIT.O 注意是.O不是.S和.0(零)
也可以不添
三、AXD设置
1)按照BANYANGT或者ARM7正确设置调试代理
BANYANGT、ARM7、H-JTAG都是代理,装哪个无所谓,一般认为BANYANGT好,但无论哪个调试之前必须运行代理
2)在option->configure interface里 在session file 选择 44b0.ini 这个文件是初始化44b0寄存器的,必须运行
3)Options->Configue Target里本来有两项,上面上是硬件调试,下面是软件仿真(在电脑上仿真)
用ARM7就改第一项(按照ARM7说明改),用BANYANGT就按照BANYANGT说明在下面再加个BANYANGT的驱动
4)在general标签页选择attach,然后确定,最后在file->save session,关闭AXD(在CodeWarrior里一DEBUG就自动打开)
四、关于JTAG
1)JTAG一般有几种 SDT和WIGGLER 我的是WIGGLER的,两者区别主要在并口25针定义不一样(不算复位脚),与板子上JTAG相连的脚不是区分JTAG类型的标志
只要和44B0对上就行
2)JTAG小板上与44B0大板上JTAH跳线RAM调试时都不用接 烧FLASH才用到
3)网上流传的JTAG小板上也有不用RST信号的版本,无所谓,RST信号不是标准的
五、另外
开始的时候犯了低级错误,没设置OM1 2 3跳线 导致晶体不阵~~~
其他的看万龙的ARM开发板使用手册,写的还不错
模板:user94/mamajinco/upload/825806664.rar
这部分可能过于简单,很少有人写,但是对于不了解ARM开发过程的人真的简单吗?我是菜鸟,在这卡了3天:)
一般说来有几种方法,
1)板子原来的BOOTLOADER程序或者为烧写而编写的专用ADS程序
比较高级而快速的方法,很多现成的开发板都用这种方法(相对来说有实力的公司),此状态下CPU是运行的,所以速度快。
比如ZLG的,但是对于初学或者不准备细研究硬件的人来说就比较麻烦,因为要编写(改写)ADS烧写程序。愿意的人可以看看。
2)FLUTED
和FLASHPGM一样,使用的好象叫边界扫描法,CPU此时并不运行,因此烧写的比较慢。
在这里也不推荐FLUTED这个软件,原因比较简单,麻烦+速度慢。
因为需要编写(改写)两个配置文件,而且是字符界面。倒是有人说这个软件只能在WIN98下用的说法好象不对(现在有可以让2000和XP下用的方法)
喜欢的朋友可以用用
3)FLASHPGM(推荐)
很简单的程序,GUI界面,速度尚好。
设置很简单,在CPU里选对型号,当然是3星的44B0。在FLASH里也一样,39LV160,29LV160都有。
确定好地址,RAM地址我的是0XC000000(BANK7上) FLASH地址0X0(BANK0上)
选完了以后读一下FLASH的ID(左下脚的按钮吧)能读出厂家的ID就行。
然后是烧写了,PROGRAME按钮,注意的是FLASHPGM不支持BIN格式,按照下面方法处理。
再有就是尽量在写之前擦一下,PROGRAME菜单里有个选项,打个钩就OK。
具体烧写方法可以看我总结的另一篇文档,在这里只说说UBOOT相关的。
前面说过UBOOT编译以后产生3个文件
u-boot——ELF格式的文件,可以被大多数Debug程序识别;
u-boot.bin——二进制bin文件,纯粹的U-BOOT二进制执行代码,不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中;
u-boot.srec——Motorola S-Record格式,可以通过串行口下载到开发板中。
FLASHPGM不支持BIN格式的,可以烧写u-boot——ELF格式的文件,别看它没扩展名,一样烧写。
还有,如果你懒(和我一样),拿别人现成的BIN文件来烧,FLASHPGM还提供了一个BINTOS19的程序,就在它的安装目录下。具体用法运行它,它自己就告诉你了。
注意:有时(尤其是FLASH里已经有程序的时候)0XC000000会莫名奇妙的提示内存不可以写,有几个方法可以试试:把地址改成0x10000000(好象是缓存地址),之后点EREASE擦除芯片,擦除一般说来是不成功的,最后无论如何都下不去,没关系,这时候关闭擦除对话框,然后0x10000000地址不变,烧FLASH,我一般是烧写一个我自己写的LED测试小程序把内存占上:)。回来这时候再把0X1000000换成0XC000000再按照正常操作,一般可以正常。
这现象的原因就是过去下的程序(多数是不正确的程序)正在运行 占用了RAM与ROM,下个LED测试小程序就是把这几个部分清除掉。
如果以上方法还不正常,可以用另一个程序叫FLASHP就差2个字母:)很好!在这里对这个程序的作者致敬!!
用这个软件擦FLASH,然后再用FLASHPGM烧,原因是FLASHP擦厉害,但写好象有些问题~~
UBOOT 移植操作(1)
[0]目录结构
◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。
◆ common:与体系结构无关的文件,实现各种命令的C文件。
◆ cpu:CPU相关文件,其中的子目录都是以U-BOOT所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;interrupt.c设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础。
◆ disk:disk驱动的分区处理代码。
◆ doc:文档。
◆ drivers:通用设备驱动程序,比如各种网卡、支持CFI的Flash、串口和USB总线等。
◆fs:支持文件系统的文件,U-BOOT现在支持cramfs、fat、fdos、jffs2和registerfs。
◆ include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。
◆ net:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。
◆ lib_arm:与ARM体系结构相关的代码。
◆ tools:创建S-Record格式文件 和U-BOOT images的工具。
==========================================================================================
[1]u-boot.1.1.2目录下有Makefile
1)设置编译器
可以看到这一项:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
也就是说这里所用的交叉编译器是arm-linux-gcc,u-boot默认是用这个的,也有用arm-elf-gcc的,arm-elf-tools-20030314.sh,用它来编译,没有问题。如果最后MAKE的时候提示找不到arm-linux-gcc就是这错了,改一下。
arm-elf-gcc是用来编译uClinux内核的工具,arm-linux-gcc用来编译LINUX
2)加进自己板子的项目
搜索B2的这部分文件
B2_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
后面加上这部分:
TT_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 TT T2T
切记在@./mkconfig $(@:_config=) arm s3c44b0 TT T2T
前面的是Tab来的,TT_config : unconfig也是一样,不能用空格代替,因为它是靠这个来识别命令的
==========================================================================================
[2]在宿主机(PC机)上建立arm-elf-gcc交叉编译环境
1)建立arm-linux-gcc编译环境
在RedHat Linux系统下以root用户登录,
将cross-2.95.3.tar.bz2文件复制到/目录下,
安装:
# tar jxvf cross-2.95.3.tar.bz2
这个命令会在你的/usr/local/arm/2.95.3目录下安装 arm-linux-gcc 交叉编译程序,
然后在PATH变量中添加一项:/usr/local/arm/2.95.3/bin.
[root@localhost root]# export PATH=$PATH:/usr/local/arm/2.95.3/bin
或
把PATH=:$PATH:/usr/local/arm/2.95.3/bin添加到/ETC/bash_profile文件中
或者
在/etc/bashrc文件中添加一项:
export PATH=:$PATH:/usr/local/arm/2.95.3/bin
之后可以测试一下 echo $PATH
注意:PATH大小写不一样,另外LINUX下大小写是不同的,以后不特别声明。
注意:命令中的参数之间都由单个空格或者TAB隔开,命令前有的有# 代表命令行符,不用输入。
注意:不可在WINDOWS下用winRAR解压u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz这种文件,会少文件,去LINUX下,另外解压的时候也不用非点用命令行操作,LINUX现在对GUI已经支持的非常好了,比如解压只要右键点文件,选解压到当前文件夹就可以,执行的时候只要双击再选“执行”
注意:我用的VMWARE(虚拟机)装的LINUX,要在LINUX和WIN中间传递文件用VM-》SETTING里的SHARE FOLDER
该功能是把WIN 下的一个文件夹共享给LINUX。
这个功能必须装VMWARE TOOLS才能用,
装VMWARE TOOLS方法:首先在VM-》SETTING里CDROM项里把光驱设置为装入VMWARE安装文件夹下的LINUX工具的.ISO,LUINUX下就出现CDROM了 拷贝 解压 安装不在话下。必须注意的是VMWARE TOOLS在每次重起LINUX之后还必须也重起一下,TMD,谁搞定不用重起告诉我一声
重起的方法:/etc/init.d/vmware-tools restart
就有消息出来了
注意:另外郁闷的是我的WIN与LINUX之间复制文字似乎也不顺畅,干脆在SHARE FOLDER里建立一个TXT,两个系统捣文字玩~~
测试:
把终端关闭,重新打开后执行如下命令:
# arm-linux-gcc –v
建立好交叉编译环境后可以试着编译u-boot了
2)也可以建立arm-elf-gcc
与上面类似,用周立功的编译包直接安装
会在/usr/local/bin下产生arm-elf-gcc只类的文件
然后设置路径
[root@localhost root]# export PATH=$PATH:/usr/local/arm-elf/bin
======================================================================================================
[3] 测试交叉编译器搞好没有
编译个44B0例子 在UBOOT包目录下执行一下命令,以下是编译的包自带的DAVE公司板子B2(名)
1) Make distclean (清除以前编译的痕迹)
2) Make B2_config(B2代表B2板子的,前面见到过)
3) Make
没问题就可以进行下面了
注意:B2默认用arm-linux-gcc编译,要是前面安的arm-elf-gcc的话此时会报错 把UBOOT目录下的MAKEFILE按照前面说的改一下
注意:一般说来还会有个问题,怀疑是编译器的问题 提示什么abi=apcs-gnu只类的找不到吧~~记不住了
改UBOOT目录下config.mk (好象)
文件里改成如下
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))
原来的行少了$(call cc-option,-mabi=apcs-gnu,) 具体在哪行忘了 CTRL+F搜索一下
其他应该没问题,有问题GOOGLE搜一下,不是通病就是自己安装的问题了
注意:
MAKE之后会生成三个文件:
u-boot——ELF格式的文件,可以被大多数Debug程序识别;
u-boot.bin——二进制bin文件,纯粹的U-BOOT二进制执行代码,不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中;
u-boot.srec——Motorola S-Record格式,可以通过串行口下载到开发板中。
[4]开始配置U BOOT
1)给自己板子个公司起个名,我的公司叫T2T 板子叫TT,刚才那个例子公司名DAVE板子名B2
以B2板子的程序做为模板来做,省很多工作
#cd u-boot-1.1.2//进U BOOT目录
#cd board //进BOARD目录,该目录下存放各种公司的开发板,但44B0的好象只有一种B2
#cp -R dave T2T (复制 并且改名)
#cd T2T
#mv B2 TT (复制 并且改名)
#cd TT
# mv B2.c TT.c
修改TT里面的Makefile, 把B2改成TT,编译时如果报的其它类似找不到B2的错误也是把相应的B2改成TT来处理。
修改T2T/TT/config.mk
TEXT_BASE = 0x0c1000000
修改T2T/TT/Makefile
将所有的B2改为TT
2)/include/configs
cp B2.h TT.h依旧是把B2的改个名
注意:DAVE的板子是用44B0的,但还有其他板子用吗?怎么确定只有它用?用以下命令
到board目录查了一下:
#cd u-boot
#cd board
#find . -exec grep -l 44B0 {} ;
结果是:
./dave/B2/B2.c
B2网站是: http://www.dave-tech.it
3)以下文件修改记录
----------------------------------------------------------------------------------------------------
-----------------------------------/include/configs/TT.h-------------------------------------------
----------------------------------------------------------------------------------------------------
#define CONFIG_INIT_CRITICAL 1 这个在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中调试而是固化到flash中运行的话,这个必不可少。
找到 #define CONFIG_B2 1 改成CONFIG_TT
找到 #define CONFIG_S3C44B0_CLOCK_SPEED 75 主频改成60
找到Size of malloc() pool这部分设置,改成这样。
#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Monitor */
#define CFG_ENV_SIZE (64*1024) /* 1024 bytes may be used for env vars*/
#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024 )
#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
#define CFG_ENV_IS_IN_FLASH 1 这个必不可少,如果你想把你的参数保存到flash的话
#define CFG_ENV_ADDR (PHYS_FLASH_1+0x40000) 这个就是你的参数保存在flash里的起始地址了
#define CFG_ENV_OFFSET 0x40000 这个我后来看它源程序发现如果你上一步没有设置它的起始地址的话就会用它来作默认地址的了
#define CONFIG_AUTO_COMPLETE
其它地方没有深究哦,有些好像不要也行,你就试试吧。
找到Hardware drivers部分,这应该是网络芯片设置吧,参考一下这个吧(要看芯片的):
#define CONFIG_DRIVER_RTL8019 这个就要看你的板上用的是什么网卡了(这个是台湾出的,有10M)
#define RTL8019_BASE 0x06000300 这个是网卡相就寄存器的起始地址,有的挂在BANK4上了地址自然是0X08000300
以下部分我试过不要也行,你试下吧
#define RTL8019_BUS32 0
#define CONFIG_SMC_USE_16_BIT
#undef CONFIG_SHOW_ACTIVITY
#define CONFIG_NET_RETRY_COUNT 10 应该是重试的次数吧
#define CONFIG_SERIAL 1
#define CONFIG_BAUDRATE 115200 设置波特率
#define CONFIG_COMMANDS ( CONFIG_CMD_DFL |
CFG_CMD_DATE |
CFG_CMD_ELF |
CFG_CMD_NET |
CFG_CMD_EEPROM |
CFG_CMD_I2C |
CFG_CMD_FAT |
CFG_CMD_JFFS2)
把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,虽然不改也是可以的,具体没考究。
以下是板上env参数设置,看一下吧,其实我觉得了解一下就行的了,只是一些初始设置值,以后可以用命令setenv saveenv来修改的。
#define CONFIG_BOOTDELAY 3 这个就是运行bootcmd之前的等待时间
#define CONFIG_BOOTARGS 'devfs=mount root=ramfs console=ttyS0,115200' 引导uClinux的时候传递的参数,不会就先不用管它也行。
#define CONFIG_ETHADDR 00:50:c2:1e:af:fb 网卡的物理地址MAC
#define CONFIG_NETMASK 255.255.255.0 掩码地址,设置过ip的人都应该知道吧
#define CONFIG_IPADDR 192.168.0.30 这是你板上网卡8019的ip地址
#define CONFIG_SERVERIP 192.168.0.10 这是你宿主机的ip地址,以后用tftp下载的时候用到,一定要跟你的宿主机一致才行。
#define CONFIG_BOOTFILE 'u-boot.bin' 这个就是你要下载文件的默认名字,注意的是不是UBOOT编译的文件 而是UBOOT下载以后在这个地址执行这个文件,比如这个文件在下LINUX后就常被改成UCLINUC.BIN了
#define CONFIG_BOOTCOMMAND 'bootm 0x50000' 这是bootdelay后运行的命令
Miscellaneous configurable options部分,参考一下吧:
#define CFG_LONGHELP /* undef to save memory */
#define CFG_PROMPT 'TENWAY=>' 这是进入命令模式下的提示符,改个帅一点的吧
#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
上一篇:学习ARM开发(23)
下一篇:最后一页
设计资源 培训 开发板 精华推荐
- EVAL-AD7891-1CBZ,用于单电源、12 位、454 kSPS ADC 的评估板
- Si886xxISO-KIT,基于 Si886xx DC-DC 数字隔离器的评估套件
- C722949_CH340 USB转串口芯片方案验证板
- 使用 LTC6905IS5-100 振荡器驱动 50 欧姆电缆的典型应用电路
- 【已验证】3.5mm音频切换器-4进1出
- 【训练营】基于涂鸦联网模块的智能小夜灯 658550A
- LTC3455,采用 4mm-4mm QFN 封装的完整 USB 电源管理器、锂离子充电器和两个降压转换器
- EVAL-AD5062EBZ,使用 AD5062、16 位、缓冲电压输出 DAC 的评估板。由 2.7 V 至 5.5 V 单电源供电
- 语音播放模块
- 东方红半导体演奏器第三版(东方红一号卫星乐音系统逆向工程)