NandFlash調(diào)試的過(guò)程與心得
調(diào)試的過(guò)程與心得交流
硬件平臺(tái):ARM7 44b0x
軟件調(diào)試平臺(tái):ADS1.2
目的:調(diào)試一型號(hào)為:三星公司的k9f2808 容量為16M *8Bit 的NandFlash
文中:NF表示的是NandFlash
當(dāng)把k9f2808 焊好后,便開(kāi)始調(diào)試了,但是在其中遇到很多問(wèn)題
我是第一次接觸NandFlash,剛開(kāi)始還是很陌生
<1>可以讀出ID號(hào)(非常順利, 這一點(diǎn)是我也沒(méi)有想到的,認(rèn)為基本上就搞定了)
<2>我試著寫(xiě)擦除代碼 寫(xiě)頁(yè)(我試著寫(xiě)0X5), 讀頁(yè)。 結(jié)果是返回來(lái)的全部是0XFF, 這時(shí)就出現(xiàn)了好多的疑點(diǎn)了:
我分析如下:
第一種可能:沒(méi)有擦除到NF,也就不可能寫(xiě)了,返回的是錯(cuò)誤的(懷疑擦除的時(shí)序有問(wèn)題)
第二種可能:擦除對(duì)了,寫(xiě)頁(yè)不對(duì),讀頁(yè)也不對(duì)
第三種可能:擦除對(duì)了,寫(xiě)頁(yè)對(duì)了,讀頁(yè)不對(duì),返回的全部是錯(cuò)誤的。
第四種可能:硬件連接不對(duì)包括有:(ALE 、CLE、CS、WR、RD等等)
第五種可能:硬件的焊接有問(wèn)題
第六種可能:NandFlash是壞的
那時(shí)我也不知是什么問(wèn)題而且很快進(jìn)入了混亂之中。朋友們,當(dāng)看到這里的時(shí)候,你認(rèn)為是哪里出問(wèn)題?
接著我是這樣做的,我現(xiàn)在也覺(jué)得挺有意思
不斷地調(diào)試代碼(可以說(shuō)是這樣:腦子里想到這里有可能,就調(diào)一下,那里有可能就那里調(diào)一下)(因?yàn)槲姨敫愠鰜?lái),想一下子把它搞定)
搞了三天還是不行,這時(shí)自己又停下來(lái)思索了,究竟是哪里出問(wèn)題了???,就開(kāi)始去網(wǎng)上找代碼,整個(gè)GOOGLE都給我找翻了,但是還是沒(méi)有答案。很是郁悶。
因?yàn)榭吹骄W(wǎng)上好多的開(kāi)發(fā)板都是把控制線(xiàn)接到GPIO那里去的,而我的是接到地址總線(xiàn)上去的,于是我也就把問(wèn)題歸結(jié)的硬件連接的問(wèn)題上去了。這時(shí)的我又是安慰自己,本來(lái)快沒(méi)有信心的了,開(kāi)始又有了信心了(我想搞開(kāi)發(fā)的都會(huì)有這種感覺(jué))。很快把控制線(xiàn)連到GPIO上,接著是改代碼。結(jié)果呢?充滿(mǎn)信心的我一下也就像沒(méi)氣的氣球了,真是煩?。?BR>
究竟是哪里出錯(cuò)了???很是郁悶?。。∥艺娴氖抢哿?,決定先放一放先,打了二天的星際爭(zhēng)霸游戲,調(diào)節(jié)一下心情。
過(guò)了二天,我就告訴自己一定要徹底靜下心來(lái)認(rèn)真思考,鼓勵(lì)自己要有耐心才能成功。于是我進(jìn)入了第二階段:
首先我還是把控制線(xiàn)接回地址總線(xiàn)那里去(因?yàn)槲覍?duì)這個(gè)比較有信心,起碼可以讀出ID)
我開(kāi)始思考:我可以讀出ID 來(lái),就證明:
1, 寫(xiě)命令是正確的(否則的話(huà)就讀不回ID,焊接是沒(méi)問(wèn)題的,線(xiàn)據(jù)線(xiàn)是沒(méi)有連錯(cuò)的)
2, 讀NF ID 的時(shí)序是沒(méi)有問(wèn)題的。ID =0XEC73
于是我就想:我寫(xiě)命令是對(duì)的了,那么我發(fā)擦除塊的命令也是對(duì)的,于是我又聯(lián)想到,我所有寫(xiě)指令(包括寫(xiě)地址,寫(xiě)命令)都有對(duì)的(這點(diǎn)是很重要的,也是至關(guān)重要的)。讀數(shù)據(jù)的指令也是對(duì)的了(因?yàn)槲夷軌虬袸D都讀回來(lái)了(這點(diǎn)是錯(cuò)的,因?yàn)榈阶詈缶褪强ㄗ∥伊耍?
現(xiàn)在的我又很有信心了。
現(xiàn)在我要證明我所分析是對(duì)的,于是我開(kāi)始調(diào)代碼了:
我試著擦除NF,然后往0 block 0 Page頁(yè)寫(xiě)(0x05)(時(shí)序是不能馬虎的),再來(lái)就是試著讀剛才寫(xiě)的頁(yè),結(jié)果在串口超級(jí)終端返回的又是OXFF,我這時(shí)好像要崩潰了,但是我又馬上意識(shí)的,我分析的應(yīng)是對(duì)的,我懷疑時(shí)序,本來(lái)我是不會(huì)用邏輯分析儀的,我開(kāi)始進(jìn)入學(xué)習(xí)邏輯分析儀了,搞了二天終于會(huì)用那玩意了。我看到時(shí)序是有的,我腦子里突然有一種想法,讀多幾次看怎么樣?于是我連著讀好多次那頁(yè),結(jié)果有讀到第三次的時(shí)候,出現(xiàn)不是0xff,我開(kāi)心極了,因?yàn)槎甲x回來(lái)了(0x05),我上了次廁所(忙到忘了上廁所了),為了確認(rèn)我再重新運(yùn)行程序,又不行了。那是的我真是好難受啊心里面。我又試了好多次,有時(shí)能讀回來(lái),有時(shí)又不能讀回來(lái),我又想是不是寫(xiě)沒(méi)有寫(xiě)好,于我又往那頁(yè)寫(xiě)不是同樣的數(shù)據(jù),寫(xiě)了0,1,2,3…….511, 就這樣我再讀,結(jié)果只能讀回0,1,下面的全部是OXFF,這時(shí)我為了驗(yàn)證是不是沒(méi)有寫(xiě)上,于是我又開(kāi)始讀(不是從0區(qū)的第一個(gè)字節(jié)讀,我換了其它位置去讀,結(jié)果讀到了8,9)這時(shí)我明白了上點(diǎn),那就是:寫(xiě)進(jìn)去的了,問(wèn)題就是出在讀上面(這是非常重要的一點(diǎn)),于是我用邏輯分析儀進(jìn)行分析,結(jié)果呢?讀的時(shí)序是有的,但是寫(xiě)的時(shí)序也是有的;這時(shí)我又明白了一點(diǎn);但是不應(yīng)出現(xiàn)這樣的現(xiàn)象的?。?!
最終的問(wèn)題就是出現(xiàn)在這里了:
我用的44B0X的BANK是BANK5(PORTB10), 這個(gè)BANK的控制寄存器沒(méi)有設(shè)好(我本來(lái)想都沒(méi)去想這里會(huì)出錯(cuò)了,板子說(shuō)明是BANK5沒(méi)有使用)沒(méi)有想到問(wèn)題就是出現(xiàn)在這里;我換了其它的BANK試了一下,一切都是OK?。。?BR>
感想:從這次調(diào)NF 可以學(xué)到很多很多的東東。對(duì)我以后的發(fā)展以及經(jīng)驗(yàn)的積累起到了很大的作用。我同時(shí)也感覺(jué)很幸運(yùn),為什么呢?假如一開(kāi)始就用其它的BANK那我可能就少走很多的調(diào)試的路了,但是正因?yàn)檫@樣,讓我積累了更多的東東。這也是收獲吧?。?BR>
如果有哪位同盟在做類(lèi)似的工作時(shí),遇到有問(wèn)題,可以大家一起討論。我的聯(lián)系方法是:
baai433@163.net-
電話(huà) :1371-4394-083