移植uboot之修改代码支持NorFlash记录续集
接著上一篇文章寫的內(nèi)容(上一篇文章鏈接:移植uboot之修改代碼支持NORFLASH),上一篇結(jié)尾測試flash的擦除讀寫功能,結(jié)果無法寫flash,卡在了這里: 
  
 前面已經(jīng)擦除成功,這里寫內(nèi)容寫不進去,顯示沒有擦除成功。一開始懷疑是不是硬件問題,后來用好的uboot試了一下,是可以實現(xiàn)寫功能的,所以排除了硬件的問題。軟件有問題?看一下代碼關(guān)于擦除讀寫的內(nèi)容吧,根據(jù)串口打印的消息搜索字符串信息:Copy to Flash… 以及Flash not Erased信息。 
 通過搜索相關(guān)字符串消息,搜索到Cfi_flash.c中有函數(shù):write_buff這個函數(shù),這個函數(shù)里面有
通過將上面幾個判斷語句屏蔽掉,然后重新編譯,測試,發(fā)現(xiàn)可以寫flash了,那么接下來就該看是哪個判斷語句執(zhí)行了導(dǎo)致無法寫flash的。 
 通過逐個將上面結(jié)合判斷語句屏蔽,最后發(fā)現(xiàn)是執(zhí)行了這些: 
才導(dǎo)致的無法寫flash,心累啊,調(diào)試過程漫長啊,燒寫編譯燒寫編譯燒寫。。。。。不過找到了問題所在,我很開心!!! 
 由上面代碼知結(jié)構(gòu)體數(shù)據(jù)info->portwidth這一項出了問題,也就是flash的端口寬度有問題。跳轉(zhuǎn)到函數(shù):flash_write_cfiword:
我將上面的判斷語句屏蔽掉,重新燒寫啟動,果然,可以正常寫FLASH。看來問題就是出在上面的switch (info->portwidth)結(jié)構(gòu)中,端口寬度的問題!!!!
現(xiàn)在想想應(yīng)該是哪里錯了呢? 
 1.排除硬件問題,因為我燒寫uboot都是通過舊的uboot燒寫新的uboot,中間存在擦除與寫flash操作 
 2.這之前修改代碼涉及到flash端口寬度的操作的有哪些?看來是當(dāng)初加這個結(jié)構(gòu)體時有問題:
看來是這句話的問題了,[0] = MTD_UADDR_0x0555_0x02AA /* x16 */,我們的16位寬,應(yīng)該是1,將其改成:
[1] = MTD_UADDR_0x0555_0x02AA /* x16 */重新編譯uboot,燒寫測試: 
  
 一個字:完美!!!!! 
 感慨一下這次的調(diào)試過程:提升了一個檔次吧~(之前挺菜的)
想獲得各種學(xué)習(xí)資源以及交流學(xué)習(xí)的加我: 
 qq:1126137994 
 微信:liu1126137994 
 可以共同交流關(guān)于嵌入式,操作系統(tǒng),C++語言,C語言,數(shù)據(jù)結(jié)構(gòu)等技術(shù)問題!
總結(jié)
以上是生活随笔為你收集整理的移植uboot之修改代码支持NorFlash记录续集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 软考高级-系统架构师-论文
 - 下一篇: unity让对象作为参数_unity-c