在uboot下,denx針對常見記憶體故障實現了嚴格的ddr檢測程式。下圖分三個階段分別描述了檢測資料線,位址線和ddr物理儲存器件的過程和方法。科學是嚴謹的,來不得半點僥倖, 而ddr子系統又是很容易出故障卻很難debug的。denx設計的這一套演算法堪稱ddr記憶體檢測之「鐵面無私包青天」!
為什麼先檢測資料線?
因為資料線如果是斷開的,一切無從談起!第二步是檢測位址線,只有資料線位址線都ok,檢測記憶體的儲存單元才有意義,這樣的順序也利於分割定位問題。1樓的testing sequence 框圖將整個檢測過程分成三大步,用三個虛線方框表示。
資料線的連線錯誤
資料線的連線可能存在兩種錯誤,一種是被斷開,另一種佈線或生產造成互相短路。
如何檢測資料線的連線錯誤
denx設計的資料線檢測演算法我認為還是很tricky和精秒的,看了好大一會才看懂:(
舉個例子: 如果是兩根資料線,只需要寫入並讀出乙個pattern=0b01 就能判斷它們是否短路或斷開。很明顯,大部分的嵌入式平台不止兩根資料線,我們以64位位址線為例,pattern = 0b101010101010101010.... 能檢測出奇偶位之間的資料錯誤。如果這個錯誤被排除,每兩根資料線組成一組(這是理解下乙個pattern的關鍵),再用相同的辦法,檢測沒相鄰兩組之間是否有短路,就得到第二個pattern,就是 0b110011001100...... 依次類推,以4根資料線為一組,8根線為一組,相繼得到共6個pattern,分別是0xaaaaaaaaaaaaaaaa,0xcccccccccccccccc,0xf0f0f0f0f0f0f0f0,0xff00ff00ff00ff00, 0xffff0000ffff0000,0xffffffff00000000。只要相繼寫入並讀出這6個pattern就能驗證是否存在資料線交叉短路錯誤。
如何檢測資料線與板上其它訊號線交叉短路或斷路
取以上6個paatern的反碼,總共12個pattern就能檢測到每一位都可以寫入和讀出0和1。
什麼是floating buses 錯誤
floating buses會「欺騙」測試軟體,如果測試軟體寫入並很快讀出乙個值的時候,寫操作會跟資料線上的電容充電,匯流排會短暫的保持它的狀態。當測試軟體讀操作時,匯流排會返回剛寫入的值,即使實際上該資料線是斷路的。
如何檢測資料線的floating buses 錯誤
檢測floating buses 錯誤的演算法不複雜,在寫和讀回之間再插入一次對不同位址寫入不同值的操作。例如, x 寫入 x1位置, y 寫入y1 位置,再從x1 位置讀出x 值則表示floating buses 錯誤不存在。
位址線的錯誤
如果位址線存在錯誤,其症狀是位址空間中的兩個不同位置被對映到同一物理儲存位置。更通俗地講,就是寫乙個位置卻「改變」了另乙個位置。
位址線的錯誤檢測
位址線的錯誤檢測相對簡單,其演算法是:
首先,將位址的值作為內容寫入該位址處,彙編的表示方法是 (addr) = addr。這樣確保每乙個位置的內容不同。
其次,依次將記憶體基位址的某一根位址線的值翻轉(flip/toggle)得到某個位址,從該位址取值,如果該值和基位址的值相等,則表示某一位位址線有問題。
這個演算法的特點是每次只檢測一根位址線,方法簡單有效。
儲存單元的錯誤
以上資料線和位址線的檢測都是檢測佈線或工廠生產的錯誤,而儲存單元的檢測則是真正對ddr記憶體晶元的檢測。記憶體晶元的常見錯誤是bit-stuck,簡而言之,就是讓它是0,它偏為1,讓它為1,它偏為0,我行我素,不聽號令:(
檢測方法也很簡單,就是用不同的pattern去寫盡可能所有的位址並讀回比較。有一些常用的pattern如0x5555, 0xaaaa等,在此不再贅述。
幾個簡單的檢測ddr故障的方法
Linux kernel 記憶體子系統
理論概述 核心把物理頁作為記憶體管理的基本單位 使用struct page結構來描述當前機器上的每乙個物理頁 比如核心支援4kb的頁大小,機器上有1gb物理記憶體,那麼意味著會有262144個struct page 核心把物理頁劃分為不同的區 同一區內的記憶體具有相似的特徵 一般會有zone dma...
記憶體 DDR2與DDR
ddr2與ddr的區別 與ddr相比,ddr2最主要的改進是在記憶體模組速度相同的情況下,可以提供相當於ddr記憶體兩倍的頻寬。這主要是通過在每個裝置上高效率使用兩個dram核心來實現的。作為對比,在每個裝置上ddr記憶體只能夠使用乙個dram核心。技術上講,ddr2記憶體上仍然只有乙個dram核心...
如何區分DDR1 DDR2 DDR3記憶體條
ddr1,ddr2,ddr3記憶體條 ddr是double data rate雙倍速率同步動態隨機儲存器的英文縮寫 就是俗稱的一二三代記憶體條。這三種記憶體條工藝不同,介面不同,效能不同,互不相容。要區分它們,也不難。台式電腦記憶體 1 如果要我說哪種記憶體條最好區分,我會選ddr1,也就是一代記憶...