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)
AT91RM9200---SMC简介的更多相关文章
- 【转】Bootloader之uBoot简介(转)
原文网址:http://blog.csdn.net/sadamoo/article/details/8139946 来自http://blog.ednchina.com/hhuwxf/1915416/ ...
- Bootloader之uBoot简介
本文转载自:http://blog.ednchina.com/hhuwxf/1915416/message.aspx 一.Bootloader的引入 从前面的硬件实验可以知道,系统上电之后,需要一段程 ...
- Bootloader之uBoot简介(转)
来自http://blog.ednchina.com/hhuwxf/1915416/message.aspx,感谢作者 一.Bootloader的引入从前面的硬件实验可以知道,系统上电之后,需要一段程 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
随机推荐
- 利用Python攻破12306的最后一道防线
各位同学大家好,我是强子,好久没跟大家带来最新的技术文章了,最近有好几个同学问我12306自动抢票能否实现,我就趁这两天有时间用Python做了个12306自动抢票的项目,在这里我来带着大家一起来看看 ...
- 字符串格式化format方法
通过位置参数传参 print('{}, {}'.format('KeithTt', 18)) # KeithTt, 18 位置参数可以通过索引调用 print('{1}, {0}'.format('K ...
- [学习笔记]prufer序列
前言 PKUWC和NOIWC都考察了prufer序列,结果统统爆零 prufer序列就是有标号生成树对序列的映射 prufer序列生成 每次选择编号最小的叶子删掉,把叶子的父亲加入prufer序列,直 ...
- Eclipse:构造函数不提示才发现
用Eclipse快一年了,今天才发现,原来按下 Alt+? 就可以显示构造函数中的参数. 想一想这一年都不知道是怎么过的,遇到构造函数时,郁闷啊... 2007-11-01
- malloc创建三维数组
#include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { //f[0],f[] ...
- plink, vcftool计算等位基因频率(allele frequency,vcf)
计算等位基因频率有两种方式,第一种用vcftool计算: /path/to/vcftools --vcf file.vcf --freq --chr 1 --out filefreq 很简单的一个命令 ...
- EClipse for PHP 中文乱码问题
UTF-8 格式的php,中文都是乱码. 如果此时在EClipse中输入中文会有 CP1252 错误( CP1252不支持xxxx ) 解决方法: windows->preferences-&g ...
- java代码示例(6-2)
创建Customer.java /*** * 需求分析:创建客户类 * @author chenyanlong * 日期:2017/10/15 */ package com.hp.test06; pu ...
- TCP详解——传输控制协议(总述)
初次熟读TCP,随着TCP的发展路线对他深入了解,真心觉得TCP协议的美妙之处.他比UDP这家伙更加可靠,深得我们信任.通过一个个英文简写,例如CRC.ARQ.RTT.ACK.SACK.DACK等,组 ...
- window下nginx负载均衡简单配置-----权重的实现
下面介绍一个在window下的nginx的负载均衡配置. 需要你在你的电脑上跑两个tomcat.一个8080,一个9080. 需要一个nginx服务器. 需要修改本机的host 注意:我们这里配置不会 ...
