首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年10月17日星期四
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
基于F240的IDE接口仿真器的设计
The Design of IDE Interface Simulator Based On F240
■中国航空计算技术研究所 姜运生

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

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


仿真器硬件设计


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

IDE接口的读写时序和一般CPU外设时序波形相似,其读写周期为70ns,具体波形不再给出。使用TI公司的TMS320F240可以方便地仿真出IDE的时序波形。只要使用外部READY信号,把I/O周期延长到70ns以上就可以保证仿真数据读写可靠。以F240为核心,仿真器硬件设计就非常简练。其全部硬件如图1、图2和图3所示。除去初期调试和驱动芯片外,整个核心就是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设备通过标准的硬盘电缆连接,为提高信号抗干扰,这些信号经过总线驱动器驱动。图3是驱动和接口电路。

数据通路用16路驱动的IDT74LS16245实现,开门信号直接由I/O片选信号/IS控制,方向端由写信号/WR控制。而单向提供给IDE设备的其它信号,都经过54F244驱动。所有控制信号由GAL16V8全部实现,以下是其控制逻辑代码,其信号名称和功能参看图2。

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)

下面介绍几个主要命令和程序实现方法,其中寄存器名称和地址可参考图4界面。

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环境下特别容易操作的接口界面,贴近硬件调试,产生所需信号波形,用示波器捕获分析。图4 是宿主机的一个界面。具体方法细节不再讨论。


结束语


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

         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com