UBOOT 移植之 4

-----------------------------------------------------------------
-----------------------------------cpu/s3c44b0/start.S------
-------------------------------------------------------------------

找到
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   
ldr r0, =0x70081 /* 60MHz (Quartz=10MHz) 具体怎么算的 可以看我写的计算方法说明*/
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
ldr r0, =0xac042   /* 75MHz   */
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
设置一下主频

------------------------------------------------------------------------------
--------------cpu/s3c44b0/serial.c-----------------------------------
--------------------------------------------------------------------------------
找到以下几项
主要是把频率改一下并把分拼设置对
void serial_setbrg (void)
{
DECLARE_GLOBAL_DATA_PTR;

u32 divisor = 0;

/* get correct divisor */
switch(gd->baudrate) {
       
           
     

case 1200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   divisor =   3124;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
   divisor = 3905;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
   break;

case 9600:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   divisor = 390;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
   divisor = 487;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
   break;

case 19200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   divisor = 194;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
   divisor = 243;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
   break;

case 38400:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   divisor = 97;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
   divisor = 121;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif   break;

case 57600:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   divisor = 64;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
   divisor = 80;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif   break;

case 115200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
   divisor = 32;/*具体算法和上面主频算法在一个文档里*/
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
   divisor = 40;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif

--------------------------------------------------------------------------
---------board/T2T/TT/TT.C-------------------------------
------------------------------------------------------------
这个没什么好说的,如果你用的是网上流行的原理图,改动基本没有,我的因为加了些东西,所以这个文件改动很多。
但文件里主要就是对44B0各个管脚设置,哪个是IO哪个是TXD、RXD。不多说了,自己看数据手册8-6页,有点耐心。

---------------------------------------------------------------------
------------lib_arm/board.c-----------------------------------
---------------------------------------------------------
好象网卡需要加个INCLUDE
//待补充
这个文件不用修改,在网上找的讲解,顺便提一下

进行各种初始化设置,主要有:
cpu_init CPU相关的设置, 具体在./cpu/s3c44b0/cpu.c中.
board_init 板子相关的设置, 具体在board/wx/wx20/wx20.c 中
interrupt_init中断设置,我们没有用,具体在./cpu/s3c44b0/interrupts.c中
env_init 初始化环境变量, 具体要看用什么介质来存储环境变量,如果用flash来存贮, 程序在common/env_flash.c中.
init_baudrate 设置baud参数
serial_init 串口初始化, 具体在cpu/s3c44b0/serial.c.
console_init_f 控制台设置, 具体在./common/console.c

display_banner 显示标题.[这里可以鼓捣一下,让它输出些个性的东西:)]
dram_init 可用内存配置, 具体在./board/wx/wx20/wx20.c.
flash_init flash初始化,具体./drivers/cfi_flash.c.

接下来就是环境变量初始化, 网络初始化,最后到main_loop,可以运行各种命令.
====================================
[5]烧写FLASH
这部分可能过于简单,很少有人写,但是对于不了解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擦厉害,但写好象有些问题~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值