你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

高手们,帮我看下我这个nandflash驱动程序为什么无法读取到ID

[复制链接]
zui135-124601 提问时间:2009-5-20 17:15 /
GPIO_InitTypeDef  GPIO_InitStructure;
void Flash_Init(void)
{
 
 
  /*ALE PE15   WE  PE14 推免输出*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  /*CLE  PB10   CE  PB11*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  /*RE  PD10*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
  /*R/B   PD11*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;          
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
 
}

void Write_Byte(u8 byte)
{
  /*PD12 -- PD15 IO(L)开漏输出*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;          
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
  /*PC6 -- PC9 IO(H)开漏输出*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;          
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIOC->ODR  = GPIOC->ODR&0x0000FC3F|((byte&0xF0)ODR&0x00000FFF|((byte&0x0f)>2)&0xf0)|((GPIOD->IDR>>12)&0x0f));
  return byte;
}
u8  RB_State(void)
{
  while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_11)  ==  0);
  return 1;
}
        
void Write_CMD(u8 cmd)
{
  CLR_ALE();
  CLR_CE();
  SET_CLE();
  CLR_WE();
  Write_Byte(cmd); 
  SET_WE();
  CLR_CLE();
  SET_ALE();
}
        
void Write_Data(u8 data)
{
  Write_Byte(0xFF);
  SET_WE(); 
  CLR_CLE();
  CLR_CE();
  CLR_ALE();
  CLR_WE();
  while(RB_State()  !=  1);
  Write_Byte(data);
  while(RB_State()  !=  1);
  SET_WE();
}
u8 Read_Data(void)
{
  u8 data;
  Write_Byte(0xFF);
  SET_WE();
  CLR_CLE();
  CLR_ALE();
  CLR_CE();
  CLR_RE();
  while(RB_State()  !=  1);
  data  = Read_Byte();
  while(RB_State()  !=  1);
  CLR_RE();
  return data;
}
void Write_ADDR(u8 addr)
{
  SET_WE();
  CLR_CE();
  CLR_CLE();
  SET_ALE();
  CLR_WE();
  Write_Byte(addr);
  SET_WE();
  while(RB_State()  !=  1);
  CLR_ALE();
}

/********************************************/
u8 Read_ID(void)
{
  Maker_ID  = 0;
  
  Write_CMD(0x90);
  Write_ADDR(0x00);
  Maker_ID  = Read_Data();
  Device_ID = Read_Data();
  Third_ID  = Read_Data();
  Fourth_ID = Read_Data();
  Fifth_ID  = Read_Data();
  return Device_ID;
}
void Flash_Reset(void)
{
  Write_CMD(0XFF);
  while(RB_State()  !=  1);
}
****************************************************************************************************
上面是我的程序,我用的GPIO模拟总线方式连接三星的nandflash,但程序无法读取到ID,读写page也不行,帮我分析下问题出那个地方了啊,谢谢了
另我的数据线和stm32连接没上拉,我直接用上拉输入,不知道问题是不是这里,输出配置的是推免;
另我的板子上没上拉,所以我无法用开漏输出实现普通的IO功能。
附件中的是的程序

FLASH_V4.rar

下载

266 KB, 下载次数: 14, 下载积分: ST金币 -1

收藏 评论3 发布时间:2009-5-20 17:15

举报

3个回答
sjpu 回答时间:2009-5-20 18:28:13

回复:高手们,帮我看下我这个nandflash驱动程序为什么无法读取到ID

IO口所模拟的NAND的数据线,在操作时,数据线做输出时应配置为推挽方式输出,而在作为输入时,应配置为开路集电极方式输出,而且外部需要上拉,并先写ODR寄存器为0xFF再读取数据线数据。
zui135-124601 回答时间:2009-5-21 10:18:34

RE:高手们,帮我看下我这个nandflash驱动程序为什么无法读取到ID

数据线做输出我配置为推免方式输出,在输入时候,用他内部的上拉不行吗 ??先写ODR为0xff是在配置CR为输出上拉前还是输出上啦后呢 ?是配置完输出上拉后吧 ??写完0XFF是不是还需要加一个延时什么的在读数据线 上数据??
sjpu 回答时间:2009-5-21 17:59:43

RE:高手们,帮我看下我这个nandflash驱动程序为什么无法读取到ID

PD12~PD15,PC6~PC9,在作输出时,在没有外部上拉时我想应该配置为推挽输出,输入时再配置为上拉。而且每次把口线配置输入在读取数据之前,最好写一次ODR为0xFF,保证输出寄存器不影响输入。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版