真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中如何自動(dòng)識(shí)別內(nèi)存大小-創(chuàng)新互聯(lián)

這篇“Android中如何自動(dòng)識(shí)別內(nèi)存大小”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android中如何自動(dòng)識(shí)別內(nèi)存大小”文章吧。

成都網(wǎng)站制作、成都做網(wǎng)站的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗(yàn)。成都創(chuàng)新互聯(lián)公司多年互聯(lián)網(wǎng)經(jīng)驗(yàn),見的多,溝通容易、能幫助客戶提出的運(yùn)營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇成都創(chuàng)新互聯(lián)公司,不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價(jià)值服務(wù)。

1、MINI6410的內(nèi)存硬件結(jié)構(gòu)與尋址關(guān)系

在MINI6410上的內(nèi)存硬件結(jié)構(gòu):

對(duì)于MINI6410的設(shè)計(jì),用了兩塊引腳兼容的DDR內(nèi)存芯片來實(shí)現(xiàn)128MB內(nèi)存和256MB內(nèi)存可共用一個(gè)PCB。
128MB內(nèi)存使用的是兩片K4X51163PG(32Mx16bit),形成一個(gè)32M×32bit(128MB) 的內(nèi)存。256MB內(nèi)存使用的是兩片K4X1G163PE(64Mx16bit),形成一個(gè)64M×32bit(256MB) 的內(nèi)存。而這兩款芯片在引腳上的差別就是K4X51163PG的F7是NC腳,而K4X1G163PE的F7腳是A13 。這個(gè)F7引腳在 128MB內(nèi)存版本的MINI6410中這個(gè)引腳是不連接的,而256MB版本中是通過一個(gè)0歐電阻和S3C6410的Xm1ADDR13相連的 。

看了這兩個(gè)內(nèi)存芯片和S3C6410(DRAM控制器)的數(shù)據(jù)手冊(cè) 的朋友一定知道,這種連接形成一個(gè)這樣的尋址關(guān)系:

128MB內(nèi)存版本:Xm1ADDR[15:14](bank):Xm1ADDR[12 :0](行地址):Xm1ADDR[9:0](列地址) 。一共25根地址線剛好可尋址32M空間。256MB內(nèi)存版本:Xm1ADDR[15:14](bank):Xm1ADDR[13 :0](行地址):Xm1ADDR[9:0](列地址) 。一共26根地址線剛好可尋址64M空間。而這兩種連接和芯片配置也要通過修改S3C6410的DRAM控制器的兩個(gè)寄存器的參數(shù)來匹配。

2、U-boot中內(nèi)存自適應(yīng)代碼應(yīng)處的位置
 
做好了以上的兩個(gè)知識(shí)準(zhǔn)備后,我們看看在u-boot中應(yīng)該在什么位置來識(shí)別和自適應(yīng)不同的內(nèi)存大小。
首先我們?cè)谧R(shí)別了內(nèi)存大小之后可能需要重新配置S3C6410的內(nèi)存控制器。這么一來,這些代碼不能在DDR中運(yùn)行。因?yàn)橐坏┲匦屡渲脙?nèi)存控制器,必然導(dǎo)致內(nèi)存暫時(shí)無法使用,如果代碼在DDR中CPU可能無法得到下一步的代碼。所以這些代碼要放在u-boot實(shí)現(xiàn)自拷貝到內(nèi)存之前的地方,其實(shí)***的地方就是在u-boot的SPL部分中初始化內(nèi)存控制器的代碼段中。

這些代碼就在:arch/arm/cpu/arm1176/s3c64xx/cpu_init.S

這個(gè)文件是匯編代碼,其中的函數(shù)mem_ctrl_asm_init是通過start.S中的“bl    lowlevel_init”------>/board/samsung/mini6410/lowlevel_init.S中的 lowlevel_init ”bl    mem_ctrl_asm_init”調(diào)用的。mem_ctrl_asm_init函數(shù)中的代碼對(duì)S3C6410的DRAM控制器進(jìn)行了初始化,并對(duì)外部的DDR內(nèi)存也進(jìn)行了初始化,所以內(nèi)存的識(shí)別和自適應(yīng)代碼應(yīng)該放在這些初始化之后。先識(shí)別內(nèi)存的大小,如果內(nèi)存大小和原先DRAM控制器的配置不相符,就修改DRAM控制器的配置。

3、內(nèi)存大小的識(shí)別

針對(duì)MINI6410的情況,我們只需要識(shí)別內(nèi)存是128MB還是256MB。由于這兩種內(nèi)存大小關(guān)系到DRAM控制器的兩個(gè)寄存器的參數(shù) ,所有我們必須先假設(shè)我們的內(nèi)存大小,再通過讀寫的方式來證明,如果證明我們的假設(shè)是錯(cuò)誤的,再修改寄存器的參數(shù)。

我移植的U-boot代碼中首先假設(shè)內(nèi)存是256MB,并先配置DRAM控制器為256MB內(nèi)存的參數(shù)。如果這時(shí)連接的是128MB內(nèi)存 ,那么就會(huì)有這樣一個(gè)有趣的現(xiàn)象:

由于Xm1ADDR[13 ] 沒有連接,所以DDR內(nèi)存的***個(gè)8M×32bit(32MB)和第二個(gè)8M×32bit(32MB)是鏡像關(guān)系,第三個(gè)8M×32bit(32MB)和第四個(gè)8M×32bit(32MB)是鏡像關(guān)系,以此類推。一共有四個(gè)這樣的鏡像關(guān)系,共256MB。如果連接的就是256MB的內(nèi)存就不會(huì)有這樣的現(xiàn)象。所以,只要我們證明了這種現(xiàn)象存在,就證明了我們其實(shí)連接的是128MB內(nèi)存,然后重新配置DRAM控制器為128MB內(nèi)存的參數(shù)就大功告成了。

所以我移植的U-boot代碼中首先寫一個(gè)32bit的測(cè)試數(shù)據(jù) 到***個(gè)8M×32bit(32MB)的某個(gè)位置 (比如0x0地址),然后就去第二個(gè)8M×32bit(32MB)相應(yīng)偏移位置讀取,如果數(shù)據(jù)一致就可以證明鏡像關(guān)系。但是還不保險(xiǎn),如果就是這么巧(在連接 256MB的內(nèi)存的情況下)第二個(gè)8M×32bit(32MB)相應(yīng)位置本身就是這個(gè)數(shù)據(jù)怎么辦?不要緊,我們?cè)偃サ诙€(gè)8M×32bit(32MB)同一位置 寫入另一個(gè)測(cè)試數(shù)據(jù) ,然后去***個(gè)8M×32bit(32MB)的那個(gè)位置(也就是一開始的那個(gè)寫入位置)讀取數(shù)據(jù),如果數(shù)據(jù)一致就完全可以證明鏡像關(guān)系。通過這樣的兩次測(cè)試,看看是否要重新配置DRAM控制器參數(shù)

但是我們不能 假設(shè)內(nèi)存是128MB ,并先配置DRAM控制器為128MB內(nèi)存的參數(shù)。如果連接的是256MB的內(nèi)存,沒有任何特殊的現(xiàn)象可以測(cè)試到。通過上面的尋址關(guān)系,如果連接的是256MB的內(nèi)存,只是第二、四、六、八(假設(shè)Xm1ADDR[13 ]一直是0 )個(gè)8M×32bit(32MB)是沒法訪問的(可以說是內(nèi)存空洞),這個(gè)無法通過讀寫證明。(通過尋址關(guān)系推斷,未通過實(shí)驗(yàn)證明)

4、關(guān)于內(nèi)存控制器的重配置

如果上面的步驟中測(cè)試出了鏡像的存在,我們必須重新配置兩個(gè)寄存器的值,但是如何重新配置,這個(gè)三星的數(shù)據(jù)手冊(cè)是沒有講的,我通過測(cè)試發(fā)現(xiàn)可以通過以下的步驟重新配置DRAM控制器:

1、將DRAM控制器設(shè)為暫停(Paused)狀態(tài);

2、檢測(cè)P1MEMSTAT,直到確認(rèn)了暫停(Paused)狀態(tài);

3、將DRAM控制器設(shè)為配置(Config)狀態(tài);

4、檢測(cè)P1MEMSTAT,直到確認(rèn)了配置(Config)狀態(tài);

5、修改需要重新配置的寄存器

6、將DRAM控制器設(shè)為啟動(dòng)(Go)狀態(tài);

7、檢測(cè)P1MEMSTAT,直到確認(rèn)了就緒(Ready)狀態(tài);

以上就是關(guān)于“Android中如何自動(dòng)識(shí)別內(nèi)存大小”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


名稱欄目:Android中如何自動(dòng)識(shí)別內(nèi)存大小-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://weahome.cn/article/ieico.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部