zoukankan      html  css  js  c++  java
  • DM9000时序设置

    想了解一下DM9000的移植修改原理,所以分析了一下时序图和引脚连接

     

    首先看一下DM9000的引脚和MINI2440的引脚连接

     

    DM9000  MINI2440 功能描述

     

    SD0   DATA0  数据信号

     

    |           |

     

    SD15  DATA15  数据信号

     

    CMD  ADDR2  识别为地址还是数据

     

    INT   EINT7  中断

     

    IOR#   nOE   读命令使能

     

    IOW#  nWE   写命令使能

     

    AEN   nGCS4  片选使能

     

    可以看出连接了16条数据线,1条地址线,而这唯一的一条地址线用于判断数据线传输的是地址还是数据,所以这16条数据线为数据和地址复用

     

    而片选信号使用的BANK4,则访问0x2000 0000 – 0x27FF FFFF这个范围的地址时会激活片选使能信号nGCS4

     

    而在MINI2440提供的内核中,DM9000的地址IO地址为0x2000 0000,数据IO为0x2000 0004

     

    则向地址IO写数据的时候不会激活ADDR2,所以向DM9000传送的数据为地址,而向数据IO写数据的时候会激活ADDR2,所以向DM9000传送的数据为数据

     

    现在看看DM9000和S3C2440的时序信号

     

    DM9000的写时序

     
     

    IO16,IO32这两个引脚在MINI2440并没有连接,所以不看这两个引脚的时序

     

    呢么整理如下:

     
     

    还有就是写命令使能结束后到下一个写命令使能需要最少84ns的间隔时间,为T6

     

    然后是S3C2440的写时序,由于DM9000是连接在BANK4上的,而BANK的写时序如下

     
     

    由于DM9000在MINI2440上只需要片选使能,写命令使能和数据信号,所以我们不看ADDR和nBE信号,呢么整理如下

     

    呢么这些值为多少呢?~

     

    来看看BANKCON4

     
     

    这里的值以时钟为周期,而BANKCON是接在Memory Controller上的(参考S3C2440A数据手册的表1-4),而Memory Controller使用的是Hclk总线时钟信号(参考S3C2440A数据手册的图7-1,感谢kasim大大指点),根据S3C2440手册,Hclk是由Fclk分频来的,具体的分频比每个板子的设置不一样,所以这里频率的设定要自己根据板子的设置来分析,假设主频为400MHz,然后 Fclk,Hclk,Pclk的分频比为1:2:4,呢么Hclk就是200MHz,呢么每个时钟周期就是5ns

     

    开始和DM9000的时序图进行对比,计算

     

    Tcos对应T1,呢么最少应该为5ns,也就是1个clock

     

    Tacc对应T2,呢么最少应该为22ns,呢么我们这里最少也要选6个clock,也就是30ns

     

    Toch对应T5,在这里无设置,不过根据字面意思,我认为Tcoh就是Toch,Toch最少应该为5ns,也就是1个clock

     

    Tcah对应T4,由于之前已经有Toch了,呢么这里可以设置为0ns,也就是0个clock

     

    在S3C2440中,一个写命令使能结束到下一个写命令使能开始的时间间隔为Toch + Tcah + Tacp + Tacs + Tcos

     

    Tacs是地址信号之后片选信号的起始间隔,我们这里先设为0ns,也就是0个clock

     

    Toch + Tcah + Tacp + Tacs + Tcos应该 > 84

     

    5 + 0 + Tacp + 0 + 5 > 84

     

    Tacp > 74

     

    但是Tacp的最大值为6个clock,也就是30ns,还少了44ns,大概9个clock

     

    只要修改Toch Tcah Tacs和Tcos了,虽然我们给的都是最小值,但是为了信号稳定,可以放宽其范围,

     

    将Tcos和Toch设置为4个clock

     

    将Tacs和Tcah设置为2个Clock

     

    这样总时间为 (4 + 2 + 6 + 2 +4)*5 = 90ns

     

    最后DM9000 1个周期只能处理1个数据,所以PMC应该为normal(1data)

     

    写时序分析完了,现在来看看读时序

     

    DM9000的读时序如下

     
     

    呢么整理如下:

     
     

    读命令使能结束后到下一个读命令使能需要最少80ns的间隔时间,为T6

     

    然后是S3C2440的读时序,时序如下

     
     

    整理如下:

     
     

    Tcos对应T1,呢么最少应该为5ns,也就是1个clock,这里设置为和写操作一样的4个clock

     

    Tacc对应T2,呢么最少应该为22ns,这里设置为和写操作一样的6个clock

     

    Toch对应T5,呢么最少应该为5ns,也就是1个clock,这里设置为和写操作一样的4个clock

     

    其它时间间隔先设置和写操作一样

     

    Tcah为2个clock

     

    Tacp为6个clock

     

    Tacs为2个clock

     

    PMC为normal(1data)

     

    然后看看满足读命令使能结束后到下一个读命令使能的时间间隔80ns不

     

    还是Toch + Tcah + Tacp + Tacs + Tcos

     

    (4 + 1 + 6 + 1 + 4) * 5 = 15 * 5 = 90ns,能符合条件

     

    呢么BANKCON4的设置如下

     

    Tacs = 2个clock = 10

     

    Tcos = 4个clock = 11

     

    Tacc = 6个clock = 100

     

    Tcoh = 4个clock = 11

     

    Tcah = 2个clock = 10

     

    Tacp = 6个clock = 11

     

    PMC = normal(1data) = 00

     

    也就是0x5CEC

     

    再来看BWSCON,这个寄存器负责配置BANK的带宽和等待状态

     

    我们接的是nGCS4,呢么主要就看ST4,WS4和DW4这几个字段

     

    DW4的描述为BANK4的带宽,DM9000接了16条地址线,呢么带宽就是16,这里选01

     

    WS4的描述为是否为BANK4使用等待状态,DM9000没有接WAIT引脚,所以可以不管这个字段

     

    ST4的描述为是否为BANK4使用UB/LB(写高/低字节使能),DM9000没有接nWBE[3:0]这4个引脚,所以也不管这个字段

  • 相关阅读:
    close()和shutdown()函数
    select、poll、epoll之间的区别总结[整理]
    多路复用I/O模型epoll() 模型 代码实现
    多路复用I/O模型poll() 模型 代码实现
    多路复用I/O模型select() 模型 代码实现
    socket编程之select(),poll(),epoll()
    Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string 'android-23' 等错误
    Oracle大总结
    MySQL java连接被拒绝:java.sql.SQLException: Access denied for user 'root'@'****' (using password: YES)
    解决mysql中只能通过localhost访问不能通过ip访问的问题
  • 原文地址:https://www.cnblogs.com/chd-zhangbo/p/5166012.html
Copyright © 2011-2022 走看看