4830|11

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

nand的R/B信号检测 [复制链接]

死活检测不到R/B管脚的变化,不知道是怎么个回事.按道理R/B的时间长度是很长的,已经到达了微秒级别,没有理由检测不到,但是我向nand发送了oxff复位命令后,等了很久R/B就是没有动静,怎么回事 有没有人提点建议..谢谢

最新回复

RB需要上拉  详情 回复 发表于 2010-4-24 18:33
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
哎..我自己顶下..
有没有人知道好的国外的嵌入式的网站..
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
/***************************************************************
      
    file:NAND FLASH operator
   
***************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "fsmc_nand.h"
#include "UART.h"
#include "ecc.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/

#define DATA_BUS_INPUT()                LPC_GPIO2->DIR = 0x600
#define DATA_BUS_OUTPUT()                 LPC_GPIO2->DIR = 0x6ff

#define CLE_ENABLE        0x03f0
#define ALE_ENABLE  0x02f0
#define WE_ENABLE        0x010f
#define RE_ENABLE         0x000f
#define CE_ENABLE        0x0a0f
#define WP_ENABLE         0x090f

#define CLE_DISABLE        0x030f
#define ALE_DISABLE 0x020f
#define WE_DISABLE        0x01f0
#define RE_DISABLE         0x00f0
#define CE_DISABLE        0x0af0
#define WP_DISABLE         0x09f0

/* Private macro -------------------------------------------------------------*/


/* Private variables ---------------------------------------------------------*/
u32 FlashCurrentWriteSectorAddr;         //当前写的扇区地址
u32 FlashCurrentReadSectorAddr;          //当前读的扇区地址
u32 FlashNeedWriteBack;                                 //需要回写的标志
                                                                          
u8 FlashSectorBuf[FLASH_SECTOR_SIZE];

static u32 FlashBadBlockTable[2][FLASH_BAD_BLOCKS_REMAP+1];
static u32 FlashBadBlocksCount;  
static u8 FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP+1];
static u32 FlashLastAccessAddr;

void SystemDelay( u32 nCount ) ;
/* Private function prototypes -----------------------------------------------*/




/** pin operator ! **/
/* IO2 */
void Io2_Set(unsigned char pin){
        unsigned int io_data=1;
        io_data=io_data<         LPC_GPIO2 -> DATA |=io_data;      
}

void Io2_Clr(unsigned char pin){
        unsigned int io_data=1;
        io_data=io_data<         LPC_GPIO2 -> DATA &= ~io_data;   
}

/* IO3 */
void Io3_Set(unsigned char pin){
        unsigned int io_data=1;
        io_data=io_data<         LPC_GPIO3 -> DATA |=io_data;  
}

void Io3_Clr(unsigned char pin){
        unsigned int io_data=1;
        io_data=io_data<         LPC_GPIO3 -> DATA &= ~io_data;  
}


/********************************************************************************/       
void ChipControl( unsigned short cf )
{
        unsigned char dir ;
        dir = cf & 0x00ff ;

        if( dir == 0xf0 ) //set
                Io3_Set( (cf >> 8) ) ;
        else
                Io3_Clr( (cf >> 8) ) ;       
}
                                                       
void EnableChip( void )
{
        LPC_GPIO3->DATA = 0x3   ;

        Io2_Set( 9 ) ;
        Io2_Clr( 10 ) ;        //chip enable
       
}

void DisableChip( void )
{
        Io2_Set( 10 ) ;        //chip disable
}
/******************************************************************************
* Function Name : System delay a while                                                                        
* Description         : after write cmmand , address , or data , there may be a short
*                                  delay needed
* Input         : The count
* Output                : None
* Return                 : None
*******************************************************************************/
void SystemDelay( u32 nCount )
{
        u32  nBegin ;
        for( nBegin = 0 ; nBegin < nCount ; nBegin ++ )
        {
                nBegin = nBegin ;
        }
}


/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name  : FSMC_NAND_Init
* Description    : Configures the FSMC and GPIOs to interface with the NAND memory.
*                  This function must be called before any write/read operation
*                  on the NAND.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void FSMC_NAND_Init(void)
{
        /* first data0 -> data7 ,  set as gpio pin */
        LPC_IOCON->PIO2_0 &= ~0x07;       
        LPC_IOCON->PIO2_1 &= ~0x07;
        LPC_IOCON->PIO2_2 &= ~0x07;
        LPC_IOCON->PIO2_3 &= ~0x07;
        LPC_IOCON->PIO2_4 &= ~0x07;
        LPC_IOCON->PIO2_5 &= ~0x07;
           LPC_IOCON->PIO2_6 &= ~0x07;
           LPC_IOCON->PIO2_7 &= ~0x07;

           LPC_IOCON->PIO3_0 &= ~0x07;            
           LPC_IOCON->PIO3_1 &= ~0x07;         
           LPC_IOCON->PIO3_2 &= ~0x07;       
           LPC_IOCON->PIO3_3 &= ~0x07;       
          
           LPC_IOCON->PIO2_9 &= ~0x07;       
           LPC_IOCON->PIO2_10 &= ~0x07;
           LPC_IOCON->PIO2_11 &= ~0x07;
               
           LPC_IOCON->PIO1_9 &= ~0x07 ;  /* USE FOR LED */
          
           LPC_GPIO1->DIR = 0x001 << 9 ;
           LPC_GPIO2->DIR = 0x6ff ;
           LPC_GPIO3->DIR = 0x0f ;                                 
}
/*        P2_11        P2_10        P2_9        P2_8        P2_7        P2_6        P2_5        P2_4        P2_3        P2_2        P2_1        P2_0*/
/*        R/B.i        CE.o        WP.o                        DATA7 ------->------------------->------------------->DATA0.(i~o) */
/*        P3_3        P3_2        P3_1        P3_0*/
/*        CLE.o        ALE.o        WE.o        RE.o        */       

/********************************************************************
********************************************************************/
void RBDetect( void )
{//This function do not work correct ...
        DATA_BUS_INPUT();
        PrintU32( LPC_GPIO2->DATA )        ;
       
        //program dead here , can't detect R/B from high to low
    while( (LPC_GPIO2->DATA) & 0x800  );                         //wait until high to low
        SystemDelay(2);               
    while( !((LPC_GPIO2->DATA) & 0x800) );          //wait until low to high
}
/*************************************************************************/

void WriteAddress( u8 addr)
{
        EnableChip();
        ChipControl( CLE_DISABLE ) ;
        ChipControl( ALE_ENABLE )  ;
        ChipControl( WE_ENABLE )   ;
        DATA_BUS_OUTPUT();
        LPC_GPIO2->DATA = addr ;
        ChipControl( WE_DISABLE )  ;
        ChipControl( ALE_DISABLE ) ;
        DisableChip();                                                               
}

void WriteCommand( u8 cmd)
{                                                                                                  
        EnableChip();
        ChipControl( ALE_DISABLE ) ;
        ChipControl( CLE_ENABLE )  ;
        ChipControl( WE_ENABLE )   ;
        DATA_BUS_OUTPUT();
        LPC_GPIO2->DATA = cmd ;
        ChipControl( WE_DISABLE )  ;
        ChipControl( CLE_DISABLE ) ;                  
        DisableChip();
}

void ResetNand()
{
        WriteCommand(0xff);
        RBDetect();  
}

void FlashInitilize( void )
{
        UARTSend("begin !\r\n", 9);
        FSMC_NAND_Init();
        ResetNand();
}

void NandReadOneSector( u8 *pSector , u32 addr )
{
        u32 i ;
        u32        caAddr , cbAddr ;
       
        caAddr = addr & 0x00000fff ;
        cbAddr = ( addr & 0xfffff000 ) >> 12 ;

        WriteCommand( 0x00 ) ;
        WriteAddress( caAddr&0x00ff );
        WriteAddress( caAddr>>8 );
        WriteAddress( cbAddr&0x00ff );
        WriteAddress( caAddr>>8 );
        WriteCommand( 0x30 ) ;

        RBDetect();
       
        for( i = 0 ; i < 512 ; i ++ )
                pSector = FlashReadDataByte();

}

void NandWriteOneSector( u8 *pSector , u32 addr )
{
        u32 i ;       
        u32        caAddr , cbAddr ;

        caAddr = addr & 0x00000fff ;
        cbAddr = ( addr & 0xfffff000 ) >> 12 ;

        WriteCommand(0x80);
        WriteAddress( caAddr&0x00ff );
        WriteAddress( caAddr>>8 );
        WriteAddress( cbAddr&0x00ff );
        WriteAddress( caAddr>>8 );
       
          for(i=0;i<512;i++)
          {
                EnableChip();
                   ChipControl(  WE_ENABLE );
                DATA_BUS_OUTPUT();
                LPC_GPIO2->DATA = pSector ;               
                ChipControl(  WE_DISABLE );          
                DisableChip();
        }

        RBDetect();

        WriteCommand( 0x70 ) ;
        i = FlashReadDataByte();
        PrintU32( i ) ;
}

void ReadId(u8 *Buf)
{
        u8 i;
               
        WriteCommand( 0x90 ) ;
        WriteAddress(0x00);

        for(i=0;i<5;i++)  
        {       
                Buf = FlashReadDataByte();
        }
}

//////////////////////////////////////////////////////////////////
readid 正常  reset都不正常... LPC1343
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
也许出来了太快你没抓到,拿个采样深度大点的示波器,设置好触发条件再试试
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
程序没等到还是通过测量电压?
没有新操作后R\B就应该一直为高吧?
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

6
 
我估计是出来的太快 没抓到
引用 3 楼 guetcw 的回复:

也许出来了太快你没抓到,拿个采样深度大点的示波器,设置好触发条件再试试
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

7
 
我是通过测试电压来判断电位变化的,有什么问题么?我是发完0xff以后等待那个R/B来一下低电位,没有新的操作得的话 R/B肯定是高电位啊
引用 4 楼 veabol 的回复:

程序没等到还是通过测量电压?
没有新操作后R\B就应该一直为高吧?
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

8
 
可能跟nandflash有关系,有些nand对reset是没有电平变化的
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
听我的吧,什么都不是,是:
需要上拉电阻。。。。。。。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 

BnKxVbE4Ksj1YFRD1kYnuIBuV



qgkzJyi2axALm8wcTzUAl3OGh
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
不加上拉电阻的话,R/B信号一直为高电位么
引用 8 楼 einsteinz 的回复:

听我的吧,什么都不是,是:
需要上拉电阻。。。。。。。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
RB需要上拉
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表