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擦厲害,但寫好象有些問題~~

 from:http://mamajinco.blog.com.cn/archives/2006/1560119.shtml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章