sdram的初始化_第1頁
sdram的初始化_第2頁
sdram的初始化_第3頁
sdram的初始化_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、ARM JTAG 仿真器調試方法之 SDRAM 篇( 轉) 2007-12-16 09:28 之前介紹了使用 ARM JTAG 仿真器將映像文件加載到 ARM 處理器內部 SRAM 中進行程序調試的方法,而在實際操作中,將映像文件加載到外部SDRAM 中進行 調試的方式更為常見。要把映像文件加載到 SDRAM 中,除了要正確設置好映像文件的RO 段基地址外 (對于一個加載時域和運行時域相同的映像文件來說, RO 段基地址實際上就是該映像文件在存 儲空間的起始地址) , 更關鍵的是要對 SDRAM 進行初始化。 因為在上電時, SDRAM 是沒 有被初始化的, 所謂初始化 SDRAM ,就是要設

2、置處理器的 SDRAM 空間以及讀寫 SDRAM 的時序參數,因而 SDRAM 在初始化之前是不能進行讀寫操作的。對于 PXA270 處理器,初始化 SDRAM 的工作通過配置存儲控制器寄存器來完成, 這些寄存器包括MDCNFG , MDREFR ,MDMRS 。由于這些寄存器都映射到了某一存儲空間地址,因而可以在 AXD 的命令行窗口 (SystemViews-Command Line Interface Alt+L )中使用 setmem 命令來對寄存器進行配置。 setmem 命令(簡寫為smem)可以為存儲空間的某一地址單元指定值。例如setmem0 x48000000 0 xac9

3、32”的含義就是將常數 0 xac9 保存到地址為 0 x48000000 的字中(一個字 32bit) 。實際上,通過查閱 Intel PXA27x Processor Family Developer s Manual 可知, 0 x48000000 正是寄存器MDCNFG 的地址, 因而這條命令實質上完成了對 MDCNFG 寄存器 的配置,使能 SDRAM partition 0 ,使用 32bit 寬的 SDRAM 數據總線,9 位列地址,13 位行 地址, SDRAM 內部采用 4 bank 設計, tRP=3, CL=3 ,tRCD=3 , tRAS = 7, tRC = 10,采

4、用 普通尋址模式; 不使用 SDRAM partition 2/3 。具體設置要根據實際所使用的 SDRAM 芯片進 行。因此,可使用 34 條 setmem 命令初始化 SDRAM,之后就可以正確地將映像文件 加載到 SDRAM中運行了。順便提一句, PXA270 有兩種 SDRAM 存儲模式,一種是小空間 模式,支持 4 個 64M 的 partition共計 256M 字節,起始地址為 0 xa0000000;另一種是大空 間模式,支持 4 個 256M 的 partition 共計 1GB,起始地址為 0 x80000000。應根據實際情況 設置正確的 RO BASE 地址。關于使用

5、ob 命令自動初始化 SDRAM :由于每次上電后往 SDRAM 加載映像時都需要對其進行初始化,手工輸入多條命令 有時是很繁瑣的。這時, 可以把初始化 SDRAM 的命令序列保存在一個 *.ini 文本文件中(也 可以是 *.txt 文件) ,每條命令占一行。然后在 AXD 命令行窗口使用 obey 命令調用該 *.ini 文 件,就可以將文件中的命令順序執行,繼而完成 SDRAM的初始化。例如,將 SDRAM 初始化命令序列保存在 PXA270.ini 文件中,執行命令:ob $PATH/PXA270.ini就可自動執行初始化 SDRAM 的命令。其中,ob 是 obey 的簡寫,$PAT

6、H 是 PXA270.ini文件的絕對路徑。更多 AXD 命令和內容可以參考 ADS 手冊之 AXD and armsd Debuggers Guide 。啟動 AXD 時自動初始化 SDRAM :感謝網友 Garfield 的指點,他提出了在硬件平臺不變的情況下,在啟動 AXD 時自動 初始化 SDRAM的一勞永逸的辦法,經筆者證實,該方法確實是可行的。具體辦法如下:將初始化 SDRAM 的命令序列保存為一個 *.txt 文本文件(可以直接將上述的 *.ini 文件后綴 改為 .txt ),然后在AXD 的主窗口下選擇菜單 Options Configure Interface. ,在 Se

7、ssion File 一頁中選擇“ RunConfiguration Script ”,將該 .txt 文本文件作為一個腳本加進來,確定。這 樣以后每次啟動 AXD 時,就會自動運行該腳本來完成對 SDRAM 的初始化。昨天又仔細的看了看我們現在要做的 SDRAM 初始化,發現還是有些不明白的地方: 對于 SDRAM 芯片,一般的初始化流程都是標準的,即:開機上電 - 200us 穩定期 - 所 有 Bank Precharge - Auto-refresh -MRS Command - 進入正常模式,那也就是說在這個過 程中,主 MPU 的 SDRAM 控制器中 MR 寄存器(我用的是 92

8、00,估計應該對應你的 270 中的 MDMRS )的值是一直在變化的, 并且每個步驟間都是由嚴格的時序和延時要求的。 我 現在的問題就在這里:固然tRP、 CL、 tRCD 和 tRC 等可以由 Config 寄存器進行配置, 但開機上電后的 200us 穩定期是 如何體現出來的?另外既然要修改 MR 的值,那又怎么能在腳本文件中一次性配置呢? 唉, 徹底倒塌了盼解答!Blog 作者的回復 :個人愚見:(1)上電后 200us 穩定期是為了等待 SDRAM 的輸入時鐘穩定下來,只要干等即可(上電 后等我們啟動 AXD 對 SDRAM 執行初始化命令序列時已經大大超過了200us 等待)。(2

9、)所有 bank precharge,通過片上 SDRAM 控制器發出 PALL (precharge all banks)命令 來實現,可以參考 SDRAM 控制器狀態圖,對于 PXA270, 上電時處于 NOP 狀態,此時如果 發出新的 MRS 命令(即寫寄存器 MDMRS )會自動轉入 PALL 狀態進行所有 BANK 的預充 電,然后才由 SDRAM 控制器將控制信號置 MRS命令狀態,將地址信號置 MDMRS 內容, 對 SDRAM 芯片的模式寄存器進行設置。另外,在 NOP 狀態下,其他一些操作如置位 MDREFRSLFRESH 也會導致 PALL 。(3)因此, 在初始化 SDR

10、AM 時, 使用簡單的命令配置寄存器 MDCNFG ,MDREFR 和 MDMRS 時,SDRAM控制器是會自動進入 PALL 狀態對所有 BANK 進行預充電的。(4)至于 auto-refresh,是指通常的 CBR 吧,在 infineon 的 HYB25L256160AC (mobile-RAM ) 的datasheet 中指出,該步驟可以在 MRS 命令之前,也可以在其之后。 在 PXA27X 的 manual 中指出,初始化SDRAM 時要根據具體的 SDRAM 芯片來決定進行 CBR 的次數,具體做法 是對 SDRAM 進行非突發式的通常的讀寫操作(而且在首次進行 CBR 時,也

11、會自動轉入 PALL 先進行預充電) 。(5)因此, SDRAM 控制器的狀態機實際上保證了在用簡單命令序列進行SDRAM 初始化時, SDRAM 所需要的初始化流程。 (由于命令序列通過 JTAG 仿真器上位機程序控制目標 處理器執行,所以執行速度較慢,而在啟動代碼中初始化 SDRAM 時,通常需要在配置寄 存器的操作之間插入 NOP 操作或適當延時,保證 SDRAM 初始化流程中的必要時延。 )(6)使用簡單命令序列來初始化 SDRAM ,其目的僅僅是為了將映像文件加載到 SDRAM 中,而在啟動代碼中初始化 SDRAM 時,實際上不僅僅是初始化 SDRAM 芯片,之前還要 初始化 SDR

12、AM 控制器,使兩者之間的配置相匹配,目的是為了在目標系統運行階段,保 證目標處理器能無差錯地對 SDRAM 進行讀寫操作,因此必須嚴格按照目標處理器的 datasheet 描述的上電復位初始化流程和步驟執行,包括嚴格的時序要求。(7)以上只是個人愚見,紕漏之處有待指正。這樣使用簡單命令序列來初始化SDRAM 的內部過程如下:上電等待 200us 以上-寫控制寄存器(實際上進行了所有 BANK 的預充電), 包括寫 MDMRS( 發 MRS 命令,設置 SDRAM 芯片工作模式) -auto-refresh- 正常模式。 不過, auto-refresh 這一步似乎沒有找到合理的對應點,因為寫

13、控制寄存器的命令序列并沒 有對 SDRAM 進行讀寫操作(或者是在加載映像文件到 SDRAM 時對其進行了寫操作而進 行了 auto-refresh?)。首先謝謝博主這么認真地幫我分析這個問題,你的這種嚴謹治學的態度真的讓我很感謝!你說的 PXA270 由寫MR 寄存器而自動觸發所有 Bank 預充電的情況給我了很大的啟發,對 照著 Atmel 的 9200 說明書,看到在它的 SDRAM 控制器啟動流程中明確寫著在 CBR 之前 “ Previously, an “ All Banks Precharge ” commandmust be issued. ” 也就是說,在這個啟 動過程中,的

14、確是每一個 SDRAM 模式變化都需要人工去修改SDRAMC 的對應寄存器的。 看來,還是 Intel 比 Atmel 要更牛一些,難怪能成.PC 處理器的老大:)那現在就是在腳本文件中如何簡單命令序列來進行配置的問題了,首先毫無疑問應該先配置Config 寄存器,以確定 tRP、CL、tRCD 和 tRC 對應的時鐘周期;接下來就是按標準化流程 由 PALL - CBR(8 SDclock) - MRS - Normal依次修改 MPU 片內 SDRAMC_MR 寄存器的模式選擇位,以實現模式的切換。在這個過程中可能會出現兩種情況:一種是正像博主所說的,由于JTAG 仿真速度較慢,不同 se

15、tmem 命令直接執行的時延已經足夠,那么就萬事大吉;另一種情況是不同 setmem 命令對同一個 SDRAMC_MR 寄存器進行多次修改,造成了時許 的混亂,那就跟你說的一樣:需要在中間加入以保證時延;具體結果如何,就等著過兩天 Demo 板回來就真相大白了! 嘿嘿 你好,看了你的文章很受啟發,我有個問題想請教一下你,你在文中說了SDRAM 初始化的問題, 我用的是三星的 44B0,在它的初始化程序 44binit.s中已經有了對 SDRAM的初始 化, 包括對有關的 13個寄存器的初始化。請問這樣還用在 AXD 下初始化 SDRAM 嗎,為 什么,謝謝Blog 作者的回復 :在程序中初始化

16、 SDRAM 是為了程序正常運行時能正常訪問 SDRAM ,而把映像文件加載到 SDRAM 中進行調試時在 AXD 下初始化 SDRAM 是為了在加載映像文件時能正常訪問 SDRAM ,以便把映像文件暫時寫入SDRAM 。兩者是兩碼事。所以,要在 SDRAM 中調試程序,就必須先初始化 SDRAM 。 你好,感謝你的回復,還有個問題請教一下你,是不是每次運行程序都要在 AXD 下初始化 SDRAM ,還是只要在第一次使用時初始化一下就可以了,先 謝謝了Blog 作者的回復 : 每次系統重新上電或硬件復位后都需要重新初始化 SDRAM 才能把映像文件加載到SDRAM 。可以設置在 AXD 啟動時

17、自動對 SDRAM 進行初始化, 見“啟動 AXD 時自動初始 化 SDRAM ”部分。有時候 AXD 啟動后需要重新配置,這是 ADS 自身的問題,主要是看啟 動后在 Command Line Interface窗口有沒有出現初始化 SDRAM 的命令,另外在 AXD 的源 碼窗口右鍵 Interleave Disassembly ,看各條代碼在 SDRAM 中對應地址的內容是否為正確的 機器碼,來檢查映像文件是否成功加載。謝謝,非常感謝你的回復, 謝謝你不厭其煩的回答, 再看你的帖子前,我的程序一直沒有在 AXD 中對 SDRAM初始化,也沒有向你在“啟動 AXD 時自動初始化 SDRAM

18、 :”中體的那 樣做,就是什么也沒做,可是程序也能在 SDRAM 中調試,這是為什么呀,還是先謝謝了, 麻煩你了Blog 作者的回復 :1.確認映像文件是否真的在 SDRAM 中;2.確認所用的 JTAG 仿真器上位機后臺服務程序是否自動對 SDRAM 進行初始化;3.開發板的啟動 ROM 中是否有對 SDRAM 進行初始化的代碼。如果上電后 SDRAM 沒有進行初始化,是不可能正常工作的。是否存在上電后能自動按照 前次的模式寄存器設置進行初始化的 SDRAM ,這就不得而知了。你好,看了你的文章很有收獲我剛接觸 AXD,很多不明白,我用的是 S3C2410,我想調試bootloader,初始化 SDRAM 后,把 bootloader 加載到 SDRAM, 但 S3C2410 默認是上電后自動將 NANDFLASH 中的前 4K 復制到 SRAM 即從 0 x0000

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論