AT91RM9200---SMC简介

1.前言

SMC(Static Memory Controller)Atmel 9200静态存储控制器的简称,它可以产生信号来控制外部静态存储和外设。SMC可通过编程寄存器来进行配置。

它有8路片选和23位地址总线。16位数据总线可以配置成8位或16位与外部设备进行交互。独立的读写控制信号可以与外设或外部存储器进行直接连接。

SMC支持不同的访问协议,这些访问协议允许单时钟访问。它也提供外部等待请求的能力。

2.系统框图

图 SMC系统框图

3.功能描述

3.1 外部存储接口

 //TODO

3.2 写访问

  • 写访问类型

//TODO

  • 写数据保持时间

写周期期间,数据输出有效是从MCK的上升沿开始到NWE的上升沿结束。

写访问期间,数据在总线上会保持到NWE上升沿的1/2个MCK周期

图 0等待状态写访问

 

图 1等待状态写访问

3.3 读访问

  • 读协议

对外部存储设备有两种可选的协议:标准读协议和预读协议。这两种协议的不同在于NRD信号的行为;对于两种读协议,NWE具有相同的行为,在MCK的后半周期,NWE总是低电平。

协议类型是通过SMC_CSR的DRP进行选择。重置后默认是标准读协议。

  • 标准读协议

在MCK周期的后半周期,NRD和NWD是有效的。前半个周期用来保证有足够的时间完成读循环开始前的读地址和NCS的访问。

在标准读访问期间,在开始外部存储访问的时候,NCS被拉低,并且地址线是有效的,而为避免总线冲突,NRD只有在MCK的后半个周期才有效。

图 标准读协议

  • 预读协议

预读协议通过在MCK周期一开始就插入NRD型号,这样为读取存储提供了更多的时间。。在对相同的存储器成功完成了读访问周期后,NRD 继续保持有效。

由于读周期通常会限制外部存储器系统速度,预读协议允许使用一个更快的时钟频率。但为避免出现外部总线竞争,有时需要一个额外的等待状态。

图 预读协议

3.4 等待状态管理

  • 标准等待状态

在访问相应的存储空间时,可以对片选编程插入一个或多个等待状态,这通过设置SMC_CSR的WSEN 来实现,插入的等待状态数目由NWS决定

下面是相应的标准等待状态数与NWE脉冲为低时时钟周期数:
0: 等待状态1/2时钟周期
1:等待状态1时钟周期
每附加一个等待状态,将增加一个额外的周期,如下图可见NRD会多出一个clock的时间

图 一个标准等待状态访问

  • 外部等待状态

//TODO

  • Data Float等待状态

某些存储器会慢速释放外部总线。对于这些器件,在读访问后并开始对其它外部存储器进行读访问或写操作前需要加入等待状态(数据流动等待状态)。

每个外部存储器数据流动输出时间(tDF) 是由相应的片选SMC_CSR 寄存器中的TDF 编程得到的。TDF 中值表示插入的数据流动等待周期数(0 ~15 ) 及在存储器禁用后允许数据输出到高阻的时间。

时间流动等待状态不会延迟内部存储器访问。因此含长tDF的对外部存储器的单访问不会延迟内部存储器程序的执行。为保证内部存储器系统忙时不被访问,内部访问时SMC跟踪编程的内部数据流动时间。
内部存储器访问及对同一个内部存储器的连续读访问不会增加数据流动等待时间。

图 Data Float等待时间

  • 片选改变等待状态

当连续访问两个不同的外部存储器时自动插入片选等待状态( 若没有插入其它类型等待状态)。
若已经插入等待状态( 例如时间流动等待状态),则不再增加等待状态。

 

图 片选等待状态

 

  •  预读等待状态

在预读协议中,当外部写周期后是读周期,将自动插入一个预读等待状态以确保写周期在读周期开始前结束。该等待状态在其它等待状态外产生( 即,数据流动等待状态)。

读周期后紧跟一个写周期、相同类型的连续访问或内部与外部存储器间的访问将不会增加等待状态。

图 预读等待状态

 3.5 setup和hold周期

SMC 允许与不同的setup、hold及脉冲延迟的某些存储器连接。这些参数可编程且定义每部分读写周期的时间。

注:在预读协议中该特性不能使用。

若 WSEN = 0 (0 标准等待状态),编程的setup时间不为零而hold参数等于零,SMC 无法正确工作。

若连续访问两个不同的外部存储器且第二个存储器setup周期已编程,则不会插入片选改变等待状态。

当第一个存储器数据流动等待状态(tDF)已编程而第二个存储器setup周期已编程,SMC运行如下:
• 若 tDF 大于或等于setup周期数,插入的setup周期数为0 
• 若 tDF 小于setup周期数,插入的 tDF 数为0 

  •  读访问

读周期可分为setup、脉冲长及hold。setup时间为1.5 ~ 7.5个时钟周期间,hold时间为0 ~ 7 时钟周期间,而 脉冲长为1.5 ~ 128.5个时钟周期间,周期以1递增。

 

图 含setup和hold的读访问

图 含setup的读访问

 

  • 写访问

写周期可分为setup、脉冲长与hold。setup时间为1.5 ~ 7.5个时钟周期间,hold时间为0.5 ~ 7时钟周期间,而 脉冲长为1 ~ 128个时钟周期 ,周期以1递增。

图 含setup和hold的写访问

 

图 含setup的写访问

  • 带setup的数据流动等待状态

图 第二次访问带有setup的连续访问

图 第一次访问有数据流动等待状态(TDF = 2) 第二次访问有启动(NRDSETUP = 1)

 

图 第一次访问有数据流动等待状态(TDF = 2) 第二次访问有启动(NRDSETUP = 3)

原文地址:https://www.cnblogs.com/smartjourneys/p/7066958.html