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

DM9000时序设置的更多相关文章

  1. s3c2440裸机-内存控制器(三、norflash初始化-时序设置)

    1.norflash与2440的硬件连接 2.初始化nor,配置nor时序 1.如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部设备的性能进行配置,这里先列出时间参数 ...

  2. dm9000网口收发控制以及mac地址过滤设置

    目的 :完成网口收发调试   过程 :      1.网口初始化,根据芯片数据手册配置   2.网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送:   3.网口接收 . ...

  3. Tiny6410 LCD设置

    1.注意LCD的硬件连接 2.LCD初始化 2.1 初始化步骤 LCD时序设置 LCD芯片 2.2 引脚初始化 2.3 配置 MIFPCON 寄存器及SPCON 寄存器 2.4 配置VIDCONx 2 ...

  4. SDRAM 之时序收敛(学习了特权老师)

    到现在我还是不太理解SDRAM的时序设置,但是可能蒙对了.(呵呵) 开发环境: quartus II 13.0   板子: DE2 EP2C35F672C6N 时序约束step 1:create cl ...

  5. NAND Flash结构及驱动函数

    目标:以NAND Flash K9F2G08U0M为例介绍其结构及其驱动程序的书写 1. 结构 由芯片手册中的图可知:K9F2G08U0M大小为2112Mbits(即 256MB = 2Gb ) 共有 ...

  6. SAM4E单片机之旅——14、LCD之SMC的配置

    在上个例子中,已经在ASF添加了ILI93xx模块,并做好了相关的声明.这次就做好SMC的配置,然后使用ASF提供的API在屏幕上打印出”Hello World!”字样. 一. 电路图 开发板的LCD ...

  7. msm8916 lcd 相关调试点指导

    主要代码:LINUX\android\kernel\arch\arm\boot\dts\qcom\dsi-panel-trust-hx8379c-fwvga-video.dtsiLINUX\andro ...

  8. ARM2440换lcd

    将原来的3.5寸分辨率为240x320换为480x272所需要修改的地方 时序设置: CLKVAL=4    (VCLK   =10)    5<  VCLK   <12 每个点扫描周期 ...

  9. 重学STM32---(十) ——CAN通信(二)

    CAN协议是非常难的,但是在stm32中却是简单的,只需要我们配置寄存器即可,,,即使这样,我在学习的时候也遇到了许多困难 1.开时钟,不用说 2.设置GPIO口,,CAN_TX复用推挽输出,CAN_ ...

随机推荐

  1. Native Comments

    local variables referenced from a Lambda expression must be final or effectively final. Lambda表达式中引用 ...

  2. [Java数据结构]使用Stack检查表达式中左右括号是否匹配

    Stack是一种先进后出的数据结构后,这个特点决定了它在递归向下的场景中有独到的功效. 以下程序展示了它在检查表达式中括号匹配的有效性: 程序: package com.heyang.util; im ...

  3. leetcode刷题-48旋转图像

    题目 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 思路 没有想到.看过解答后知道可以转置加翻转即可,且能达到最优的时间复杂度O(N^2). 实现 class Solu ...

  4. i春秋公益赛之signin

    题目链接:https://buuoj.cn/challenges#gyctf_2020_signin 查看程序保护 只开了canary和NX保护,在IDA查看反编译出来的为代码时发现程序给了一个后门 ...

  5. origin Tips

    origin Tips 注意事项 在最初画图时,需要考虑到最好将图片的尺寸限制在 1 张 A4 纸的大小,不然有可能在插入 latex 的时候出问题 . 如何修改图片的尺寸?简而言之就是将画布中的图片 ...

  6. 深入理解Java之装箱与拆箱

    一.Java数据类型 1.在说装箱与拆箱之前,先说一下Java的基本数据类型,Java从数据类型上可以划分为值类型与引用类型,值类型是四类八种,分别是: 整数型:byte̵,short̵,int̵,l ...

  7. swift基本体验

    Swift初体验 1. 导入框架 2. 定义标识符: let/var 3. 语句结束时;可以省略 4. print() 5. let/var 6. 逻辑分支 7. 循环使用 // 1.Swift中如何 ...

  8. [剑指Offer]65-不用加减乘除做加法

    题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题解 用位运算模拟加法的三步: 无进位加法:异或运算. 进位:与运算再左移一位. 直到进位为0结束. 代码 pub ...

  9. Python实现GUI开发 PySide2&PyQt环境配置

    更新于2020-09-15 - 18:50:37 [前言] 关于Python开发GUI图形界面程序的问题,大概是19年十分困扰我,主要是没有经验以及缺乏高效简洁的视频或教学文档,导致在19年中秋前后花 ...

  10. C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转

    1.任意角度旋转 在XAML设计器中,设置RotateTransform属性 <InkCanvas x:Name="ToolInkCanvas" UseCustomCurso ...