日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

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

發(fā)布者: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 控制器的時序有關:

發(fā)出 CLE/ALE 之后,一個寫信號 nWE 需要多久變?yōu)?a href="http://www.weightgang.cn/zhuanti/qXzvTS" style="color:#4595e6;" target="_blank">低電平,nWE 變?yōu)榈碗娖胶?,CLE/ALE 又需要保存多長時間才能變?yōu)榈碗娖健?p>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。

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

TWRPH1 表示寫信號變?yōu)?a href="http://www.weightgang.cn/zhuanti/qbnP0C" style="color:#4595e6;" target="_blank">高電平之后,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-07-13 11:20

tiny4412 裸機程序 六、定位代碼到IRAM+0x8000【轉】
一、重定向 對于程序而言,我們需要理解兩個概念,一是程序當前所處的地址,即程序在運行時,所處的當前地址;二是程序的鏈接地址,即程序運行時應該位于的運行地址。編譯程序時,可以指定程序的鏈接地址。對于Tiny4412而言,啟動時只會從MMC/sd等啟動設備中拷貝前16K的代碼到IRAM中,那么當我們的程序超過16K怎么辦?那就需要我們在前16K的代碼中將整個程序完完整整地拷貝到DRAM等其他更大存儲空間,然后再跳轉到DRAM中繼續(xù)運行我們的代碼,這個拷貝然后跳轉的過程就叫重定位。 本章中我們主要學習如何重定位,但是并不會涉如何使用到DRAM,而是簡單地將代碼從IRAM的0x02020010處拷貝到IRAM的0x02028000處,
[單片機]
Linux Bootloader
引言: Bootloader是在操作系統運行之前執(zhí)行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射表,從而建立適當的系統軟硬件環(huán)境,為最終調用操作系統內核做好準備。 對于嵌入式系統,Bootloader是基于特定硬件平臺來實現的。因此,幾乎不可能為所有的嵌入式系統建立一個通用的Bootloader,不同的處理器架構都有不同的Bootloader。Bootloader不但依賴于CPU的體系結構,而且依賴于嵌入式系統板級設備的配置。對于2塊不同的嵌入式板而言,即使它們使用同一種處理器,要想讓運行在一塊板子上的Bootloader程序也能運行在另一塊板子上,一般也都需要修改Bootloader的源程序。
[單片機]
寫一個自己的bootloader(一)匯編系列
此bootloader是根據韋東山先生的開發(fā)板而制定的 是一個最小的boot系統 必須首先把內核拷nandflash里面才行。 我們先一步步的完成這個小的bootloader 1. 首先我們需要關閉看門狗: ldr r0, 0x53000000 //this is the address of watch mov r1, #0; str r1, //disable watch dog 看門狗的地址在0x53000000 我們給他賦值0 即可 設置時鐘: 時鐘的比例是 FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 所以應該是: MDIV 0x5C PDIV 0x
[單片機]
寫一個自己的<font color='red'>bootloader</font>(一)匯編系列
STM32 | OpenBLT Bootloader的使用分享
OpenBLT 簡介 OpenBLT是一種開源引導加載程序,可以在任何微控制器上運行并使用任何類型的通信接口來執(zhí)行軟件更新,而無需專用的調試器硬件。 官網介紹頁: https://www.feaser.com/openblt/doku.php?id=homepage 源碼下載頁: https://sourceforge.net/projects/openblt/files/ 關于STM32的IAP、ISP、BootLoader相關的內容見往期筆記: 《STM32串口IAP分享》 《STM32的ISP下載的原理是什么呢?》 OpenBLT實踐 下載源碼,得到: 我們拿個ARMCM0_STM32G0_Nu
[單片機]
STM32 | OpenBLT <font color='red'>Bootloader</font>的使用分享
A FLASH Bootloader for PIC16 and PIC18 Devices--硬譯(五)
Author: Ross M. Fosler and Rodger Richey Microchip Technology Inc. 譯者: 逐影Linux WRITING CODE The bootloader operates as a separate entity, which means that an application can be developed with very little concern about what the bootloader is doing. This is as it should be; the bootloader should be dorman
[單片機]
A FLASH <font color='red'>Bootloader</font> for PIC16 and PIC18 Devices--硬譯(五)
STM8S bootloader中斷向量重定向 INTVEC exceeds maximum size 問題解決
最近重裝了系統,然后重裝了IAR for STM8軟件(由于找不到之前的安裝軟件,就用了劍齒虎開發(fā)板提供的IAR安裝包),發(fā)現以前正常編譯的bootloader工程文件,再次編譯時出現如下問題: Error : actual size (0x100) exceeds maximum size (0x80) for block “INTVEC” 在icf文件中,INTVEC塊確定定義為0x80大小,這是單片機固定的,不能修改,因此應該是編譯產生的中斷向量代碼超出了實際范圍。 define block INTVEC with size = 0x80 { ro section .intvec }; 中斷向量的重定向的代碼如下:
[單片機]
STM8S <font color='red'>bootloader</font>中斷向量重定向 INTVEC exceeds maximum size 問題解決
STM8不用手動復位進入自帶Bootloader方法(串口下載)
除非STM8片子的空的,如果復位運行的是自帶Bootloader,而且要通過串口下載程序的話,必須在1s內點擊上位機,要不然就運行用戶程序了。 這一步很麻煩,所以想把它給省掉。 后來發(fā)現上位機Flash Loader Demonstrator在啟動畫面點擊Next后,會先從串口的DTR、RTS輸出一個大概100多毫秒的脈沖,TTL電平就是負脈沖了,之后才會和單片機通信。 所以只要按照下面的圖接線,如果單片機復位運行的是自帶Bootloader,只要在Flash Loader Demonstrator啟動畫面點擊Next,軟件就會復位單片機,不用自己手動復位再點擊Next就可以和單片機通信了。 還有就是下載STM8S或STM8
[單片機]
STM8不用手動復位進入自帶<font color='red'>Bootloader</font>方法(串口下載)
ARM+Linux嵌入式系統的BootLoader設計
由Boot Loader和固化在固件(firmware)中的Boot代碼(可選)共同組成一個嵌入式系統的引導加載程序。它的作用和功能就像固化到計算機內主板上的一個ROM芯片程序BIOS(basIC input output system)。但是它一般不配置像BIOS那樣的固件程序,這是因為要考慮經濟方面的原因,因此必須自己完成這方面的工作。Boot Loader可以初始化硬件設備,建立內存空間的映射圖,從而將系統的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統內核準備好正確的環(huán)境。它的實現嚴重地依賴于硬件,特別是在嵌入式系統中,即使基于同一個CPU的Boot Loader,對于不同的板子,也有很大的不同。   1
[單片機]
ARM+Linux嵌入式系統的<font color='red'>BootLoader</font>設計
小廣播
設計資源 培訓 開發(fā)板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved