|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有問NAND FLASH的問題?急 |
| 作者:xujian370 欄目:ARM技術(shù) |
NAND FLASH的片選線我是用地址,讀寫信號譯碼出來的,現(xiàn)在的問題是能讀到ID號,但是我要檢測壞塊,我去讀每個BLOCK的第1和2頁的空閑的16個字節(jié),通過判斷第6個字節(jié)來判斷塊的好壞,但是我讀到的都是0XC0,這是什么問題? 難道片選一定要用IO線來控制?還有程序中的檢測空閑與忙是讀狀態(tài)寄存器還是讀R/B這個引腳?datasheet好象沒講清楚。 |
| 2樓: | >>參與討論 |
| 作者: 平常人 于 2006/8/2 15:51:00 發(fā)布:
問NAND FLASH的問題 NAND的片選最好用I/O,因為地址線隨時可以變化的,比如在中斷處理期間。 判斷空閑與忙最好是先檢測R/B,R/B為Ready時讀狀態(tài)寄存器。 |
|
| 3樓: | >>參與討論 |
| 作者: xujian370 于 2006/8/2 16:07:00 發(fā)布:
上面的問題是出在哪? |
|
| 4樓: | >>參與討論 |
| 作者: 平常人 于 2006/8/2 18:28:00 發(fā)布:
上面的問題是出在哪。坎缓谜f 你最好用帶邏輯通道的示波器看看。 貼個圖上來,再解釋一下,我做過NAND但沒用ARM做過。 |
|
| 5樓: | >>參與討論 |
| 作者: xujian370 于 2006/8/2 19:14:00 發(fā)布:
繼續(xù) 其實很簡單,ARM的WR和RD接NAND FLASH的寫讀信號,片選信號是地址譯碼后的,ALE,CLE接兩個地址信號,IO0-IO8接D0-D7,看看有什么問題? |
|
| 6樓: | >>參與討論 |
| 作者: 平常人 于 2006/8/2 21:18:00 發(fā)布:
片選信號不能落后于ALE和CLE 你的片選信號是地址譯碼后得到,而ALE,CLE接兩個地址信號,地址譯碼需要時間,所以CE落后于ALE和CLE,這里有問題。 另外更重要的是,你應(yīng)用I/O輸出CE,這樣CE不會隨指令的變化而變化,在NAND的datasheet上有很多情況不允許CE隨便改變。 |
|
| 7樓: | >>參與討論 |
| 作者: xujian370 于 2006/8/3 13:31:00 發(fā)布:
我已經(jīng)把CE改成片選和IO引腳相與了 問題依然存在:可以讀ID號。但是讀不了數(shù)據(jù),我先在沒有寫數(shù)據(jù),因為我在找壞的塊,所以只要讀。我是ARM的CS2,地址A18,A19譯碼的到片選CS_NAND,根據(jù)上面的建議我用一個IO口P0.23與上面的片選CS_NAND相與。A17接CLE,A16接ALE 我的程序如下: void Page_read(ADDRFLASH addr,UCHAR read_command) { UCHAR TEMP; IO0SET=IOSET|(1<<23); //片選有效 flash_commd=read_command; //輸入命令 flash_addr=addr.addrlow; //輸入地址 flash_addr=addr.addrmid1; flash_addr=addr.addrmid2; flash_addr=addr.addrhigh; IO0CLR=IO0CLR|(1<<23); //保證NAND FLASH的片選信號一直為低電平 //P0.23和片選相與了 while(!Do_ready()); //busy } R/B沒有出現(xiàn)低電平。所以最后一句是直通的。 怎么會沒有出現(xiàn)低電平的呢?我是按照它的時序?qū)懙陌?br> |
|
| 8樓: | >>參與討論 |
| 作者: xujian370 于 2006/8/3 16:49:00 發(fā)布:
頂一下 |
|
| 9樓: | >>參與討論 |
| 作者: 平常人 于 2006/8/3 17:13:00 發(fā)布:
R/B沒有出現(xiàn)低電平,說明你的命令沒被正確接受 你應(yīng)該用帶邏輯通道的示波器看看,我沒在ARM上做過NAND,也不清楚你的ARM的時序,很難講是什么問題。 看不懂你這兩句: IO0SET=IOSET|(1<<23); //片選有效 IO0CLR=IO0CLR|(1<<23); //保證NAND FLASH的片選信號一直為低電平 你應(yīng)保證在Page_read()運行的整個過程中,CS始終保持低電平不要變化。 還有,“用一個IO口P0.23與上面的片選CS_NAND相與”有何意義?直接在P0.23輸出低電平作為片選就好了嗎。 |
|
| 10樓: | >>參與討論 |
| 作者: xujian370 于 2006/8/4 13:28:00 發(fā)布:
我的R/B引腳始終不會變低 芯片復(fù)位在向命令寄存器中寫入0xFF后,R/B應(yīng)該變低一會,但我用示波器看不到那個信號變低,這邊都不能變低,不要說后面程序的這個信號了。但復(fù)位后ID和狀態(tài)寄存器都能順利的讀取。為什么R/B信號總是不能變低?應(yīng)該不是芯片問題吧。 |
|
| 11樓: | >>參與討論 |
| 作者: 平常人 于 2006/8/4 13:33:00 發(fā)布:
難說,換一片試試? |
|
| 12樓: | >>參與討論 |
| 作者: xujian370 于 2006/8/4 14:48:00 發(fā)布:
繼續(xù) 現(xiàn)在直接讀頁,讀出的都是0XFF,這樣就檢測不出壞的BLOCK,難道是被人用過的片子啊?不管現(xiàn)在先寫一頁在讀出一頁來,看看對不對。謝謝關(guān)注,平常人。有沒有聯(lián)系方法,我們保持聯(lián)系 |
|
| 13樓: | >>參與討論 |
| 作者: toobad 于 2006/8/4 17:05:00 發(fā)布:
難道是被人用過的片子啊? 沒有壞塊還不好嗎? 被人用過的片子常常并不見得是沒有壞塊,而是塊內(nèi)的數(shù)據(jù)區(qū)/冗余區(qū)有 非0xFF和非0x00的數(shù)據(jù)。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |