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

歷史上的今天

今天是:2024年12月20日(星期五)

正在發生

2021年12月20日 | tiny4412 裸機程序 七、重定位代碼到DRAM

發布者:平章大人 來源: eefocus關鍵字:tiny4412  裸機程序  重定位代碼  DRAM 手機看文章 掃描二維碼
隨時隨地手機看文章

一、關于DRAM

上一章我們講解了如何對代碼進行重定位,但是將代碼重定位到只有256K IRAM中作用不大。

正確的做法是將代碼重定位到容量更大的主存中,即DRAM。Exynos4412中有兩個獨立的DRAM控制器,分別叫DMC0和DMC1。DMC0和DMC1分別支持最大1.5G的DRAM,它們都支持DDR2/DDR3和LPDDR2等,512 Mb, 1 Gb, 2 Gb, 4 Gb and 8 Gbit的內存設備,支持16/32bit的位寬。DRAM0 對應的地址是0x4000_0000~0xAFFF_FFF共1.5GB,DRAM1 對應的地址是0xA000_000~0x0000_0000共1.5GB。

 

圖7-1、DRAM控制地址圖

查閱Tiny4412的原理圖:

 

圖7-2、DRAM電路原理樣圖

Tiny4412的512M的DRAM是由4片大小為128M的DDR3芯片組合而成(上圖僅為其中一片),觀察片選引腳可知4片DRAM芯片都是掛接到DMC0處。

如何才能使用DRAM?對應Tiny4412而言,由于它只用到了DMC0,所有我們只需要初始化DMC0和DDR3 DRAM芯片即可,本實驗所有的初始化代碼全部來自于U-BOOT程序。需要說明一點的,我在寫這個裸機程序文檔之前,已經看了一段時間U-BOOT程序,U-BOOT程序中對DRAM也做了相應的初始化工作,我就直接拿來用了,在參考學習U-BOOT過程中,我也記錄了一份學習文檔,里面有比較詳細的DRAM初始化說明,等我U-BOOT實驗成功后,我會整理一份相應文檔。

Linux平臺下Mini210S裸機程序開發指南》文檔從我現有資料中找到他所說的類似的芯片說明。我只能參考著他的說明,從U-BOOT中找到一個函數,從他那里COPY了一些代碼,來實現這個函數。大家先來一遍《linux平臺下Mini210S裸機程序開發指南》文檔關于此函數的說明 ,我在說一下我是怎么寫的這個函數的。

 

經過mem_init函數對DRAM的初始化后,我們就可以拷貝代碼到DRAM中然后跳轉到DRAM中繼續運行了,由BL1目錄下的mmc_relocate.c來實現這部分功能,mmc_relocate.c的代碼如下:

void copy_code_to_dram(void)

{

unsigned long ch;

void (*BL2)(void);

ch = *(volatile unsigned int *)(0xD0037488);

copy_sd_sd_to_mem copy_bl2 =(copy_sd_sd_to_mem) (*(unsigned int *) (0xD0037F98));

unsigned int ret;

// 通道0

if (ch == 0xEB000000)

{

// 0:channel 0

// 49:源,代碼位于扇區49,1 sector = 512 bytes

// 32:長度,拷貝32 sector,既16K

// 0x23E00000:目的,鏈接地址0x23E00000

ret = copy_bl2(0, 49, 32,(unsigned int*)0x23E00000, 0);

}

// 通道2

else if (ch == 0xEB200000)

{

ret = copy_bl2(2, 49, 32,(unsigned int*)0x23E00000, 0);

}

else

return;

// 跳轉到DRAM中

BL2 = (void *)0x23E00000;

(*BL2)();

}

首先我們定義了一個函數指針copy_bl2,將其賦值為0xD0037F98。為什么要這么做,是因為IROM內部固化的代碼已經幫我們實現了一類拷貝函數,其中就包括從sd卡拷貝內容到DRAM的函數,這類函數所位于的地址見下圖:

 

 

由上圖可知,External Copy Function位于0xD0037F80~0xD0038000處,其中sd卡拷貝內容到DRAM的函數就位于地址0xD0037F98,其函數原型如下:

 

其中:

StartBlkAddress:從第幾個扇區開始拷貝,一個扇區為512byte

blockSize:拷貝多少個扇區

memoryPtr:拷貝到DRAM的哪個地址上

with_init:是否需要初始化sd卡

有了上面這些知識,也就很容易看懂copy_code_to_dram 函數了。通過讀地址0xD0037488上的值來確定是使用通道0還是通道1,芯片手冊上明確指出“sd/MMC/eMMC boot – MMC Channel 0 is used for first boot. And Channel 2 is used forSecond boot”,我們的BL1.bin就是first boot,所以會使用通道0,調用CopysdMMCtoMem函數將BL2.bin從sd卡的扇區49拷貝到DRAM的0x23E00000處,拷貝的長度是16K。最后給BL2這個函數指針賦值0x23E0000,然后調用BL2函數即可跳轉到0x23E0000處運行BL2.bin里的代碼了。

 

大家看明白了,一句話三星的芯片內部已經有一個函數是用為從外部存儲COPY東西內部iRAM或者DRAM中了,但是我在現有三星手冊上沒有找到類似的函數說明,沒辦法,我們這些學習者,是很難拿全芯片廠商的資料的。但也不是就沒有辦法實現這個實驗了,U-BOOT中總會干這么個事吧,里面肯定有相關代碼,所以我只能去分析U-BOOT的代碼了,里面有一個文件叫/arch/arm/cpu/armv7/exynos/irom_copy.c的文件,里面的一個函數movi_uboot_copy(),就是將U-BOOT復制到DRAM中的,好了從這里復制必要代碼實現自己的函數吧,我們的函數主要內容如下:

下面內容是定義了我們將要使用的COPY函數,這個函數就是實現了Mini210S中的copy_bl2的功能。

#defineISRAM_ADDRESS   0x02020000

#defineSECURE_CONTEXT_BASE 0x02023000

#defineEXTERNAL_FUNC_ADDRESS   (ISRAM_ADDRESS +0x0030)

#defineEXT_eMMC43_BL2_ByCPU_ADDRESS    (EXTERNAL_FUNC_ADDRESS+ 0x4)

#defineMSH_ReadFromFIFO_eMMC_ADDRESS   (EXTERNAL_FUNC_ADDRESS+ 0x14)

#defineMSH_EndBootOp_eMMC_ADDRESS  (EXTERNAL_FUNC_ADDRESS+ 0x18)

#defineLoadImageFromUsb_ADDRESS    (EXTERNAL_FUNC_ADDRESS+ 0x40)

#defineSDMMC_ReadBlocks(uStartBlk, uNumOfBlks, uDstAddr)  

\定義COPY函數的原型。

    (((void(*)(unsigned int, unsigned int,unsigned int*))(*((unsigned int *)EXTERNAL_FUNC_ADDRESS)))(uStartBlk,uNumOfBlks, uDstAddr))

 

下面開始復制代碼到DRAM中,首先聲明了兩個串口輸出函數,實現這兩個函數是為了調試用的。因為我說過,我現在程序不一定能執行成功,有時LED燈閃爍了,有時又沒有。所以我打出了必要東西來調試用,大家也當學習嘛。

externvoid uart_asm_putc(int c);

externvoid uart_asm_putx(int x);

voidcopy_code_to_dram(void)

{

    void (*user_bin)(void);

    //這里怕DRAM沒有初始化完成,等待了一會

    volatile unsigned long  count=0x100000;

    while(count>0){

        count--;}

 

    uart_asm_putc('C');

    uart_asm_putc('O');

    uart_asm_putc('P');

    uart_asm_putc('Y');

    uart_asm_putc('r');

    uart_asm_putc('n');

    //從SD卡扇區49處復制32個扇區的內容到內存地址0x43e00000處

[1] [2]
關鍵字:tiny4412  裸機程序  重定位代碼  DRAM 引用地址:tiny4412 裸機程序 七、重定位代碼到DRAM

上一篇:tiny4412 裸機程序 六、重定位代碼到IRAM+0x8000【轉】
下一篇:tiny4412 裸機程序 九、串口排查驅動原因及字符圖片顯示

推薦閱讀

“工業機器人是制造業進步的關鍵部分。”——國際機器人聯合會主席Junji Tsuda。 隨著尖端科技的發展與成熟,工業機器人得以成為制造業的主角。工業機器人技術涵蓋了視覺識別、技能學習、利用人工智能進行故障預測、人機協作及簡單編程等領域,可提高制造業的生產率,擴大機器人的應用領域。 根據R數據,2018年全球范圍內工業機器人出貨量將達到42.1...
最近,日本機器人協會主席高西淳夫教授在接受媒體采訪時指出:當前種種跡象表明,智能機器人時代已經到來。他還指出:智能機器人在醫療領域有著巨大的潛力,它將給醫療行業帶來巨大的變化和深刻的影響。 早在1990年,我國著名學者周海中教授在經典論文《論機器人》中就預言:隨著科學技術的進步,尤其是人工智能的發展,智能機器人時代即將來臨;智能機...
據外媒報道,早前曾有不少報道指出,多個地區已經確認三星Galaxy S21將不會提供充電器。德國網站Winfuture的Roland Quandt表示,這包括巴西,現在面臨這一處境的還包括歐洲消費。今年早些時候,三星還在嘲笑蘋果推出沒有充電適配器的iPhone 12的決定,但現在三星似乎是在直接模仿他們的行動?! 蟮溃且呀泟h除了他們在Facebook上嘲笑蘋果早前決...
芯海科技高性能、高可靠信號鏈MCU,帶來工業計算機國產化新選擇 12月16-18日,CNCC 2021中國計算機大會在深圳國際會展中心舉辦。此次大會以“計算賦能加速數字化轉型”為主題,帶來多達111個技術論壇,為參會者帶來學術、技術、產業、教育、科普等方面的全方位體驗。芯??萍迹ü善贝a:688595)產品總監王偉受邀出席并做《高性能高可靠--帶來工業計算機...

史海拾趣

問答坊 | AI 解惑

TDA8351- -場輸出電路

概述:TD8351是一個場輸出電路,它具有高率直流對稱場輸出橋電路、垂直回掃開關、內置自動保護電路(7和4腳之間的輸出短路、輸出和電源之間的短路、溫度過熱保護)。             &nb ...…

查看全部問答∨

請大家幫我分析一下我這個ULN2003為什么燒毀

應用很簡單,2003輸入接MCU的IO,輸出接一個加熱絲(加熱絲電阻100歐姆左右),現在的現象是不管MCU的IO是什么信號,加熱絲都一直進行加熱?,F在批量生產的10臺機器中有一臺出現了這個問題,是元件本身的問題,還是電路的問題呢,小弟很著急,請大 ...…

查看全部問答∨

緊急求助!

我現在需要將5兆方波轉成5兆正弦波?那位大哥做過?最好有現成的電路圖,采用教材上濾波的方式,理論上可以實際操作很難的。謝謝,感激不盡! 我的QQ:739467432 新箱:sujianfeng6601@yahoo.com…

查看全部問答∨

基于AT89C52控制的尋跡小車設計

基于AT89C52控制的尋跡小車設計…

查看全部問答∨

世界上最環保的筆記本~~~

感覺和百元筆記本的手搖發電有一拼~~…

查看全部問答∨

WIFI連接的問題

將設備移出AP覆蓋范圍,重新再移入AP覆蓋范圍后,微軟的連接程序(netui)如何做到自動重新連接的?是定時器嗎?…

查看全部問答∨

求救?我在PB定制WINCE內核的時候出現了一個錯誤

我在PB4.2下定制WINCE,build時出現1個錯誤,系統提示參考WINCE420目錄下的build.err文件,文件的內容如下: Starting sysgen phase for project ( common ) Found localized resources for Languages ( 0404 0407 040C 0410 0411 0412 0413 041 ...…

查看全部問答∨

u-boot引導linux,在出現如下問題后就不動了……請求幫助!

網上有兩種解決方案: 一是串口的問題,即ttySAC0; 二是時鐘頻率的問題。 這兩個我都排除了,但還是不行! 出現的問題如下: Starting kernel ... Uncompressing Linux................................................................... ...…

查看全部問答∨

請問:如果某一個timer到時間而沒有被關閉,將會有什么結果產生?

我是這樣想: 設置并且啟動timer后,timer開始計時,一旦指定的延時結束,函數立即被調用。 可是如果timer到時間沒有被關閉,將會產生什么樣的結果呢? 請高手們幫助解答一下…

查看全部問答∨

串口不能進中斷?但是查詢模式正常

現象:使用查詢模式能夠實現正常收發,使用串口中斷時,沒有中斷時,在主程序循環中正常運行,如果收到字符,不是跳到USART1_IRQHandler,而是跳到了 HardFaultException中斷,可能是哪里的原因,如果說硬件有問題,可查詢模式很正常。請高手 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 寿光市| 顺平县| 清水河县| 玉山县| 湘阴县| 洛浦县| 忻城县| 海南省| 盐亭县| 巴中市| 宁陕县| 洪泽县| 乳山市| 花垣县| 蒙阴县| 阿巴嘎旗| 孟村| 漾濞| 彩票| 栾川县| 抚顺县| 东平县| 右玉县| 简阳市| 邳州市| 黔东| 衡阳县| 女性| 眉山市| 象山县| 太白县| 阿城市| 忻城县| 府谷县| 全椒县| 都兰县| 天峨县| 东辽县| 柳州市| 清新县| 内江市|