打印

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

[复制链接]
2928|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liu_xf|  楼主 | 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位
沙发
liu_xf|  楼主 | 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 */

使用特权

评论回复
板凳
ijk| | 2009-5-12 14:22 | 只看该作者

例子没错

  例子没错,因为STM32的内部总线是32位的,FSMC把AHB总线的32位读命令转换为4次8位 的FSMC的具体读操作。

使用特权

评论回复
地板
liu_xf|  楼主 | 2009-5-12 14:28 | 只看该作者

请教楼上朋友

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


//那么如果一次读8位,会不会影响它的整体读写速度???

使用特权

评论回复
5
lut1lut| | 2009-5-12 15:50 | 只看该作者

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

如下图:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

372

帖子

3

粉丝