1.1 介紹
1.1.1 bootloader 的作用
bootloader 的終極功能就是為了啟動內核。
從上面可以知道最簡單的 uboot 編寫的步驟:
初始化硬件:關看門狗、設置時鐘、設置 SDRAM、初始化 nandflash
如果bootloadre 比較大,要把它重定位到 SDRAM
把內核從 nandflash 讀到 SDRAM
設置內核啟動參數
跳轉執行內核
1.1.2 norflash 啟動
norflash 可以像內存那樣讀,但是不能像內存那樣寫。
1.1.3 nandflash 啟動
1.2 看門狗及時鐘設置
1.2.1 看門狗設置
2440 必須在啟動的時候關閉看門狗,不然就會隔一段時間重啟芯片。
看門狗定時器控制(WTCON)寄存器允許用戶使能或禁止看門狗定時器、從 4 個不同源選擇時鐘信號、使能或禁止中斷和使能或禁止看門狗定時器輸出。看門狗定時器是用于恢復 S3C2440 上電后若有故障重時新啟動;如果不希望控制器重新啟動,則應該禁止看門狗定時器。
如果用戶希望使用看門狗定時器作為普通定時器,則應使能中斷并且禁止看門狗定時器。
+ View Code
1.2.2 時鐘設置
S3C2440 中的時鐘控制邏輯可以產生必須的時鐘信號,包括 CPU 的 FCLK,AHB 總線外設的 HCLK 以及 APB 總線外設的 PCLK。S3C2440A 包含兩個鎖相環(PLL):一個提供給 FCLK、HCLK 和 PCLK,另一個專用于 USB 模塊(48MHz)。、
時鐘控制邏輯可以不使用 PLL 來減慢時鐘,并且可以由軟件連接或斷開各外設模塊的時鐘,以降低功耗。
時鐘源的選擇與啟動模式有關,引導啟動時,時鐘源的選擇如下:
FCLK,HCLK 和 PCLK
FCLK 是提供給 ARM920T 的時鐘。
HCLK 是提供給用于 ARM920T,存儲器控制器,中斷控制器,LCD 控制器,DMA 和 USB 主機模塊的 AHB 總線的時鐘。
PCLK 是提供給用于外設如 WDT,IIS,I2C,PWM 定時器,MMC/SD 接口,ADC,UART,GPIO,RTC 和 SPI 的 APB 總線的時鐘。
S3C2440 支持對 FCLK、HCLK 和 PCLK 之間分頻比例的選擇。該比例由 CLKDIVN 控制寄存器中的 HDIVN 和 PDIVN 所決定。
對于 S3C2440,芯片手冊有這一段需要注意的:
我們必須將 CPU 總線模式改變為 異步總線模式。
前面已經說明,S3C2440A 包含兩個鎖相環(PLL):一個提供給 FCLK、HCLK 和 PCLK,另一個專用于 USB 模塊(48MHz)。
所以還必須要設置鎖相環,來給 FCLK、HCLK 和 PCLK 來提供時鐘源:
UPLL 是提供給 USB 使用的,我們需要設置 MPLL,對于 MPLLCON,可以對應芯片手冊提供的表進行設置:
input frequence:輸入時鐘源,外部 12M 的晶振,原理圖設計的
output Frequence:輸出時鐘源,也就是 MDIV,選擇 400M,則 MDIV 值是 0x5c
1 #define CLKDIVN 0x4C000014 /** 時鐘分頻控制寄存器 */
2 #define MPLLCON 0x4c000004
3 #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) /** 400M 時鐘源 */
4
5 /** 3. 芯片手冊上要求:
6 * 如果 HDIVN 非0, CPU 的總線模式應該從 fast bus mode 變為 asynchronous bus mode */
7 mrc p15, 0, r1, c1, c0, 0 /* 讀出控制寄存器 */
8 orr r1, r1, #0xc0000000 /* 設置為 asynchronous bus mode */
9 mcr p15, 0, r1, c1, c0, 0 /* 寫入控制寄存器 */
10
11 /** 4. 設置時鐘頻率 */
12 ldr r0, =MPLLCON
13 ldr r1, =S3C2440_MPLL_400MHZ
14 str r1, [r0]
15
16 /** 5. 初始化 SDRAM */
17 mov ip, lr /** 保存當前程序地址到 ip 寄存器 */
18 bl sdram_init /** 執行 SDRAM 的初始化 */
19 mov lr, ip
上一篇:二、編寫 s3c24x0 的 bootloader——SDRAM 設置
下一篇:Linux移植之tag參數列表解析過程分析
推薦閱讀最新更新時間:2025-04-23 19:19






