娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

三、編寫 s3c24x0 的 bootloader——重定位(一)

發布者:BlissfulMoments最新更新時間:2024-08-26 來源: cnblogs關鍵字:s3c24x0  bootloader  重定位 手機看文章 掃描二維碼
隨時隨地手機看文章

重定位之前,要將 flash 初始化,flash 的初始化分為 norflash 和 nandflash,norflash 不用初始化,所以不用做任何操作


3.1 nandflash 初始化


在 nandflash 初始化之前,需要設置棧:


1     /** 6. 重定位:把 bootloader 本身的代碼從flash 復制到它的鏈接地址中 */

2     /** copy_code_to_sdram 用 C語言寫,需要先設置棧 */

3     ldr sp, =0x34000000     /** 棧指向 SDRAM 的頂端 */

進入初始化:


1     bl nand_init

nandflash 初始化需要注意兩個內容,一個是 s3c2440 手冊的第 6 章 nandflash 控制器,一個是 nandflash 的芯片手冊。


3.1.1 寄存器 NFCONF

要注意兩個寄存器,是初始化需要操作的:

  

 

 注意圖中標記的三個寄存器參數,這三個參數與 nandflash 控制器的時序有關:

發出 CLE/ALE 之后,一個寫信號 nWE 需要多久變為低電平,nWE 變為低電平后,CLE/ALE 又需要保存多長時間才能變為低電平。

nWE 中的低電平為 /WE 中的 twp 處位置,為寫信號的脈沖寬度,最小為 12 ns,最小值都是通過 nandflash 手冊得到的,如下:

  

HCLK * (TWRPH0 + 1)  >= 12ns

自己設置的時鐘FCLK(CPU主頻是 400MHZ),分頻比是 FCLK: HCLK: PCLK = 1:4:8,那么 HCLK 是100MHZ,即為10ns;則 10 * (TWRPH0 + 1) >= 12,TWRPH0 >= 0.2,那么 TWRPH0 可以設置為 1。

發出 CLE 和 ALE 之后,過多少時間才能發出寫信號?time = tcls - twp >= 0,這里說明 CLE 信號和 WE 信號可以同時發出,那么可以將 TACLS 時間設置為 0,即發出 CLE 后,立即發出寫信號。

TWRPH1 表示寫信號變為高電平之后,CLE 和 ALE 還需要維持多長時間,從 nandflash 時序圖和手冊,可以知道 tclh >= 5ns,則 10 * (TWRPH1 + 1) >= 5,則 TWRPH1 >= 0。

3.1.2 寄存器 NFCONT

  

這個寄存器需要設置 MODE(NAND Flash 控制器運行模式),要使能 nandflash;Reg_nCE(NAND Flash 存儲器的 nFCE 信號控制),我們是引導期間,所以要使能片選;InitECC,雖然在引導期間不會使用 ECC,但是也要進行 ECC 初始化。


3.1.3 初始化代碼

 1 void nand_init(void)

 2 {

 3 #define TACLS       0

 4 #define TWRPH0      1

 5 #define TWRPH1      0

 6 

 7     /** 設置時序 */

 8     NFCONF = (TACLS << 12) | (TWRPH0 << 8) | (TWRPH1 << 4);

 9     /** 使能 NND Flash 控制器, 初始化 ECC, 禁止片選 */

10     NFCONT = (1 << 4) | (1 << 1) | (1 << 0);

11 }


關鍵字:s3c24x0  bootloader  重定位 引用地址:三、編寫 s3c24x0 的 bootloader——重定位(一)

上一篇:GCC編譯器原理(一)------交叉編譯器制作和GCC組件及命令
下一篇:二、編寫 s3c24x0 的 bootloader——SDRAM 設置

推薦閱讀最新更新時間:2025-04-16 23:22

tiny4412 裸機程序 六、定位代碼到IRAM+0x8000【轉】
一、重定向 對于程序而言,我們需要理解兩個概念,一是程序當前所處的地址,即程序在運行時,所處的當前地址;二是程序的鏈接地址,即程序運行時應該位于的運行地址。編譯程序時,可以指定程序的鏈接地址。對于Tiny4412而言,啟動時只會從MMC/sd等啟動設備中拷貝前16K的代碼到IRAM中,那么當我們的程序超過16K怎么辦?那就需要我們在前16K的代碼中將整個程序完完整整地拷貝到DRAM等其他更大存儲空間,然后再跳轉到DRAM中繼續運行我們的代碼,這個拷貝然后跳轉的過程就叫重定位。 本章中我們主要學習如何重定位,但是并不會涉如何使用到DRAM,而是簡單地將代碼從IRAM的0x02020010處拷貝到IRAM的0x02028000處,
[單片機]
STM32F030Cxxx 沒有SCB->VTOR,如何定位向量表
最近使用了一款Cortex-M0內核的芯片STM32F030CC,發現它中斷向量表的重映射方法與STM32F10x系列的有所區別,在這里記錄與分享一下。 由于需要通過IAP進行固件升級,所以芯片的FLASH里面要燒錄兩份代碼:一個Boot loader, 一個用戶應用程序。理所當然的,在用戶應用程序中,必須得重新映射中斷向量表。 可是在ST提供的固件庫里,我卻沒有發現類似于stm32f10x固件庫中的voidNVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)接口。 瀏覽了一下Cortex-M0的Programmingmanual,原來M0并沒有
[單片機]
STM32F030Cxxx 沒有SCB->VTOR,如何<font color='red'>重</font><font color='red'>定位</font>向量表
【Arduino】關于使用USB-ISP燒入bootloader的一些記錄
前言:由于自己的一號機3D打印機工作范圍實在太小,再加上是Delta結構的,實在懶得再改了,索性重新設計一臺新的機器,采用UM2結構。然后在下載marlin2.X的固件時候把mega2560的bootloader搞出問題了,不得以開始研究燒錄arduino的bootloader。 bootloader的幾個方法 首先是成本問題,如果手上有額外的Arduino,可以直接使用Arduino下載ArduinoISP程序到使用Arduino給另一個燒錄bootloader,這個方案可以說是最省的(前提是有多余的) 第二個方法是使用使用AVR USB tiny ISP 燒寫,但是現在的價格都不便宜,就算了。 最后選擇了使用使用AVR
[單片機]
【Arduino】關于使用USB-ISP燒入<font color='red'>bootloader</font>的一些記錄
BLOB啟動流程與Bootloader程序可移植性研究
  在嵌入式系統應用中,通過引導程序(Bootloader)可以初始化硬件設備、建立內存空間的映射圖、加載內核,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境 。Bootloader依賴于實際的硬件和應用環境,對于不同的硬件架構以及相同架構的不同 電路 板,都需要不同的Bootloader。由于單獨開發Bootloader的工作量較大,因此開發人員一般針對固定體系構架開發一種可移植性的Bootloader,使之能夠在少量修改后應用于同一體系構架的其他電路板。BLOB就是一種針對ARM體系定制的可移植性良好的嵌入式Linux引導程序。BLOB支持多種CPU,包括SA1100、SA1110、PXA
[單片機]
BLOB啟動流程與<font color='red'>Bootloader</font>程序可移植性研究
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 梅河口市| 长沙市| 镇原县| 灵川县| 班玛县| 阳泉市| 四川省| 克东县| 灵山县| 德格县| 西乡县| 林甸县| 云南省| 民和| 昆山市| 金溪县| 安仁县| 黄大仙区| 青冈县| 天长市| 泰宁县| 阿拉善右旗| 项城市| 内乡县| 无为县| 福泉市| 饶平县| 鄂温| 普安县| 若尔盖县| 九龙坡区| 舟山市| 左权县| 神木县| 南昌县| 旺苍县| 会东县| 南宫市| 台中县| 宁安市| 邢台县|