移植u-boot-2015.10到JZ2440開發板(一)——修改時鐘,SDRAM,波特率設置

来源:http://www.cnblogs.com/ljyljy/archive/2016/02/04/5182177.html
-Advertisement-
Play Games

首先從u-boot官網下載最新版的u-boot,這裡我下的是u-boot-2015.10。下載完成後解壓,閱讀README,在Building the Software:中得知編譯方法:如果使用交叉編譯的話要執行以下命令: CROSS_COMPILE=arm-linux- export CROSS_


  首先從u-boot官網下載最新版的u-boot,這裡我下的是u-boot-2015.10。下載完成後解壓,閱讀README,在Building the Software:中得知編譯方法:如果使用交叉編譯的話要執行以下命令:

 CROSS_COMPILE=arm-linux-
 export CROSS_COMPILE

然後執行make NAME_defconfig,進行預設的配置。NAME為支持的開發板的名稱,最後make all 即可。這裡預設配置中和JZ2440最接近的是三星的smdk2410開發板。因此,我這裡執行make smdk2410_defconfig,然後make all。編譯成功,用JLINK燒寫到norflash中,上電啟動,發現串口無任何輸出,看來smdk2410的配置不能直接用到JZ2440開發板,需要修改代碼。可以新建一個單板目錄,但新版u-boot需要改動的地方很多,較麻煩,因此我就直接在smdk2410的代碼上改了。首先分析啟動過程,根據編譯生成的u-boot.lds發現第一個文件是arch/arm/cpu/arm920t/start.S。於是從這裡開始分析。分析到lowlevel_init函數時,發現對SDRAM進行設置時,SMRDATA中的REFCNT依賴於HCLK=60MHz,而在這之前只設置了時鐘比例,具體時鐘大小還未設置,所以估計這裡有問題。如果有openjtag可以用openjtag對SDRAM進行讀寫,就會發現讀寫有問題。於是修改代碼:在board/samsung/smdk2410/smdk2410.c的board_early_init_f中將時鐘的設置函數註釋掉,

 

int board_early_init_f(void)
 {
     struct s3c24x0_clock_power * const clk_power =
                     s3c24x0_get_base_clock_power();
     struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();
 
     /* to reduce PLL lock time, adjust the LOCKTIME register */
     //writel(0xFFFFFF, &clk_power->locktime);
 
     /* configure MPLL */
     //writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV, &clk_power->mpllcon);
 
     /* some delay between MPLL and UPLL */
     //pll_delay(4000)
     /* configure UPLL */
     //writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV,   &clk_power->upllcon);
 
     /* some delay between MPLL and UPLL */
     //pll_delay(8000);
 
   

在前面的start.S中自己設置時鐘:

ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]

/*clk config*/
#define S3C2440_MPLL_200MHZ     ((0x5c<<12)|(0x01<<4)|(0x02))
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_200MHZ
str r1, [r0]

將board/samsung/smdk2410/lowlevel_init.S中的SRMDATA改為對應我們設置的時鐘的數值

SMRDATA:
   .long 0x22011110     //BWSCON
   .long 0x00000700     //BANKCON0
   .long 0x00000700     //BANKCON1
   .long 0x00000700     //BANKCON2
   .long 0x00000700     //BANKCON3  
   .long 0x00000700     //BANKCON4
   .long 0x00000700     //BANKCON5
   .long 0x00018005     //BANKCON6
   .long 0x00018005     //BANKCON7
   .long 0x008C04F4     // REFRESH
   .long 0x000000B1     //BANKSIZE
   .long 0x00000030     //MRSRB6
   .long 0x00000030     //MRSRB7

改完後編譯,串口有輸出了,但是亂碼,估計是波特率的問題。分析代碼,在board_init_r中,init_sequence_r函數數組中有一個initr_serial函數,一路追蹤下去,到serial_register(&s3c24xx_serial0_device),這個函數註冊了串口0,s3c24xx_serial0_device定義如下,

DECLARE_S3C_SERIAL_FUNCTIONS(0);
struct serial_device s3c24xx_serial0_device =
INIT_S3C_SERIAL_STRUCTURE(0, "s3ser0");

INIT_S3C_SERIAL_STRUCTURE定義如下:

#define INIT_S3C_SERIAL_STRUCTURE(port, __name) {    \
    .name    = __name,                \
    .start    = s3serial##port##_init,        \
    .stop    = NULL,                    \
    .setbrg    = s3serial##port##_setbrg,        \
    .getc    = s3serial##port##_getc,        \
    .tstc    = s3serial##port##_tstc,        \
    .putc    = s3serial##port##_putc,        \
    .puts    = s3serial##port##_puts,        \
}

我們看看波特率設置函數.setbrg = s3serial##port##_setbrg的定義,

#define DECLARE_S3C_SERIAL_FUNCTIONS(port) \
    int s3serial##port##_init(void) \
    { \
        return serial_init_dev(port); \
    } \
    void s3serial##port##_setbrg(void) \
    { \
        serial_setbrg_dev(port); \
    } \

一路跟蹤進_serial_setbrg函數,get_PCLK,get_HCLK(),發現get_HCLK()中支持2440,但要要定義CONFIG_S3C2440,於是,我們在include/configs/smdk2410.h中定義這個巨集,編譯出現錯誤,./arch/arm/include/asm/arch/s3c24x0.h:443: error: duplicate member 'gpacon' ,打開s3c24x0.h:443,發現由於定義了CONFIG_S3C2440,導致寄存器重覆定義了,刪去2410那一段即可,編譯後,燒寫程式,串口成功列印。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = 20; if (scrollView.contentOffset.y <= sectionHeaderHeight&&scrol
  • 1:伺服器端/** * Created by LiuFei on 2016/1/22. */public class HttpService extends Service{ @Override public IBinder onBind(Intent intent) { return null;
  • 第一版: ListView一屏顯示多少對象其內部就創建多少View對象。滑動時退出的緩存對象留給滑進去時調用getView傳的convertView。因為如果每次都findViewById查找創建視圖對象,浪費性能和記憶體。所以我們都利用佈局創建View給convertView。佈局內部的view對象
  • 排名函數三兄弟,一看名字就知道,都是為了排名而生!但是各自有各自的特色!以下一個例子說明問題!(以下慄子沒有使用Partition By 的關鍵字,整個結果集進行排序) RANK 每個值一個排名,同樣的值排同樣的位置,如第一名有2個,下一個值就要排第三,如此類推,表現如下麵的 RandNr 列 DE
  • 在當今這個多種不同資料庫混用,各種不同語言不同框架融合的年代(一切為了降低成本並高效的提供服務),知識點多如牛毛。雖然大部分SQL腳本可以使用標準SQL來寫,但在實際中,效率就是一切,因而每種不同廠商的SQL新特性有時還是會用到,這部分內容更是讓人抓瞎,常常會由於一些很簡單的問題花很久來搜索準確答案
  • TableSample 平時用得少,基本上就是用於表裡面抽樣數據來看的。 用法如下 SELECT * FROM tbname TABLESAMPLE SYSTEM (N PERCENT/M Rows) REPEATABLE() TABLESAMPLE SYSTEM 這個表示使用System的方法進行
  • cat 1file-1:1234 cat 2file-2:1245 上面是2個文件的內容。 diff -uN 1 2 >patch.log cat patch.logpatch.log:--- 1 2016-02-05 12:15:04.214850218 +0800+++ 2 2016-02-05
  • 安裝命令centos下 yum install vsftpd 出現“Complete!”時意味著安裝完成。Linux中,系統對於大小寫嚴格區分,比如abc和ABC是完全不相同的字元,要特別註意。配置Vsftpd虛擬用戶使用vsftpd伺服器之前,要對伺服器進行配置,主要包括如下幾個步驟:(1)生成虛
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...