Nand Flash调试日志(2)——EMI参数配置、EMI内存map

      根据《STR91xFA Reference manual.pdf》此使用手册的1.12小节External memory interface (EMI)中一步一步地进行EMI的配置,首先精读此章节,再根据此章节的内容及相关的寄存器来进行EMI的配置。

在程序仿真中可以通过相关的操作来观察是否正确设置了这些寄存器,通过代码的调试来使得这些相关寄存器的指定位都配置正确。

 

(1)EMI配置

  • 复用/非复用模式

       寄存器 SCU_SCR0  bit 6 0:复用模式    1:非复用模式)

  • ALE的长度

       寄存器 SCU_SCR0  bit 8 0:一个BCLK周期    1:两个BCLK周期)

  • ALE的极性

       寄存器 SCU_SCR0  bit 7 0active low    1active high

  • GPIO Port8EMI功能

        寄存器 SCU_EMI  bit 0  0 port8作为普通IO   1Port8与EMI时钟相连)

 

(2)EMI时钟(BCLK)

通过SCU_CLKCNTR寄存器的EMIRATIO位来进行选择(00:fBCLK=HCLK  01:fBCLK=HCLK/2)

此处的EMI进行时钟的选择是1分频,即EMI_BCLK为96MHz。具体的前端的时钟配置见Nand Flash调试日志(1)——时钟频率配置

 

(3)EMI总线定时

在使能EMI总线前需要做的准备工作就是设置好总线定时的配置寄存器,这些参数直接影响到了在时序图中的各个操作的时间长短。关键的时间参数有:

  • WSTOEN:读使能。片选选中到EMI_RDn信号之间的延迟时间。其由BCLK时钟周期来定义。
  • WSTRD:读等待状态。EMI_RDn信号的脉冲宽度(因为是低电平有效,故脉宽是指的低电平的持续时间)。由BCLK周期定义,=(WSTRD-WSTOEN+1)此公式容易发生误解在于等号左边为具体的脉宽时间ns,数值为(WSTRD-WSTOEN+1)个BCLK时钟周期
  • WSTWEN:写使能。片选选中到EMI_WRn信号之间的延迟时间。其由BCLK时钟周期来定义,对于异步写访问,其具体时间为(WSTWEN+1/2)。
  • WSTWR:写等待状态。EMI_WRn信号的脉冲宽度(因为是低电平有效,故脉宽是指的低电平的持续时间)。由BCLK周期定义,=(WSTWR-WSTWEN+1)此公式容易发生误解在于等号左边为是具体的脉宽时间ns,数值为(WSTWR-WSTWEN+1)个BCLK时钟周期

Example: 对于一个读周期,其WSTRD=4,WSTOEN=2。【CS片选选中后产生EMI_RDn信号的延迟时间】即为2个BCLK周期。【EMI_RDn信号的脉宽】为4-2+1=3个BCLK周期。

 

(4)定时规则

                                            WSTRD   ≥  WSTOEN  >  ALE

                                            WSTWR  ≥  WSTWEN  >  ALE

具体的寄存器见手册,此处的为且仅为其设置的数字的大小比较,而非其对应着的时序图中的时间,极容易混淆


以下的程序是从0517_J_NANDFlash文件夹中拷出的已调通程序。各个参数是在FIRMWARE\EMI_AN_Examples\Mux_Mode_Flash中的程序的基础上对照着STR91xFA Reference manual.pdf手册1.12小节来进行选择确定。

  /**************************EMI configuration*********************************/
  EMI_StructInit(&EMI_InitStruct);

  /* Number of bus turnaround cycles added between read and write accesses.*/
  EMI_InitStruct.EMI_Bank_IDCY = 0x0F ;

  /* Number of wait states for read accesses*/
  EMI_InitStruct.EMI_Bank_WSTRD = 0x1F ;

  /* Number of wait states for write accesses*/
  EMI_InitStruct.EMI_Bank_WSTWR = 0x1F ;

  /*Output enable assertion delay from chip select assertion*/
  EMI_InitStruct.EMI_Bank_WSTROEN = 0x02;  // 手册AN2647要求的最小值为2

  /*Write enable assertion delay from chip select assertion*/
  EMI_InitStruct.EMI_Bank_WSTWEN = 0x02;   // 手册AN2647要求的最小值为1

  /*This member Controls the memory width*/
  EMI_InitStruct.EMI_Bank_MemWidth = EMI_Width_Byte;

  /*Write protection feature */
  EMI_InitStruct.EMI_Bank_WriteProtection =  EMI_Bank_NonWriteProtect;

  /* Normal mode read*/
  EMI_InitStruct.EMI_Burst_and_PageModeRead_Selection =  EMI_NormalMode;

  /*Use Bank0 (CS0)*/
  EMI_Init(EMI_Bank0, &EMI_InitStruct);

摘自STR91xFA Reference manual.pdf手册1.12小节

进行实际的地址指针的赋值的时候,需要参考此EMI memory map,在EMI配置时配置的即为EMI_Bank0(见8.2节的代码),因此进行赋值的时候是采用的0x3C000000或0x2C000000,根据实际情况来确定是两者中的哪个。


目前我自己对这方面的地址研究不深,因此在编写程序的时候两个都进行着尝试。如有大侠可以指点一下不胜感激!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值