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个引脚,所以也不管这个字段

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/chd-zhangbo/p/5166012.html
Copyright © 2011-2022 走看看