关于PCI9052在多功能CAN适配卡中的应用研究

发布者:phi31最新更新时间:2016-05-31 来源: eefocus关键字:PCI9052  CAN适配卡  PCI总线 手机看文章 扫描二维码
随时随地手机看文章
0 概述

PCI总线是一种独立于CPU的局部总线,实现PCI接口的方案一般有两种:采用可编程逻辑器件和专用总线接口器件。采用可编程逻辑器件实现PCI接口的好处是比较灵活,但其设计难度很高,因为PCI总线对负载要求、传输数据的建立时间的要求都比较苛刻,同时还需要器件内部实现用于配置的各类寄存器,以及完成逻辑校验、地址译码等工作的寄存器。此外,还需加入FIFO、用户寄存器组和后端设备接口等部分。设计这种PCI总线接口会导致将大量的人力、物力投入到复杂的逻辑验证和时序分析的工作上,开发周期较长。采用专用接口器件虽然没有采用可编程逻辑器件那么灵活,但能够有效地降低接口设计的难度,缩短开发时间。专用接口器件具有较低的成本和很高的通用性,能够优化数据传输,提供配置空间,具备用于突发传输功能的片内FIFO,提供扩展局部总线等优点,并且许多公司还提供配套的开发工具,使用很方便,开发周期短。 PCI9052是PLX公司开发的低价格PCI总线从模式接口芯片,低功耗,符合PCI2.1规范,提供的局部总线(Local Bus)可通过编程设置为8/16/32位的(非)复用总线。PCI9052提供的局部总线不但可编程,而且与PCI总线的时钟相互独立运行,可实现异步操作,总线操作自动实现时序同步。两总线的异步运行方便了高、低速设备的兼容。 

1 硬件设计

为了充分利用硬件的有用资源,该多功能适配卡不仅要实现与CAN总线进行通信,还具有A/D、D/A及I/O功能,实现对CAN通信和数据采集等功能。PCI9052有5个地址映射空间,要实现这些功能,通过PCI9052来连接是能够满足要求的。I/O采用IO映射空间,CAN、A/D和D/A采用Memory地址映射空间,也可都采用Memory方式,这些地址空间的配置是在EEPROM中进行配置的。根据采样精度要求,A/D芯片采用的是16位单通道并行通信的AD976芯片,转换时间10us,为了实现多通道输入,须在模拟输入端加一多路开关MAX308ESE。D/A芯片采用的是16位8通道芯片DAC7644E,转换时间10us。CAN控制芯片采用PHLIPS的SJA1000,同时须接一CAN驱动芯片82C250。另外,PCI9052需要一片EEPROM芯片用来存储PCI9052的初始化配置参数。可与PCI9052匹配的芯片有Microchip Technology 1K 93AA46、93C46B、93LC46B,还有其他厂商的。在选择EEPROM时一定可参考PCI9052的推荐说明,这里采用的是1K的93LC46B。其原理结构如图1: 



2  软件设计

软件设计包括WDM驱动程序、API接口函数和应用程序设计,这里主要介绍驱动程序设计。对于WDM驱动程序,要获得正确的地址分配值,必须正确地设置配置参数,9052内部的配置寄存器是通过外部串行E2PROM上电加载的。9052会自动根据该E2PROM的状态来决定其内部寄存器的值。如果E2PROM不存在(此时E2PROM和9052连接的数据引脚应加上拉电阻或其内部无有效值,9052会将其内部寄存器配置为缺省值。值得一提的是,如果E2PROM内部没有烧写为有效值时,应保证其开始48位为全“1”;否则,系统上电时可能会产生错误。9052有5个本地空间,用户可根据实际需要进行相应的配置。当将本地空间配置成I/O时,对该空间的读/写操作只能单次进行。配置成存储器空间,用户会有多种接入模式,可大大提高接入速度。

该多功能设配卡驱动程序的开发采用支持Windows2000的WDM驱动程序。开发工具采用Visual C++6.0、Win2000 DDK及DriverStudio2.7。采用DriverStudio向导工具生成驱动程序框架和调试程序,在利用向导时需正确填写PCI Vendor ID和PCI Device ID,否则,在安装驱动程序时查找不到正确的硬件设备,导致无法安装驱动。

由于WDM驱动程序运行在系统的内核态,编写非常复杂,在应用程序和硬件进行数据交换中,可以采用几种方式进行通信:I/O控制方式、直接读写方式、中断方式和DMA方式。由于CAN总线的最高速率是1Mbps,所以我们采用IO控制操作实现数据的传送,在驱动程序派遣例程中实现这些操作,在API函数中提供这些操作的接口,应用程序可使用标准Win32 API函数DeviceIoControl来数据读写,也可以采用DriverStudio向导工具产生的DeviceControl来操作,在这里我们将它集成到对应的API函数里,生成相应的静态库或者动态连接库的形式提供给应用程序。

定义了7个IO控制代码:
IOCTL_HIL100_READ_IO_DATA(用于读I/O口数据)
IOCTL_HIL100_READ_AD_DATA(用于读AD数据)
IOCTL_HIL100_READ_DA_DATA (用于读DA数据)
IOCTL_HIL100_READ_CAN_DATA(用于读CAN数据)
IOCTL_HIL100_WRITE_IO_DATA(用于写I/O口数据)
IOCTL_HIL100_WRITE_DA_DATA(用于写DA数据)
IOCTL_HIL100_WRITE_CAN_DATA(用于写CAN数据)

这些控制代码在驱动程序的DeviceControl(KIrp I)函数中调用,如下程序所示:

NTSTATUS PCIDriverDevice::DeviceControl(KIrp I)
{
 NTSTATUS status;
switch (I.IoctlCode())
 {
   ………………………………………
  case IOCTL_HIL100_READ_IO_DATA: 
  status = IOCTL_HIL100_READ_IO_DATA _Handler(I);
 case IOCTL_HIL100_WRITE_IO_DATA:
 status = IOCTL_HIL100_WRITE_IO_DATA _Handler(I);  
  case IOCTL_HIL100_WRITE_DA_DATA:
status = IOCTL_HIL100_WRITE_DA_DATA _Handler(I);
 case IOCTL_HIL100_READ_AD_DATA:
 status = IOCTL_HIL100_READ_AD_DATA _Handler(I);
 default:
  status = STATUS_INVALID_PARAMETER;
  break;
 }
 ………………………….
 } 

在该函数进行驱动中相应的数据处理与传递,包括从内存中读上层应用程序发送下来的数据或将AD、CAN等外设传递上来的数据送到上层应用程序。

API函数主要提供了PCI卡的开关,A/D、D/A、I/O的读写函数,CAN的设置、读写,中断事件消息函数等。API函数与以上控制代码相关联,传递数据和控制参数。如下程序所示:

bool WriteDataToIO(unsigned char data)//写数据到IO口
{
……
 ULONG BytesReturned;
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_WRITE_IO_DATA, &data, 1, 
  NULL, 0, &BytesReturned, NULL))
……
}
bool ReadDataFromIO(unsigned char *data) //从IO口读数据
{
 ……
 ULONG BytesReturned;
 if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_IO_DATA, &data, 1, 
  data, 1, &BytesReturned, NULL))
 ……
}
bool WriteDataToDA(unsigned short control,unsigned short freq[4])//写数据到AD
{
 ……
 ULONG BytesReturned;
 unsigned short pData[16];
 pData[0]=control;
 pData[1]=freq[0];
 pData[2]=freq[1];
 pData[3]=freq[2];
 pData[4]=freq[3];
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_WRITE_DA_DATA, pData, 10, 
  NULL, 0, &BytesReturned, NULL))
 ……
}
bool ReadDataFromAD(unsigned short address[8],unsigned short data[8]) 
{   //从AD读数据
 ……
 ULONG BytesReturned;
 if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_AD_DATA,address,16, 
  &data,16, &BytesReturned, NULL))
 ……
}
bool ReadDataFromDA (unsigned char address,unsigned short *data)//从DA读数据
{
 ……
 ULONG BytesReturned;
 if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_DA1_DATA,&address,1, 
  data, 2, &BytesReturned, NULL))
 ……
}

将这些接口函数生成动态链接库的形式,供上层应用程序调用。

3   结束语

由于PCI总线的高速特性,使其被广泛应用于高速数据采集系统和数据传输通信系统中,有效地解决了实时采集、实时传输和实时存储等问题。而PCI总线控制器专用芯片的出现则缩短了PCI总线硬件设备的开发周期,使得硬件设备的可靠性和稳定性都有了较大的提高。在开发过程中,尤其对于高速采样及实时严格的系统,我们实现了对该系统高效率的操作特性,该研究有效的解决了高速实时采集、实时传输和实时存储等的驱动问题。同时该PCI多功能CAN适配卡既实现了CAN总线通信功能,同时也实现了多路通道的数据采集和相应控制。
关键字:PCI9052  CAN适配卡  PCI总线 引用地址:关于PCI9052在多功能CAN适配卡中的应用研究

上一篇:CAN-bus器件是什么意思
下一篇:CAN总线各个功能模块的设计

推荐阅读最新更新时间:2024-05-03 00:25

PCI9030及其PCI总线接口电路设计
PXI总线系统的卓越性能和较低的价格,使得越来越多从事自动测试的工程技术人员开始关注PXI的发展。而PXI总线是PCI总线在仪器领域的扩展,可以将PXI总线分为PCI总线和PXI扩展的总线两部分。将进行PCI总线接口电路的设计,从而为设计 PXI模块仪器,组建PXI总线自动测试系统做好准备。 目前,PCI总线接口电路的实现主要有两种方案:一是采用一片大容量FPGA/CPLD实现PCI总线接口逻辑;另一种是采用ASIC芯片完成PCI总线的接口电路。由于PCI总线速度高,协议复杂,采用第一种方案虽然应用很灵活,但是调试困难,开发周期长,而且采用一片工业级可用于PCI接口的 FPGA/CPLD完成PCI总线接口功能,远比使用PCI接口芯
[电源管理]
PCI9030及其<font color='red'>PCI总线</font>接口电路设计
PCI总线从设备控制器的设计与实现
  0 引言   随着星载电子系统复杂度、小型化需求的提高,片上系统(System on Chip SoC)已 经成为应对未来星载电子系统设计需求的解决途径。为了简化设计流程并且提高部件的可重 用性,在目前的SoC 设计中引入了称之为平台的体系结构模板,用它来描述采用已有的标准 核来开发SoC 的方法。本文所作的工作主要是按照建立SoC 集成设计平台的需求,根据当前 国际航天领域的技术现状,选择PCI(Peripheral Component Interconnect)总线作为SoC 集成设计平台所能提供的一种总线模块,根据可重用的IP(Intellectual Property)设计 思想对PCI 总线从设备控制器进行设计实
[嵌入式]
基于WinCE的CAN适配卡驱动程序的设计与实现
1 引言   WinCE是一种为多种嵌入式系统和产品设计的紧凑、高效、可升级的操作系统,WinCE 采用标准模式,其最主要的特征:为有限的硬件资源提供了多线程、多任务和完全优先级的计算环境。   WinCE操作系统支持两种类型的驱动程序:本地驱动程序(Build-In),是把设备驱动程序作为独立任务实现,直接在顶层任务中实现硬件操作,完成特有专用的驱动程序;流接口驱动程序,WinCE的I/O系统将设备程序作为内核过程实现,这种方式便于实现I/O子系统的层次模型,便于文件系统一起把设备作为特殊文件处理,提供统一的管理、统一的界面和统一的使用方法,并把设备、文件及网络通信组织成为一致的更高层次的抽象,为用户提供统一的系统服务和用户接口
[嵌入式]
基于PCI总线的嵌入式实时图像处理系统
本文着眼于图像处理系统的发展要求,说明了基于PCI总线的DSP图像处理系统的优点,并详细阐明了系统的硬件结构和PCI总线的驱动实现,最后介绍了系统实现的效果。 1 图像处理系统发展现状 在计算机信息处理及应用中,图像信息处理以及处理结果的应用占有十分重要的地位。图像处理的发展依赖于处理器芯片(包括单片机、DSP等)技术的应用和发展,以及大容量、价格低廉的存储器的出现。图像处理系统虽然由机箱式大体积结构发展为插卡式小型化结构,但是由于图像处理存在大量的数据信息,在实时性和容量上一般不能满足多数需要实时处理的场合。这主要体现在如下2个方面。 1.1 实时性要求 图像处理系统有很多种实现方法,比如在通用计算机上用软件实现、用单片机
[嵌入式]
TMS320VC5402 HPI接口与PCI总线接口设计
数字信号处理器DSP(Digital Signal Processor)是一种特别适合于进行数字信号处理的微处理器,凭借其运算速度快、功能强等特点,在各个领域的应用越来越广泛。但在很多场合下需要将DSP的各种外围设备同计算机连接,以实现数据传输。通常情况下可利用DSP的串口或I/O口来实现,但无论是接串口还是接I/O口都要占用DSP的硬件资源,同时数据的传输速度有时也不能满足系统的要求。为了解决这一问题,将DSP的HPI口通过PCl2040芯片桥接到PCI总线。本文以TMS320VC5402(简称VC5402)为例,介绍DSP的HPI口及其与PCl2040的接口设计。 1 HPI接口功能及特点 主机接口HPI(Host Pott
[嵌入式]
CPCI总线的分布式系统设计应用
大规模系统应采用分布式网络架构,同时应具有开放性和良好的可扩展性,以适应不断变化的应用环境和需求;系统中各模块分工处理不同类型数据,应具有相对的独立自主性,同时又在不同的层次上相互关联,能实现相互访问和协同工作;系统也应具有良好的集成性,在功能层次上需要有效的组件构造框架,在组件层次上则应有统一的数据交互平台 。 基于以上分析,我们选用CPCI总线作为分布式系统的数据通信平台。CPCI总线技术是PCI总线技术和成熟的欧式卡组装技术的结合,在电气、逻辑和软件功能方面,它与PCI标准完全兼容,又突破了PCI标准4个插槽的限制,相较于VME总线模块价位低,具有开放性、易于扩展、高密度等优点,同时达到99.999%的高可用性。采
[工业控制]
C<font color='red'>PCI总线</font>的分布式系统设计应用
一种基于Compact PCI总线的数据采集系统设计
引言   数据采集的实时性和可靠性是关系工业控制系统性 能的重要因素,数据采集系统的速率主要取决于A/D转换、通信接口和总线传输的速率。 TI公司推出的DSP芯片TMS320F2812具有很高的工作频率和丰富的外设资源,能够满足采集系统的实时性要求,同时又降低了系统设计的成本。Compact PCI总线作为PCI总线向工业控制领域的拓展,除了 具备高速的传输速率,还具备优良的机械特性和电气特性。本文研制了一种基于Compact PCI总线的数据采集系统,系统以DSP作为控制核心,可以进行模拟信号采集、并行接口和串行接口的数据信号的采样。 1 Compact PCI总线简介   Compact PCI总线与PCI标准完全
[嵌入式]
PCI总线接口技术及其在高速数据采集系统中的应用
    摘要: 一种基于PCI总线的高速数据采集传输系统的实现,讨论了PCI总线控制器9054的性能及三种传输模式,提供了该系统的硬件实现和采用DMA传输方式实现数据传输的设计。     关键词: PCI总线 PCI 9054总线控制器 DMA 数据采集是数字信号处理中非常重要的环节。对于不同的任务,数据采集要达到的技术指标也不相同。对于瞬态信号,雷达信号和图像处理都需要几MB/s甚至几十MB/s的超高速采集速率。目前用于PC机的数据采集卡大部分是基于ISA总线的,这种结构的最大缺点是传输速率太低,不能实现数据的实现高速传输。PCI总线推出后,以其突出的性能备受计算机和通信业界的青睐,将取代以往的总线,
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved