DDR3內存更換調試總結

    這段日子,PM說板子內存小了點,得換個大點的。心想我以前換過,還算有譜應該問題不大。然後把活兒接了下來,沒想到這一調試一路的杯具。更換各大廠家的內存,話說這個4Gb的DDR3芯片確實不一樣(經過半個多月的折騰才發現)。Datasheet都快翻爛了,依然沒有頭緒。寄存器過了一遍又一遍,結果發現某些重要的寄存器由於信息不足無法配置value(這就是OEM的最大BUG)。放棄了,發email給廠商。人家說已經有成功的客戶了,爲啥你們就不行呢。這點真是讓人鬱悶壞了,我承認我RP有時候確實差了些。但也不能這麼操蛋吧,於是一個一個排查。
    一開始手焊的板子全部發到工廠去重焊,結果回來bootloader還是起不來。鬱悶了,手頭的那個入門級示波器對這樣問題只能是“乾瞪眼”。沒轍,去方案商公司吧,這一折騰又是一個禮拜。他們也沒弄明白怎麼回事,各種郵件飛來飛去,諮詢的很多的負責該項目的engineer。最後連這位技術支持都說,這幫人真是光吃飯不辦事。自己負責的模塊還得去問別人是怎麼弄的。我表示淡定——貌似這是個通病。。。
扯了一堆,說正題。首先板子更換大容量內存後,出現了無法燒寫bootloader鏡像的問題。SOC串口打印信息正常,說明SOC芯片引導啓動模塊焊接無誤,電源網絡也正常。bootloader無法從串口加載到DDR,可能的原因有:
1、BGA焊接問題;
2、DDRC初始化失敗,bootloaer的CPU初始化參數設置有問題;
3、PCB設計缺陷(jitter和skew等)。
    依據上述的基本判斷,我們藉助高速示波器和仿真器等工具,對DDR3的時鐘信號進行了測試。同時比對了更換內存前後的時鐘信號。看到了下面的這幅圖片:

     SOC什麼都沒有燒寫,竟然出現了“諧波”。主波爲12MHz,該諧波有410MHz左右。一時之間,大家都有點暈乎。這個諧波是相當的穩定。後來當我們諮詢的多位工程師後判定這個高頻波不是諧波,而是內部pll倍頻產生的。因此我們抓到的波形是正常的波形,這一點在之前的正常的板子上得到了驗證。
    通過仿真器的測試,我們發現當對內存指定地址進行簡單寫和讀的操作時,寫入和讀取的值始終是不一致的。而且是隨機的,不論是對某個地址讀寫還是對地址段進行讀寫,問題一直存在。我們得出的結論是:時序出了問題。
    其實這個結論有很多種可能性的原因造成。時序問題,一種可能是硬件設計的問題;第二,比如說DDR3工作模式弄錯了,或者關於時間的參數沒有配置正確等等。這樣的結論讓人無法繼續解決問題。後來證實這樣確實是把問題複雜化了,方向沒找到。

    最後問題的解決,只需要更改一項關於刷新延遲參數的寄存器就可以了。而這個信息在數據手冊上也寫着很明顯。而我卻沒有注意這個小小的細節變化。結果,我們將DDR3的刷新時間調大以後,一切又恢復了正常,但是依然有許多遺留的問題。更改DDR刷新時間,我的理解是:由於單位BANK內的物理空間增加了,較之原來的DDR3,需要刷新的物理空間增加。

    因此,刷新時間對於大容量的顆粒也必然增加。查閱數據手冊後發現,確實如此。

雖然目前得到了突破性的解決,但是還有很多地方有待於進一步的測試和業務考驗。
發佈了12 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章