加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

外部存储控制器EMC 与norflash

发布时间:2020-12-15 07:04:23 所属栏目:百科 来源:网络整理
导读:嵌入式芯片本身的ram和rom都很小,但有时需要处理的数据有很大,于是出现了EMC,EMC可以外接norflash,sdram等来增加存储区域。 CPU可以通过AHB从机寄存器接口对EMC寄存器进行编程.为了避免可能发生的字顺序问题,操作EMC寄存器的过程中,所有数据的床上必须是3

嵌入式芯片本身的ram和rom都很小,但有时需要处理的数据有很大,于是出现了EMC,EMC可以外接norflash,sdram等来增加存储区域。

CPU可以通过AHB从机寄存器接口对EMC寄存器进行编程.为了避免可能发生的字顺序问题,操作EMC寄存器的过程中,所有数据的床上必须是32位宽的字.
通过数据缓冲区进行读写操作,可提供存储器带宽并减少传输等待时间.数据宽城区可用作读缓冲区,写缓冲区或读写缓冲区.

访问外部存储器需要注意几点:

1.数据传输的字节顺序

2.数据产生的宽度

3.对写保护的存储器区域进行写操作.

EMC与NOR_FLASH接线方式。

EMC_OE输出使能,EMC_WE写使能,EMC_CS片选

EMC操作norflash用到的寄存器

????

我们再看看EMC的基本操作过程:

1.首先是使能EMC: ? lpc1788为例

? ?在使用EMC前一定要先在功率控制寄存器中将其使能: ??有的芯片不需要这两步操作,本身就开启的

??LPC_SC->SCS?????|=?(0x01?<<?0);
??LPC_SC->PCONP???|=?0x00000800;??????????????????/*?使能EMC功率控制?????????*/

? 接下来,设置EMC控制寄存器EMCControl的第0位置1,使能EMC:

??LPC_EMC->Control?=?0x00000001;	??????????????/*?使能EMC?????????????????*/
??LPC_EMC->Config??=?0x00000000;	??????????????/*小端模式,ROP复位????????*/

2.引脚连接:

? 将相关的引脚连接到EMC模块.

??LPC_IOCON->P3_0?=?1;????????????????????????????/*?D0?@?P3.0???????????????*/
??LPC_IOCON->P3_1?=?1;????????????????????????????/*?D1?@?P3.1???????????????*/
??LPC_IOCON->P3_2?=?1;????????????????????????????/*?D2?@?P3.2???????????????*/
??LPC_IOCON->P3_3?=?1;????????????????????????????/*?D3?@?P3.3???????????????*/
??LPC_IOCON->P3_4?|=?1;???????????????????????????/*?D4?@?P3.4???????????????*/
??LPC_IOCON->P3_5?=?1;????????????????????????????/*?D5?@?P3.5???????????????*/
??LPC_IOCON->P3_6?=?1;????????????????????????????/*?D6?@?P3.6???????????????*/
??LPC_IOCON->P3_7?=?1;????????????????????????????/*?D7?@?P3.7???????????????*/
				??
??LPC_IOCON->P3_8??=?1;???????????????????????????/*?D8?@?P3.8???????????????*/
??LPC_IOCON->P3_9??=?1;???????????????????????????/*?D9?@?P3.9???????????????*/
??LPC_IOCON->P3_10?=?1;???????????????????????????/*?D10?@?P3.10?????????????*/
??LPC_IOCON->P3_11?=?1;???????????????????????????/*?D11?@?P3.11?????????????*/

??LPC_IOCON->P3_12?=?1;???????????????????????????/*?D12?@?P3.12?????????????*/
??LPC_IOCON->P3_13?=?1;???????????????????????????/*?D13?@?P3.13?????????????*/
??LPC_IOCON->P3_14?=?1;???????????????????????????/*?D14?@?P3.14?????????????*/
??LPC_IOCON->P3_15?=?1;???????????????????????????/*?D15?@?P3.15?????????????*/


??LPC_IOCON->P4_0?=?1;????????????????????????????/*?A0?@?P4.0???????????????*/
??LPC_IOCON->P4_1?=?1;????????????????????????????/*?A1?@?P4.1???????????????*/
??LPC_IOCON->P4_2?=?1;????????????????????????????/*?A2?@?P4.2???????????????*/
??LPC_IOCON->P4_3?=?1;????????????????????????????/*?A3?@?P4.3???????????????*/

??LPC_IOCON->P4_4?=?1;????????????????????????????/*?A4?@?P4.4???????????????*/
??LPC_IOCON->P4_5?=?1;????????????????????????????/*?A5?@?P4.5???????????????*/
??LPC_IOCON->P4_6?=?1;????????????????????????????/*?A6?@?P4.6???????????????*/
??LPC_IOCON->P4_7?=?1;????????????????????????????/*?A7?@?P4.7???????????????*/

??LPC_IOCON->P4_8??=?1;???????????????????????????/*?A8?@?P4.8???????????????*/
??LPC_IOCON->P4_9??=?1;???????????????????????????/*?A9?@?P4.9???????????????*/
??LPC_IOCON->P4_10?=?1;???????????????????????????/*?A10?@?P4.10?????????????*/
??LPC_IOCON->P4_11?=?1;???????????????????????????/*?A11?@?P4.11?????????????*/

??LPC_IOCON->P4_12?=?1;???????????????????????????/*?A12?@?P4.12?????????????*/
??LPC_IOCON->P4_13?=?1;???????????????????????????/*?A13?@?P4.13?????????????*/
??LPC_IOCON->P4_14?=?1;???????????????????????????/*?A14?@?P4.14?????????????*/
??LPC_IOCON->P4_15?=?1;???????????????????????????/*?A15?@?P4.15?????????????*/
				???
??LPC_IOCON->P4_16?=?1;???????????????????????????/*?A16?@?P4.16?????????????*/
??LPC_IOCON->P4_17?=?1;???????????????????????????/*?A17?@?P4.17?????????????*/
??LPC_IOCON->P4_18?=?1;???????????????????????????/*?A18?@?P4.18?????????????*/
??LPC_IOCON->P4_19?=?1;???????????????????????????/*?A19?@?P4.19?????????????*/

??LPC_IOCON->P4_20?=?1;???????????????????????????/*?A20?@?P4.20?????????????*/
??LPC_IOCON->P4_21?=?1;???????????????????????????/*?A21?@?P4.21?????????????*/
??LPC_IOCON->P4_22?=?1;???????????????????????????/*?A22?@?P4.22?????????????*/
??LPC_IOCON->P4_23?=?1;???????????????????????????/*?A23?@?P4.23?????????????*/


??LPC_IOCON->P4_24?=?1;???????????????????????????/*?OEN?@?P4.24?????????????*/
??LPC_IOCON->P4_25?=?1;???????????????????????????/*?WEN?@?P4.25?????????????*/
??LPC_IOCON->P4_31?=?1;???????????????????????????/*?CSN[1]?@?P4.31??????????*/

3.时序设置:

LPC_EMC->StaticConfig1???=?0x00000081;????//配置外部总线,16bit宽度
LPC_EMC->StaticWaitWen1??=?0x00000000;?????????/*?(n+1)?->?1?clock?cycles??*/
LPC_EMC->StaticWaitOen1??=?0x00000001;?????????/*?(n)?->?1?clock?cycles????*/
LPC_EMC->StaticWaitRd1???=?0x00000004;?????????/*?(n+1)?->?5?clock?cycles??*/
LPC_EMC->StaticWaitPage1?=?0x00000000;?????????/*?(n+1)?->?1?clock?cycles??*/
LPC_EMC->StaticWaitWr1???=?0x00000002;?????????/*?(n+2)?->?4?clock?cycles??*/
LPC_EMC->StaticWaitTurn1?=?0x00000000;?????????/*?(n+1)?->?1?clock?cycles??*/

一般不使用EMCStaticExtendedWait寄存器来计时读和写传输,而使用EMCStaticWaitRd和EMCStaticWaitWr寄存器,这样是为了灵活设置各种读写参数,可以尽量提高读和写的速度;当然用户也可简单地只使用EMCStaticExtendedWait寄存器来延时读和写传输时序,只是这样读写效率会比较低。??

读的时序图

通常情况下,我们再操作外部存储器时分为读,写两个操作.

? 在读操作的过程中,我们需要配置下面的寄存器

? a.静态存储器输出使能延时寄存器(EMCStaticWaitOen0-1);

? b.静态存储器读延时寄存器(EMCStaticWaitRd0-1);

EMCStaticWaitOen(n) ?Tce max 70ns

EMCStaticWaitRd(n) ?从片选有效到从器件输出允许失效之间的延时时间

读时序图

EMCStaticWaitWen(n) Tcs min 0ns

EMCStaticWaitWr(n)?

EMCStaticWaitTurn(n)?总线翻转周期,即从片选信号无效到有效之间的时间

EMCStaticWaitPage?设置读取一页的等待时间t的长短

页模式下,一次片选有效期内可联系读/写4个字节,在这过程中,-WE和-OE信号保持不变,只有地址信号发生变化

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读