音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

關于k9f6408的讀寫!!

作者:btiger2000 欄目:嵌入式系統(tǒng)
關于K9F6408的讀寫!!
關于K9F6408的讀寫!!

K9F6408,能讀出id,可以擦出,但是讀寫不對!

對第一塊的0頁寫入全0x55,讀出 0頁為0x55;但是2,4,6,8,。。14 ,讀出都為亂碼!可是并未對其他頁操作!,不知為何?!
還請做過的大蝦執(zhí)教。

2樓: >>參與討論
BTIGER2000
沒人做過么?
 
3樓: >>參與討論
btiger2000
沒人指點一下?
 
4樓: >>參與討論
btiger2000
程序


#include  "\ucos251\include\includes.h"
#include  "\bsp188es\include\bsp.h"
#include  "\proj\include\nand.h"
#include  "\bsp188es\include\pio.h"


#define nand_select() ce(0)
#define nand_deselect() ce(1)

#define CS  INT5
#define CLE CTS0
#define ALE RTS0
#define F_RB TMRIN1
#define WP  TMROUT1

/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
void nand_init(void)
{
    pio_mode(INT5, OUT_DIR);
    pio_mode(CTS0, OUT_DIR);
    pio_mode(RTS0, OUT_DIR);
    pio_mode(TMROUT1, OUT_DIR);
    pio_mode(TMRIN1, IN_W_PULL);
    pio_out(WP,1);
//    flash_reset();
    cle(0);
    ale(0);
    nand_deselect();
}

/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
void ce(INT8U ce)
{
    pio_out(CS, ce);
}

void ale(INT8U h)
{
    pio_out(ALE, h);
}

void cle(INT8U cle)
{
    pio_out(CLE, cle);
}

uchar Flash_RB(void)
{
     return pio_in(F_RB);
}

void flash_reset(void)
{
   uchar d,i;
   nand_select();
    command(0xff);
/*   do{
      command(0x70);
      d = Bsp_Inportb(NAND_ADDR);
      d=d&0x40;
   }while(d!=0x00);       */
   nand_deselect();
   for(i=0;i<255;i++)
       delay();
}
void delay(void)
{
    INT16U i;
   for(i=0;i<25;i++)
         ;
}


/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
/*INT8U nand_get_ready(void)
{
    return  Bsp_Inportw(0xff74) & 0xfff1;
} */

void command(INT8U cmd)
{
    cle(1);
    Bsp_Outportb(NAND_ADDR, cmd);
    cle(0);
}

/*************************************************************************************************/

void address(INT16U row, INT8U column)
{
    ale(1);
    Bsp_Outportb(NAND_ADDR, column);
//    ale(0);
//    delay();
//    ale(1);
    Bsp_Outportb(NAND_ADDR,  row&0xff);
//    ale(0);
//    delay();
//[    ale(1);
    Bsp_Outportb(NAND_ADDR, (row>>8)&0xff);
    ale(0);
}

/***********************************************************************/
INT8U erase_block(INT16U row )
{
    INT8U d;
     nand_select();
    row<<=4;
    command(0x60);
   // address(row,column);
    ale(1);
    Bsp_Outportb(NAND_ADDR,  row&0xff);
    ale(0);
    delay();
    ale(1);
    Bsp_Outportb(NAND_ADDR, (row>>8)&0xff);
    ale(0);
    command(0xd0);
    delay();
    delay();
     command(0x70);
    do{
       d = Bsp_Inportb(NAND_ADDR);
       d=d&0x01;
    }while(d!=0x00);
    nand_deselect();
/*    if(d&0x01)
      return 1;
    else                  */
      return 0;
}

INT8U read_id(void)
{
    INT8U id;

    nand_select();

    command(0x90);
    ale(1);
    Bsp_Outportb(NAND_ADDR, 0x0);
    ale(0);
    id = Bsp_Inportb(NAND_ADDR);
    id = Bsp_Inportb(NAND_ADDR);

    nand_deselect();

    return id;
}

INT8U read_byte(INT16U row, INT8U column)
{
    INT8U d;

    nand_select();

    command(0x50);
    address(row, column);
    OSTimeDly(1);
    d = Bsp_Inportb(NAND_ADDR);

    nand_deselect();

    return d;
}

INT8U write_page(INT16U row,INT8U column,INT8U *addr)
{
    INT16U i;
    INT8U  d;
     nand_select();

//    command(0x00);
    command(0x80);
//    OSTimeDly(1);
    delay();
//    delay();
    address(row,column);
    delay();
//    delay();
    for(i=0;i<480;i++)
    {
       Bsp_Outportb(NAND_ADDR, addr][i]);
     delay();
    }
    delay();
    command(0x10);
//    for(i=0;i<100;i++)
         delay();

    while(!Flash_RB());
     command(0x70);
    do{


       d = Bsp_Inportb(NAND_ADDR);
       d=d&0x01;

    }while(d!=0x00);

    nand_deselect();
/*   if(d&0x01)
      return 1;
    else           */
      return 0;


}



INT8U read_page(INT16U row,INT8U column,INT8U * addr1)
{
    INT16U i;
    INT8U  d;

    nand_select();

    command(0x00);
    address(row,column);
//    OSTimeDly(1);
    delay();
    while(!Flash_RB());

   
5樓: >>參與討論
趙崇偉
太復雜了,玩玩就算了,一般都可以放棄
 
6樓: >>參與討論
BTIGER2000
問題我不是在玩啊!不是說放棄就放棄的!
 
7樓: >>參與討論
embestinfo
可以咨詢英蓓特
想解決這個問題,可以咨詢英蓓特FLASH.html">FLASH燒寫產品FLASH.html">FLASH Programmer.
http://www.embedinfo.com/chinese/product/flashprog.asp

FLASH編程器(Embest Online FLASH.html">FLASH Programmer)
主要特性:
支持所有基于ARM7和ARM9核的處理器
ATMEL公司AT91系列, CIRRUS公司EP73系列,SAMSUNG公司S3C系列。

支持大多數(shù)廠家生產的FLASH芯片
如AMD公司AM29系列,INTEL公司28系列,SST公司29\39\49系列。

支持對FLASH進行空白檢查、擦除、編程、文件校驗、計算校驗和、保護、上載

支持指定扇區(qū)范圍操作,不影響其他扇區(qū)內容

支持8位、16位和32位讀寫訪問寬度

支持1片、2片及4片FLASH編程,編程文件無需劈分

支持Windows 98\ME\XP及Windows NT\2000操作系統(tǒng)



   
其他特點:
編程配置數(shù)據(jù)的保存和載入

編程前的用戶電路板測試功能

FLASH各扇區(qū)地址及大小指示功能

簡單直接的處理器寄存器設置

詳盡完善的中、英文手冊



8樓: >>參與討論
btiger2000
上面的,你說的是編程器?
 
9樓: >>參與討論
videohome
這是我自己寫的K9F5608的驅動,已應用到產品了,放心使用!

#include    "K9F5608.hpp"

/************************************
ALE:PF2
CLE:PF1
CS :PF0
NAND FLASH操作說明:
32M NAND FLASH分為2024塊,每塊為32頁,每一頁有528字節(jié),
地址A9-A23是選擇哪對應的頁,而A0-A7是頁內偏移
************************************/

#define     NAND_ADDR    0x4C000006    //nGCS1起始地址
//#define    _NAND_DEBUG_

#ifdef    _NAND_DEBUG_
int uart_printf(const CHAR *fmt,...);
void    dumpmem(CHAR* buf,int len);
#endif

static inline void NAND_CS_HI(void)    //GPIO->pfdr|=1
{
    CHAR    pfdr;
    HAL_READ_UINT8(PFDR,pfdr);
    pfdr |= 1;
    HAL_WRITE_UINT8(PFDR,pfdr);
}        
static inline void NAND_CS_LOW(void)//GPIO->pfdr&=~1
{
    CHAR    pfdr;
    HAL_READ_UINT8(PFDR,pfdr);
    pfdr&=~1;
    HAL_WRITE_UINT8(PFDR,pfdr);
}
static inline void NAND_ALE_HI(void)//GPIO->pfdr|=4
{
    CHAR    pfdr;
    HAL_READ_UINT8(PFDR,pfdr);
    pfdr|= 4;
    HAL_WRITE_UINT8(PFDR,pfdr);
}                        
static inline void NAND_ALE_LOW(void)//     GPIO->pfdr&=~4
{
    CHAR    pfdr;                
    HAL_READ_UINT8(PFDR,pfdr);    
    pfdr&=~4;                    
    HAL_WRITE_UINT8(PFDR,pfdr);    
}
static inline void NAND_CLE_HI(void)
{
    CHAR    pfdr;                
    HAL_READ_UINT8(PFDR,pfdr);    
    pfdr|=2;                    
    HAL_WRITE_UINT8(PFDR,pfdr);
}        
                        
static inline void NAND_CLE_LOW(void)
{
    CHAR    pfdr;
    HAL_READ_UINT8(PFDR,pfdr);
    pfdr&=~2;
    HAL_WRITE_UINT8(PFDR,pfdr);
}

static inline void INIT_NAND_IO()
{
    CHAR    pfdr;
    HAL_READ_UINT8(PFDDR,pfdr);
    pfdr|=7;
    HAL_WRITE_UINT8(PFDDR,pfdr);
    
    HAL_READ_UINT8(PFDR,pfdr);
    pfdr|=1;
    HAL_WRITE_UINT8(PFDR,pfdr);
    
    HAL_READ_UINT8(PBDDR,pfdr);
    pfdr&=~0x20;
    HAL_WRITE_UINT8(PBDDR,pfdr);
}                        

#define        NAND_BSY            0
#define        NAND_RDY            0x20

#define        CMD_RD                0
#define        CMD_WRSTART            0x80
#define        CMD_WROVER             0x10

#define     CMD_ERASESTART      0x60
#define     CMD_ERASEOVER       0xD0

#define     CMD_RDSTATUS        0x70
#define     CMD_RDID            0x90

#define        CMD_RESET            0xFF
cyg_mutex_t    nand_mutex;
//RNB        PB5
static inline void    Delay(int    iDly)
{
    while(iDly--);
}
void nand_init(void)
{
    cyg_mutex_init(&nand_mutex);
}
CHAR    nand_readstatus(void)
{
    CHAR    cStatus;
    NAND_CLE_HI();
    HAL_WRITE_UINT8(NAND_ADDR,0x70);
    NAND_CLE_LOW();
    HAL_READ_UINT8(NAND_ADDR,cStatus);
    return    cStatus;
}
void    nand_reset(void)
{
    INIT_NAND_IO();
    NAND_CS_LOW();
    
    NAND_CLE_HI();
    HAL_WRITE_UINT8(NAND_ADDR,CMD_RESET);
    NAND_CLE_LOW();
    while(0 == (nand_readstatus()&0x40));
}
void    nand_readid(CHAR* pID)
{
    INIT_NAND_IO();
    NAND_CS_LOW();
    
    NAND_CLE_HI();
    HAL_WRITE_UINT8(NAND_ADDR,CMD_RDID);
    NAND_CLE_LOW();
  
    NAND_ALE_HI();    
    HAL_WRITE_UINT8(NAND_ADDR,0);
    NAND_ALE_LOW();

    HAL_READ_UINT8(NAND_ADDR,*pID++);
    HAL_READ_UINT8(NAND_ADDR,*pID++);
      NAND_CS_HI();
}
bool    nand_page_read_check(int nAddr,int nLen,CHAR* pData)
{
    int    i;
    CHAR   cPageOffset;
    CHAR    c;
    SHORT  nPageSelect;
    SHORT  nBankSelect;

    INIT_NAND_IO();
    NAND_CS_LOW();
    
    nBankSelect = nAddr/256;
    cPageOffset = nAddr%256;

    nPageSelect = ((nAddr>>9)&0xFFFF);
    
    
    NAND_CLE_HI();
   &nbs
10樓: >>參與討論
btiger2000
我研究一下!謝了
 
11樓: >>參與討論
btiger2000
問題解決!是硬件問題!   看來還是不能直接接5v得i/o!!
 
參與討論
昵稱:
討論內容:
 
 
相關帖子
如何上載資料呀?
求助MC68HC908SR12的問題
請教:我這三行的程序 debug 時都不能通過?
做STB,LCD TV,MP3消費類電子的嵌入式系統(tǒng)開發(fā)的朋友啊?
請教的FPGA的主要生產商有那些,還有FPGA的優(yōu)勢在哪些方面?謝謝
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號