STM32的FSMC在读数据的时候一次能读几位?

[复制链接]
 楼主| 发表于 2009-5-12 14:14 | 显示全部楼层 |阅读模式
硬件上是接的8位的NAND FLASH  NAND128

下面是一段读ID的程序

/******************************************************************************
* Function Name  : FSMC_NAND_ReadID
* Description    : Reads NAND memory's ID.
* Input          : - NAND_ID: pointer to a NAND_IDTypeDef structure which will hold
*                    the Manufacturer and Device ID.
* Output         : None
* Return         : None
*******************************************************************************/
void FSMC_NAND_ReadID(NAND_IDTypeDef* NAND_ID)
{
  u32 data = 0;

  /* Send Command to the command area */     
  *(vu8 *)(Bank_NAND_ADDR | CMD_AREA) = 0x90;    //写读ID命令
  *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;

   /* Sequence to read ID from NAND flash */    
   data = *(vu32 *)(Bank_NAND_ADDR | DATA_AREA);   //读ID

   NAND_ID->Maker_ID   = data & 0xFF;
   NAND_ID->Device_ID  = (data & 0xFF00)>>8;
   NAND_ID->Third_ID   = (data & 0xFF0000)>>16;
   NAND_ID->Fourth_ID  = (data & 0xFF000000)>>24;
}


 /* Sequence to read ID from NAND flash */    
   data = *(vu32 *)(Bank_NAND_ADDR | DATA_AREA);

//这句就看不懂了,为什么 能一次读32位
 楼主| 发表于 2009-5-12 14:16 | 显示全部楼层

头文件中的定义


#define Bank_NAND_ADDR    ((u32)0x70000000)

#define CMD_AREA                   (u32)(1<<16)  /* A16 = CLE  high */
#define ADDR_AREA                  (u32)(1<<17)  /* A17 = ALE high */
发表于 2009-5-12 14:22 | 显示全部楼层

例子没错

  例子没错,因为STM32的内部总线是32位的,FSMC把AHB总线的32位读命令转换为4次8位 的FSMC的具体读操作。
 楼主| 发表于 2009-5-12 14:28 | 显示全部楼层

请教楼上朋友

如果改成这样,是不是只执行一次操作
data = *(vu8 *)(Bank_NAND_ADDR | DATA_AREA);


//那么如果一次读8位,会不会影响它的整体读写速度???
发表于 2009-5-12 15:50 | 显示全部楼层

因为参考手册中说,FSMC支持一次读32位

如下图:


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

本版积分规则

68

主题

372

帖子

3

粉丝
快速回复 返回顶部 返回列表