日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下uboot内存测试,uboot中的内存测试方法

發布時間:2023/12/20 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下uboot内存测试,uboot中的内存测试方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Denx的UBOOT針對DDR內存的檢測過程

從上圖,可以看出要經過3個階段:

(1) 檢測數據線

如果數據線是斷開的,則一切測試都無從談起,因此先測試Data lines.

Data lines可能有2種錯誤:

(1.1) 斷開

如果是兩根數據線,只需要寫入并讀出一個pattern=0b01(0b開頭表示二進制數)就能判斷它們是否短路或斷開。

大部分的嵌入式平臺不止兩根數據線,我們以64位地址線為例:

pattern = 0b101010101010101010.... 能檢測出奇偶位之間的數據錯誤。

如果這個錯誤被排除,每兩根數據線組成一組(這是理解下一個pattern的關鍵),

再用相同的辦法,檢測每相鄰兩組之間是否有短路,就得到第二個pattern,就是 0b110011001100......

依次類推,以4根數據線為一組,8根線為一組,......,相繼得到共6個pattern,分別是 :

0xaaaaaaaaaaaaaaaa (單根數據線為一組)

0xcccccccccccccccc (02根數據線為一組)

0xf0f0f0f0f0f0f0f0 (04根數據線為一組)

0xff00ff00ff00ff00 (08根數據線為一組)

0xffff0000ffff0000 (16根數據線為一組)

0xffffffff00000000 (32根數據線為一組)

只要相繼寫入并讀出這6個pattern就能驗證是否存在數據線交叉短路錯誤。

取以上6個paatern的反碼,總共12個pattern,就能檢測到每一位都可以寫入和讀出0和1。

(1.2) 布線造成的互相短路

-------------------------------------------------------------------

數據線的其它問題:

(1.1) 什么是floating buses錯誤

floating buses會“欺騙”測試軟件,如果測試軟件寫入并很快讀出一個值的時候,寫操作會跟數據線上的電容充電,

總線會短暫的保持它的狀態。當測試軟件讀操作時,總線會返回剛寫入的值,即使實際上該數據線是斷路的。

(1.2) 如何檢測數據線的floating buses錯誤

寫入和讀回之間再插入一次對不同地址寫入不同值的操作。

例如,X寫入X1位置,Y寫入Y1位置,再從X1位置讀出X值則表示floating buses錯誤不存在。

(2) 檢測地址線

如果地址線存在錯誤,其癥狀是地址空間中的兩個不同位置被映射到同一物理存儲位置。

更通俗地講,就是寫一個位置卻“改變”了另一個位置。

地址線的錯誤檢測相對簡單,其算法是:

(2.1)將地址的值作為內容寫入該地址處,匯編的表示方法是 (addr) = addr。

即將地址值寫到地址對應的空間里,這樣確保每一個位置的內容不同。

(2.2)依次將內存基地址的某一根地址線的值翻轉(flip/toggle)得到某個地址,從該地址取值,

如果該值和基地址的值相等,則表示某一位地址線有問題。

這個算法的特點是每次只檢測一根地址線,方法簡單有效。

(3) 檢測DDR物理內存部件

存儲單元的檢測則是真正對DDR內存芯片的檢測。內存芯片的常見錯誤是bit-stuck,簡而言之,就是讓它是0,它偏為1,

讓它為1,它偏為0,檢測方法也很簡單,就是用不同的pattern去寫盡可能所有的地址并讀回比較。

有一些常用的 pattern如0x5555, 0xAAAA等。

2. Uboot中的測試命令

在Uboot命令行下也有幾個簡單的命令可以檢測常見內存故障,如下所示:

(1)mtest addr lenth pattern

用特定的pattern去刷DDR的空閑空間.

這個命令需要注意,DDR在Uboot啟動后被映射到了0地址,但是uboot的代碼和堆、??臻g0x10000000處開始,

這些空間是不能被刷的,否則就掛死了。

(2)復制NOR flash的內容到內存中,如 cp.b 0x20080000 0x7fc0 20000,然后比較 cmp.b 0x20080000 0x7fc0 20000。

(3)下載kernel image到內存中,copy NOR flash 或tftp都行,然后調用iminfo LOAD_ADDR 檢測CRC錯誤。

第二種和第三種方法可以說Pattern的隨機性更大一些。

當然最徹底的檢測方法當然是長時間跑Linux系統,上面的方法更適用于系統不穩定時定位錯誤。

總結

以上是生活随笔為你收集整理的linux下uboot内存测试,uboot中的内存测试方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。