网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 嵌入系统 > 正文
  • RSS
  • 给予F240的IDE接口仿真器的设计
    http://www.ic72.com 发布时间:2005/7/7 13:18:00

    摘  要:本文介绍了以F240为核心设计IDE接口仿真器的硬件和软件设计方法.突出特点是硬件设计简练实用,监控软件精巧灵活,在设计嵌入式系统调试工具中具有典型性和实用性,对其它系统的调试方法也有借鉴。
    关键词:仿真器 监控程序 硬件调试 IDE接口

        随着航空电子系统数字化的发展,机载嵌入式计算机也逐步摆脱了"纯粹嵌入"时代,开始以主要控制角色而显露头脚,其存储系统也和地面计算机系统一样提出了"海量存储"的要求.借鉴和使用IDE接口是一条重要途径。但在调试时一般缺乏IDE接口主方(Host)控制器。PC机虽然带有两个标准的集成在主板上的IDE接口,但在目前的Windows系统下却是透明的,无法在硬件调试级进行控制驱动。"工欲善其事,必先利其器"。为解决调试工具,笔者设计了一个IDE接口仿真器。硬件简练实用,软件精巧灵活。

    仿真器硬件设计
        众所周知,IDE/ATA接口是16Bit总线,映象在主机的I/O空间。由主机对接口内的2组寄存器操作而完成"海量存储"。这些寄存器仅由2根片选/CS1FX、/CS3FX和3根地址线(A2A1A0)来寻址。仿真器硬件只要能在监控程序的控制下产生对应控制信号,便能真实仿真IDE调试所需的环境。信号方向以仿真器为参照,输出方向由仿真器驱动,输入信号由IDE设备驱动。

        IDE接口的读写时序和一般CPU外设时序波形相似,其读写周期为70ns,具体波形不再给出。使用TI公司的TMS320F240可以方便地仿真出IDE的时序波形。只要使用外部READY信号,把I/O周期延长到70ns以上就可以保证仿真数据读写可靠。以F240为核心,仿真器硬件设计就非常简练。除去初期调试和驱动芯片外,整个核心就是F240和GAL16V8,能仿真全部的IDE时序波形。图1是仿真器自身调试仿真监控程序电路。使用2片CY7C199,组成32K x 16Bit的片外RAM程序存储器空间。当程序调试完成后,将H1断接,将监控程序通过JTAG口直接烧入F240,就可以拔去2片外部程序存储器CY7C199。

        当仿真监控程序调试完成后,正式定型的仿真核心电路如图2所示。电路设计总的原则是简练实用。所以复位采用普通的RC电路,外加手工复位开关SW保证仿真器自身复位。和主机之间利用RS232通讯,减少硬件额外开销。IDE接口的中断请求HIRQ直接F240的外部中断XINT1。因为HIRQ高电平有效,所以将其余不用的外部中断XINT2等接地,保证其余中断源不产生中断请求,减少软件中断响应多重判断环节。将F240的PB端口设置为输出端口,DMA请求HDRQ接到PB端口的最低位PB0,可以直接由硬件检测DRQ状态即可,并不真正需要DMA控制器。
       
        将F240的PC端口设置为输出端口,最高位PC7为复位IDE端口信号。当该位设置为0(低电平)时,产生复位IDE设备信号/HDRST,该位设置为1时结束复位。其复位时间可由软件控制。IDE设备的寄存器映象在F240的I/O空间从0000H开始的16个地址。外部I/O只有IDE接口,不必采用全译码,直接由I/O片选/IS和地址A3区分产生/CF1FX和/CS3FX。接口内偏移地址直接由A2..A0提供。F240的写信号/WR可以直接作为接口写信号。但是F240的读信号是状态信号,在连续读操作中保持低电平,并无上升沿,所以需要专门产生读信号。PC主机通过串口和仿真器通讯,监控仿真器,从而驱动调试的IDE设备。仿真器和IDE设备通过标准的硬盘电缆连接,为提高信号抗干扰,这些信号经过总线驱动器驱动。

        数据通路用16路驱动的IDT74LS16245实现,开门信号直接由I/O片选信号/IS控制,方向端由写信号/WR控制。而单向提供给IDE设备的其它信号,都经过54F244驱动。所有控制信号由GAL16V8全部实现,以下是其控制逻辑代码。
    EQUATIONS
    !HRST = !POR # !HRST; // RC上电复位 和 F240设置复位都产生 IDE复位
    !CS1FX =!IS &!A3; //A3=0:产生第一组寄存器片选 /CS1FX
    !CS3FX =!IS &A3; //A3 =1:产生第二组寄存器片选 /CS3FX
    !IOR = !IS & !RD; // 专门产生寄存器读信号
    [Q1,Q0].CLK = CPUCLK;
    [Q1,Q0].OE = !OE;
    [Q1,Q0].AR = !.POR; //复位
    //F240 系统控制状态机.
    //其时钟 20MHz,每一拍50ns
    //程序存储器CY7C199 读写周 期 <= 35ns,无需等待
    //IDE接口寄存器读写周期>= 70ns,等 待2拍足矣.
    State_Diagram [Q1,Q0];
    State S0: // 空闲状态.
    READY = H; // 支持 CY7C199访问.
    if (!IS) then // 要访问IDE接口寄存器.
    S1 with {READY240 = L;}
    State S1: // 开始等待
    READY240 = L;
    goto S2;
    State S2:
    READY240 = L;
    goto S3;
    State S3: // 时间到.
    READY240 = H;
    goto S0; // F240对READY信号只采样一次.
    END
        仿真硬件的核心只有一片F240和一片GAL16V8而已。

    仿真器监控软件设计
        软件设计包括驻留在F240的监控程序和PC宿主机的监控程序。两者之间通过串口配合工作。这当然降低了IDE接口的数据吞吐率,但在逻辑仿真调试时不是主要焦点。为简约起见,避免复杂的词法分析,主从之间采用单字符监控命令。其串口监控命令通讯帧定义如下:
        其校验和为前n-1个字节代数和的补码,即
        CheckSum = -∑Bi (i=0,1.. n-1)

        下面介绍几个主要命令和程序实现方法
    1 .I 命令: 读IDE寄存器
        当监控程序识别出I命令后,根据参数提供的寄存器索引,映射为对应的I/O地址。F240的输入/输出命令和x86系列不同,它在指令中必须直接给出地址。
    LACC Reg
    BZ IsDatReg // 0号索引,即读数据寄存器
    SUB #1
    BZ IsError // 1号索引,即读错误类型寄存器
    BZ IsAltReg // 8号索引,即读后备状态寄存器
    SUB #1
    BZ IsDrvAddrReg // 9号索引,即读驱动器地址寄存器
    IsDatReg
    IN Value,DatReg // 读数据寄存器
    RET
    IsAltReg:
    IN Value,DevAddrReg // 读驱动器地址寄存器
    RET
        当I命令执行完毕,应该将寄存器读入值回送PC主机。
     
    2 .O命令: 写IDE寄存器
        寄存器输出命令参数需要提供寄存器索引,和映射为对应的I/O地址。
     
    3 .H 命令: 硬件复位IDE设备
        硬件复位时应将F240的IOPC7管脚设置为低电平10ms以上。如下
    LDP #00E1h ;DP = 00E1H: 7080H-70FFH 的页址
    LACL #8000H ;D15 = 1: IOPC7: 做输出.
    ;D7= 0:设置IOPC7= 0
    SACL PCDATDIR ;写PC端口,设置/HRST信号为低电平
    CALL Delay10ms ;保持复位信号10ms 的低电平
    LACL #8080H ;D15= 1: IOPC7: 做输出.
    ;D7 = 1:设置IOPC7 = 1
    SACL PCDATDIR ;恢复 /HRST信号为高电平
        类似地,监测DMA请求HDRQ状态时可以设置端口为输入属性,然后读入IOPB0。监测中断请求HIRQ时,可以直接读XINT1状态,即读 7070H处的XINT1CR寄存器。

    4 .S 命令: 软件复位IDE设备
        软件复位时可以向IDE接口的DevCtrlReg(设备控制寄存器)写入适当值实现,如下
    LDP #0; //指向.bss变量区
    SPLK #000EH,Value; //D2 = SW Rst = 1:软件强制复位
    //D1=/IEn=1:禁止IDE发中断
    OUT Value, DevCtrlReg; //复位 IDE设备
    CALL Delay10ms; //保持复位状态10ms
    SPLK #000AH,Value; //D2= SW Rs= 0 : 结束复位状态
    OUT Value, DevCtrlReg
    CALL Delay10ms
    SPLK #000EH,Value; //D6=LBA=1:采用逻辑块寻址模式.
    OUT Value,DrvHeadReg; //设置驱动器寄存器

    5 .C 命令: 读取IDE设备ID号和相关配置
        IDE设备内的相关配置对其它操作影响较大,主机应该掌握这些参数。诸如柱面数、磁头数、每个磁道的扇区数,以及最大扇区号等。
        CALL WaitRDY; //读状态寄存器,等待D6 = 1,亦即IDE 设备完成上次命令
    //准备好再接收新的命令
    SPLK #000EH, Value
    OUT Value, DrvHeadReg; //选择主从驱动器
    SPLK #00ECH,Value
    OUT Value, CmdReg; //发命令,读取配置参数
    CALL WaitDRQ; //读状态寄存器,等待D6 = 1并且D3=1
    //亦即RDY并发出DRQ请求,
    //表明已将所读配置参数放入数据寄存 器缓冲
    MAR *, AR1; //AR1: 当前辅助寄存器.
    LAR AR1,#BufSADDR; //AR1 扇区缓冲区开始地址
    RPT #0FFh ; //循环次数= FFH + 1 = 256
    IN *+, DatReg; //读入配置数据.
        读出配置参数后,再把它送给PC机的监控程序,从中再细分出具体参数。读一个扇区或写一个扇区的命令和这个命令相似。只是在发命令前应该设置柱面扇区等寄存器,定位到具体的扇区。

    6.PC宿主机监控程序功能
        PC宿主机监控程序主要通过串口监控仿真器。在底层通讯中,应该为每一个监控命令建立对应函数。在应用层,可以将几个简单命令有机组合,完成复杂功能,减小仿真器驻留监控难度。例如,在读取配置参数命令中,分解缓冲数据。在读写扇区命令中,将LBA逻辑扇区地址分解成驱动器号、扇区号、柱面号等。
        重要的是为用户提供一个Windows环境下特别容易操作的接口界面,贴近硬件调试,产生所需信号波形,用示波器捕获分析。

    结束语
        随着航空电子新系统研制的智能化和接口标准化,硬件调试对仿真设备和环境要求也越来越高。鉴于成本和上市时间的限制,采用嵌入式CPU自己研制一些简单实用的仿真设备是解决矛盾的一条重要的途径。本文所介绍的IDE接口仿真器在多个型号的FLASH DISK研制中发挥了重要作用。
     

    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质