网站首页 | 技术文章 | 解决方案 | 电子书籍 | 下载中心 | 电子商城 | 技术论坛 | 电子博客 | 商务信息  
联系站长
加入收藏
会员登陆
交易首页 最新信息 - 推荐信息 - 热门信息 - 免费发布 - 行业新闻 - 行业资讯 - 行业知识 - 积分说明 - 信息分类 - 企业展示 - 帮助
 您的位置: 中国电子设计 >> 技术文章 >> 测试测量 >> 正文 商务信息栏目开通公告  [2008-05-19 11:47:00]
   □  存储器芯片在线测试系统中的设计   
存储器芯片在线测试系统中的设计
[作者:刘晓楠 王震宇 尹美娟    转贴自:微计算机信息    点击数:    更新时间:2008-10-7
【字体:

Application of USB In The Test OnLine System Of Memory Chip
Abstract:This article is about that, in the Test OnLine System Of Memory Chip, the computer running Windows OS is epigynous computer and the computer running Dos OS is hypogynous computer. To realize the communication between them, the epigynous computer use Spcomm Control for Delphi7 to develop communication interface software , and the hypogynous computer use communication board based on ISA slot and USB100 Moudle. This paper mainly describes how to design and implement the data communication in this system.
Keywords: USB100; SPCOMM; Communication Protocols
摘要: 本文介绍了在存储器芯片在线测试系统中,运行Windows操作系统的工控机作为上位机,运行Dos操作系统的工控机作为下位机。为了实现上下位机之间的通信,上位机利用Delphi7集成环境中的Spcomm控件开发通信接口软件,下位机使用自行设计的基于ISA插槽和USB100模块的通信板。本文将重点介绍本系统中数据通信部分的设计与实现。
关键字:USB100;SPCOMM;通信协议;

1引言
存储器芯片在线测试系统主要是对目标电路板上存储器芯片的存储内容进行分时采集并加以分析,以达到在线测试的目的。在本系统的采集应用中,有许多复杂任务需要在采集端实现。并且所采集的数据不需要实时传递给运行Windows操作系统的上位机,只是在上位机发出上传命令时才进行数据的传递。所以在实际设计中,没有采用单片机来开发数据采集系统,而是使用运行Dos操作系统的工控机作为数据采集端。本系统中数据采集的过程是通过向电路板上的被测芯片及周边芯片提供输入激励,自动采集并记录被测芯片的输出响应。由于提供输入激励的时间要求严格,所以选择运行Dos操作系统的工控机作为下位机(Dos主机以下简称为下位机)。因为Dos是单任务操作系统,不存在任务调度及时间片分配等问题,采用Dos操作系统可满足任务单一、采集时间准确的实际应用。运行Windows操作系统的工控机作为上位机,在Windows操作系统上利用Delphi7开发的主控软件系统具有界面友善、开发快捷、图形显示丰富、使用方便等优点。(Windows主机以下简称为上位机)
但是由于Dos操作系统不支持网口和串口等双机互连的通信方式,所以在下位机中采用基于USB100通信模块的通信板完成通信功能。USB通信板如果采用PCI总线,虽然具有高速的特点,但基于PCI总线的开发比较困难,成本较高。因此在通信板的设计中选用ISA 总线,实现ISA总线转USB总线的模式。由于USB100模块已经封装了USB协议,编程接口非常简单,对于运行Windows操作系统的上位机它是COM3或COM4,对于运行Dos操作系统的下位机它是一个简单的I/O端口。这样通过USB线缆连接上、下位机,既实现了两台工控机间各种命令的交互,又解决了采集数据的上传问题。在下位机使用Tuborc2.0开发串口通信程序及数据采集程序,在上位机使用Delphi7并配合串口控件Spcomm开发串口通信程序和控制程序。
2 Delphi中Spcomm控件的使用
Spcomm控件是使用Delphi7开发串口通信程序最常用的控件,它具有通信效率高、开发简便的特点。同时它的源码开放,便于使用者根据实际需要进行二次开发,如在本系统中,作者就将Spcomm的接收缓存由2048字节提高到4096字节。这样既提高了实际传输速度,又不会出现数据丢失。经过反复试验证明,接收缓存如果高于4096字节不仅容易出现数据丢失,同时对传输速率提高没有明显作用。所以将接收缓存设定为4096字节是比较恰当的。
Spcomm中需要设置的属性有CommName,这个属性应设置为串口名称,通常为Com3或Com4,但是有时也跟主机提供USB接口的数目有关。在作者使用的工控机上它对应的是Com8,有关这一点也请读者注意。波特率属性BaudRate可以根据需要进行设定。但根据在本系统中的实际应用,作者发现当Spcomm与USB100模块搭配使用时,改变波特率对传输速率没有影响。Spcomm控件的其它属性可采用默认值,不必修改。
Spcomm经常用到的重要方法有StartComm、StopComm和 WriteCommData。其中StartComm和StopComm分别对应于打开和关闭串口。这两个方法在每次对串口操作时都要用到,并且必须成对使用。 而WriteCommData方法是个带有布尔型返回值的函数,用于将一个字符串发送到写进程,发送成功返回 true,发送失败返回 false。 
Spcomm提供的接收事件是OnReceiveData。即当有数据输入缓存时将触发该事件,在这里可以添加对从串口收到的数据进行处理的代码。
3 USB100模块的简介
本系统中的通信部分使用了市场上比较成熟的产品――讯通公司开发的USB100模块来设计开发基于ISA插槽的通信板。USB100模块是完全集成化的USB接口模块。它满足USB1.1规范,无须用户编写驱动程序,提供8位数据总线接口,对USB接口的操作如同对外部存储器操作一样方便。内置的USB模块内部提供多达384字节的发送缓冲区和128字节的接收缓冲区,满足高速通讯的需要。另外,USB100的可靠性高,特别适合工业控制。
4 基于ISA插槽的通信板电路设计图
下位机的通信板,按照如图1所示的电路原理图设计。由于是基于ISA插槽,所以不用特别开发驱动程序。因此简化了开发过程,提高了研发速度。另外使用ISA插槽也同时简化了工控机中采集控制板的接口设计。

5 上、下位机间约定的通信协议
由于下位机要完成数据采集、电路检测等复杂任务,需要上、下位机进行多种通信交互,所以必须约定一套完善的通信协议。为了满足将来上、下位机软件的可扩展性,通信协议采用数据帧的形式传输信息。协议帧设定一个命令码字段,用以相互区别。协议帧由起始符、命令码、帧信息、帧校验和终止符组成,成帧过程中采用了字符插入法和HEX校验。
①成帧方式
协议帧使用“DLE STX”作为起始符,使用“DLE ETX”作为终止符,并采用字符插入法保证通信信息的正确。字符插入法的实现方法为:发送方搜索起始符和终止符间每个字节信息,若为“DLE”,即在该字节信息后插入一个“DLE”。接收方接收信息后也要搜索整个帧,若查找到连续两个“DLE”,即将后一个 “DLE”删除,还原成原信息文件。
协议帧由起始符、命令码、帧信息、帧校验和终止符组成,典型的帧格式如图2所示:
 
②帧校验算法
协议帧采用HEX校验保证通信信息的正确。HEX校验的填充在字符插入之前实现,HEX校验的验证在插入字符删除之后实现。
实现方法为:发送方计算起始符和终止符间待发送数据的校验和,然后将256与该校验和的差填充于“HEX校验”字节处。接收方计算起始符和终止符间包括HEX字节在内的接收数据校验和,若为0,则校验通过。          
5 下位机用C语言编制USB100通信程序
在这一部分作者对Dos主机端基于USB100完成数据接收和数据发送的基本编程方法以函数举例的方式介绍给读者,以下这些函数是本系统实际应用函数的简化版。但是以这些基本函数为基础,可以改造成满足各种不同需要的应用程序。
5.1Dos主机的数据接收
下位机程序实现数据接收的方法是循环检测USB100模块的RXF引脚状态,检测函数由char rxf_havedata(void)实现,一旦检测到USB100模块RXF为低时,表示内部的接收缓冲区有来自USB端口的数据,可以通过8位数据总线将数据读入。这时可通过void set_rd_up(void)和void set_rd_down(void)函数控制RD来进行数据接收。当检测到RXF为高时就禁止读数据。具体的函数实现如下:
char rxf_havedata(void)  /*检测RXF状态*/              
{char rxf_temp;
rxf_temp=inportb(port_CS2)&0x03;
if(rxf_temp==0)  return(TRUE); else return(FALSE);}
void set_rd_up(void) /*控制RD高、低的函数*/
{char rd_temp;
rd_temp=inportb(port_CS2);  rd_temp=rd_temp|0x01; outportb(port_CS2,rd_temp);}
void set_rd_down(void)               
{char rd_temp;
rd_temp=inportb(port_CS2); rd_temp=rd_temp&0xfe; outportb(port_CS2,rd_temp);}
unsigned char receive_byte()/*从串口读入一个字符*/
{unsigned char ch;
set_rd_down();  ch=inportb(port_CS1); set_rd_up();  return(ch);}
5.2Dos主机的数据发送
同理,下位机程序通过循环检测TXE引脚的状态来判断是否可以发送数据,检测函数由char txe_allowsend(void)实现。一旦检测到USB100模块TXE为低时,表示内部发送缓冲区允许发送数据到USB端口,可以将数据通过8位数据总线发给USB100模块。发送数据锁存由WR控制。WR的高、低设置由函数void set_wr_up(void)和void set_wr_down(void)实现。当检测到TXE为高时就禁止发送数据。具体的函数实现如下:
char txe_allowsend(void)  /*检测TXE状态*/                
{ char txe_temp;
txe_temp=inportb(port_CS2)&0x04; if(txe_temp==0) return(TRUE); else return(FALSE);}
void set_wr_up(void) /*控制WR高、低的函数*/
{char wr_temp;
 wr_temp=inportb(port_CS2); wr_temp=wr_temp|0x02; outportb(port_CS2,wr_temp);}
void set_wr_down(void)
{char wr_temp;
wr_temp=inportb(port_CS2); wr_temp=wr_temp&0xfd; outportb(communication_CS2,wr_temp);}
void send_byte(unsigned char ch) /*向串口发送一个字符*/
{ set_wr_up(); outportb(port_CS1,ch); set_wr_down(); }
6 上位机端数据的接收和发送
在上位机中安装USB100的驱动程序之后,该USB就会被默认成该PC的一个串口,因此在上位机可以将它当作一个虚拟的串口进行处理, 读取其数据就如同读串口数据一样方便,很容易构建快速的通讯平台。上位机的通信接口软件是采用Delphi7并配合串口控件Spcomm来开发的。
以下是作者自己编写的程序,包括发送数据,接收数据,按约定协议进行字符插入法,计算校验码等函数,提供给读者参考:
6.1数据发送
function send(souce:string;com1:TComm):integer;
begin              //发送一个字符串到串口
 Com1.WriteCommData(pchar(frame_content),length(frame_content));
end;
6.2数据接收
procedure Com_Rec(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var rec_buf:array[1..5000] of byte;   //接收字符缓存数组
begin  //将接收缓冲区的内容移动到接收字符缓存数组
move(buffer^,pchar(@rec_buf)^,bufferlength);
end;
6.3实现数据字符插入的算法
function char_insert(souce_str:string):string;
var  After_insert_str:string; pos_add,i:integer;
begin
after_insert_str:=souce_str; pos_add:=0;
for i:=1 to length(souce_str) do
begin
    if ((i mod 2 )=1 )then
    begin
      if '10'=MidStr(souce_str,i,2) then
      begin
        Insert('10',after_insert_str,pos_add+i+2); pos_add:=pos_add+2;
      end;
    end;
end;
result:=after_insert_str;
end;
6.4计算数据校验和的算法
function count_CheckSum(souce_str:string):integer;
var CheckSum,:integer;
begin
CheckSum:=0;
for i:=1 to c length(souce_str) do
begin
if ((i mod 2 )=1 ) then CheckSum:=CheckSum+strtoint('$'+MidStr(souce_str,i,2));
end;
result:=256-checksum mod 256;
end;
7 小结
本文详尽介绍了存储器芯片在线测试系统中通信部分的设计与实现。在上位机运行Windows操作系统、下位机运行Dos操作系统的主从控制系统中,解决了上、下位机之间的通讯瓶颈问题。作者提到的所有算法和设计方案均来自实际开发中的提炼总结,可实施性很强。读者参考作者所搭建的模型,可以快速的加以改进并应用到实际中,为产品开发、科研研究赢得了宝贵的时间。
 
参考文献:
[1](美)Samuel P.Harbison III  Guy L.Steele Jr. 著 邱仲潘 等译 《C语言参考手册》 机械工业出版社,2003.8
[2]  鲁沐浴 主编 《C语言最新编程技巧200例》电子工业出版社,1994.6
[3] 甘志 李幼仪 陈宜凯 编 《Delphi7 高级应用开发篇 清华大学出版社》 2003.1
[4] 飞思科技产品研发中心 编著 《Delphi下深入Windows核心编程》 2003.8
[5]  肖距雄 翁铁成 宋中庆编著《USB技术及应用设计》清华大学出版社,2003.


作者简介: 刘晓楠,男,1977年9月生,汉族,解放军信息工程大学信息工程学院计算机应用专业硕士研究生,研究方向是嵌入式系统。E-mail: nine_day@163.com
通信地 址:郑州1001信箱716号分箱  邮 编450002
E-mail: nine_day@163.com
导师简介:王震宇,男,1969年6月生,汉族,硕士,副教授,研究方向是嵌入式系统。

 

  • 上一篇文章:光电型高精度周期测定装置设计
  • 下一篇文章:没有了
  • Google
     
    Web www.cediy.com
    发表评论 □告诉好友 □打印此文 □关闭窗口
     最新热点文章
     基于ARM及蓝牙技术的无线测试系统设...
     基于DSP实现对SAA7111A初始化配置的...
     基于Mega8单片机和DS18B20的单总线...
     一种低纹波高精度数字电流源的设计...
     基于数字PWM信号的超声波功率电源的...
     一种高精度数控直流电流源的设计与...
     
     最新推荐文章
     基于TMS320C6713与PC机的PCI总线高...
     基于TMS320VC5409和Cygnal单片机构...
     基于ARM控制器S3C44B0x的给煤机控制...
     基于USB 2.0的高速数据采集卡在虚拟...
     大功率谐振过渡软开关技术变频器研...
     大功率谐振过渡软开关技术变频器研...
     
     相 关 文 章
      ◇  网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
     设为首页  加入收藏  关于本站  版权申明   联系站长   宣传赚点   友情链接
    如果我在线,不用加为好友,立刻与我交谈。 业务咨询QQ:342488946
    Copyright© 2004-2010 CEDIY.COM .All Rights Reserved
    粤ICP备05119258号
    “安网”备案标志 网上报警