啟動問題 NAND擦寫問題

2021-06-16 05:46:31 字數 1204 閱讀 8446

iar_  問題現象1:程式進行連線設定的時候,只能設定很小的範圍,檢視map檔案,以及可執行檔案大小,整個程式在4k範圍內,由於這個凡是在是stepping stone中,所以燒寫進nand,跑起來沒有問題。 嘗試將rw和zi段放在sdram位址進行連線,燒寫到nand,沒有反應。

用jtag檢視暫存器資訊,看出一些端倪,初始化硬體的**並沒有起作用,可能有2種情況:跑到這些**了,但是有問題,沒有初始化成功;根本就沒有跑到這些**就出問題了。回到除錯狀態,以.mac檔案先進行初始化,程式中硬體初始化部分單步觀察,中間通過jtag手動修改有關暫存器,得到程式初始化功能沒問題。那麼很基本就是原來沒有跑到這部分**的原因了。

回想啟動過程,從ctartup.s開始,到low_level_init(),到data init部分,呵呵問題就找到了:這裡主要的操作是根據連線位址搬移相應的**段,初始化相應的資料段,而連線檔案中將其中的部分段連線到了sdram中,那麼在這之前就需要將sdram controller初始化好。

而在除錯的時候由於使用了.mac檔案已經在最前面做了這個工作,所有後面做這個工作沒有問題,而實際的程式中,將這部分**防在了這個工作的後面,搬移**和初始化資料都沒辦法做。情景跟基本的bootloader操作都一樣。

按照這樣分析修改程式後沒問題。

問題現象2:nand 無法進行燒寫和擦除。馬上想到的是flash晶元有問題,測試其相應引腳電壓,寫保護電壓,通過指令檢查其壞塊資訊等,發現沒有問題;不依賴燒寫工具操作,自己寫擦寫程式,也不能實現,排除是工具支援不好的問題;進一步單步執行擦寫程式,觀察相應nand控制模組暫存器狀態,有問題:flash被lock了,仔細閱讀datasheet,與分析基本符合,所以問題出在arm晶元上。被鎖住的原因是原來nand中的程式上電後立即執行可能有**做了這個事情。

解決辦法,reset,復位後保證不執行原始在nand中上來的程式,進行擦除或者覆蓋原來的程式。可以通過watch dog timer觸發中斷進行復位,復位後將新程式燒寫進nand或者擦除nand中原來的程式。

主要是對nand controller中lock這個功能沒有注意過,這個暫存器位一旦被置位將無法通過軟體的辦法進行清除,只能通過reset。當然另外一種辦法就是通過jtag來直接燒寫nand flash,需要利用特定的掃瞄鏈,sjf是否可以值得一試, 呵呵。而不是象h-jtag那樣通過程式在cpu中執行,實現燒寫,因為這樣必須用到自己的nand controller。

遇到這類問題主要還是要通過觀察響應暫存器的資訊來進行細緻分析。

oracle em 啟動問題

一 em 常用命令 emca repos create 建立乙個 em資料庫 emca repos recreate 重建乙個 em資料庫 emca repos drop 刪除乙個 em資料庫 emca config dbcontrol db 配置資料庫的 database control emca...

oracle啟動問題

正常情況下您的oracle服務是可以自己啟動的,如果您的oracle不知道因為什麼突然之間不可以啟動了,你可以考慮以下情況。1.你的電腦ip位址發生了改變,比如你的電腦ip位址是自動分配的,因為oracle的啟動繫結的是自己的ip位址,所以如果你的ip位址發生了變化,那麼你的資料庫肯定是無法啟動的。...

mysql啟動問題

終於解決上週遺留下來的mysql不能啟動的問題了,原因是之前安裝了兩次mysql,而且路徑不同,這裡有別人的詳細解決方案 由於之前不知道問題所在,所以重新裝了乙個虛擬機器,64bit的,前面不能make zlib的問題,要對64機進行相應設定 編譯安裝成功後,又出現了不能啟動的問題,提示的問題如下 ...