精华内容
下载资源
问答
  • 摘要:本文将介绍采用具有热插拔功能的电源模块组成48V分布式电源结构时应考虑的设计问题与用热插拔控制器电路解决多个电路板或刀片刀片热插拔运行中的安会问题等二个方面的内容。  带电插拨功能同时也称为热插拔...
  • 本文介绍采用具有热插拔功能的电源模块组成48V分布式电源结构,应考虑的设计问题。热插拔功能对于确保热插拔元件的安全特别重要,此外,在热插拔过程中,热插拔功能能防止输入和输出电源线电压产生明显波动。任何...
  • 现象:网卡和 SCSI 控制器显示为可移除设备。与该虚拟硬件对应的“安全移除硬件”选项显示在 Windows 系统任务栏中。...解决办法:可以使用 vSphere Client 或通过编辑 .vmx 文件来禁用热插拔功能。 注意...

    现象:
    网卡和 SCSI 控制器显示为可移除设备。
    与该虚拟硬件对应的“安全移除硬件”选项显示在 Windows 系统任务栏中。
    如果正在使用 VMware View,您会注意到具有持久磁盘的 View 桌面正在断开连接。
    某些windows2012版本的虚机之间,可以访问C$而不能访问D$\E$的问题。

    解决办法:
    可以使用 vSphere Client 或通过编辑 .vmx 文件来禁用热插拔功能。

    注意: 还可以禁用诸如 e1000 或 vmxnet2 NIC 等 PCI 设备的热插拔功能。

    要使用 vSphere Client 禁用热插拔功能,请执行以下操作:

    使用 vSphere Client 连接到 ESXi/ESX 主机或 vCenter Server。
    关闭虚拟机电源。
    右键单击虚拟机,然后单击编辑设置。
    单击选项选项卡。
    单击常规 > 配置参数 > 添加行。
    插入名为 devices.hotplug 且值为 false 的新行。
    然后打开虚拟机电源。

    要使用 vSphere Web Client 禁用热插拔功能,请执行以下操作:

    从 Web 浏览器连接到 vSphere Web Client。
    使用管理员凭据进行登录。
    导航到要修改的虚拟机。
    关闭虚拟机。
    右键单击虚拟机,然后选择编辑设置。
    单击虚拟机选项选项卡。
    单击高级 > 编辑配置 > 添加行。
    插入名为 devices.hotplug 且值为 false 的新行。
    打开虚拟机电源。

    要通过编辑 .vmx 文件来禁用热插拔功能,请执行以下操作:

    关闭虚拟机电源。
    使用 SSH 客户端访问 ESXi/ESX 服务控制台。
    在文本编辑器中打开虚拟机配置文件 (.vmx)。 默认位置为:
    
    /vmfs/volumes/datastore_name/vm_name/vm_name.vmx
    
    添加以下行:
    
    devices.hotplug = "false"
    
    注意: 此设置不影响热插拔 CPU和内存。
    
    保存并关闭该文件。
    然后打开虚拟机电源。

    注意: 如果正在使用 VMware View,请先对父虚拟机执行上述过程之一,然后再执行以下步骤:

    创建父虚拟机的新快照:
    
        在 vSphere Client 中,右键单击父虚拟机,然后单击快照 > 生成快照。
        输入快照的名称和描述。
        单击确定。
    
    将受影响的池重组到此新快照中:
    
        在 View Manager 控制台中,选择并打开一个池。
        单击 View Composer > 重组,然后选择新生成的快照。
        单击下一步。
        配置调度和警告选项。
        单击下一步。
        检查确认信息。
        单击完成并验证重组操作是否成功完成。
        对所有受影响的池重复重组过程。
    展开全文
  • 题目:利用动态链接库技术实现具有热插拔能力的“消息映射表”程序。程序在功能上表现为一个计算器程序,主菜单中提示: Press A:Adding; Press S: Subtracting Press M: Multiplying Press D: Dividing 用户...

    题目:

    利用动态链接库技术实现具有热插拔能力的“消息映射表”程序。程序在功能上表现为一个计算器程序,主菜单中提示:
    Press A:Adding;
    Press S: Subtracting
    Press M: Multiplying
    Press D: Dividing
    用户键入A则启动加法子程序,提示用户输入两个操作数,并输出计算结果。用户键入S则启动减法子程序。以此类推。子程序执行完毕之后再回到主菜单状态。
    使该程序有热插拔能力是指可以通过配置文件在不改变主程序的前提下动态增加新的菜单项和新的功能(例如增加乘方、开方、指数、对数运算等。)

    设计思路:

    首先设计程序所需的动态链接库liba.so 和 libb.so,然后在主程序中读配置文件信息,根据配置文件的信息使用动态库。

    设计动态链接库:根据题目要求设计动态链接库liba.so与libb.so,liba.so中包含四个计算程序

    “a.h”

    include<stdio.h>
    void Add();
    void Sub();
    void Multiply();
    void Divide();

    “a.c”

    void Add(){
        int a=0,b=0;
        int result=0;
        printf("input two numbers:\n");
        scanf("%d %d",&a,&b);
        result=a+b;
        printf("the result of Adding is %d\n",result);
    }
    void Sub(){
        int a=0,b=0;
        int result=0;
        printf("input two numbers:\n");
        scanf("%d %d",&a,&b);
        result=a-b;
        printf("the result of Subing is %d\n",result);
    
    }
    void Multiply(){
        int a=0,b=0;
        int result=0;
        printf("input two numbers:\n");
        scanf("%d %d",&a,&b);
        result=a*b;
        printf("the result of Multiply is %d\n",result);
    
    }
    void Divide(){
        double a=0.0,b=0.0;
        double result=0.0;
        printf("input two numbers:\n");
        scanf("%lf %lf",&a,&b);
        result=a/b;
        printf("the result of Divide is %lf\n",result);
        }
    
    
    //"b.h"
    #include<stdio.h>
    #include<math.h>
    void Pow();
    //"b.c"
    #include"b.h"
    void Pow(){
        int a=0,b=0;
        long int result=0;
        printf("input two numbers:\n");
        scanf("%d %d",&a,&b);
        result=pow(a,b);
        printf("the result of Adding is %ld\n",result);
    }
    

    将源代码编译成动态链接库

    gcc a.c -fPIC -shared -o liba.so
    gcc b.c -fPIC -shared -o libb.so

    -fPIC是指建立位置无关代码;
    -shared标签是告诉编译器生成动态链接库
    动态链接库建立后,建议将库放在Liunx默认的链接库文件目录/lib或者/usr/lib中。

    主程序设计

    /*main.cpp*/
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include"readso.hpp"
    #define fun_max_number 20
    #define line_max_length 100
    using namespace std;
    
     int main(int argc,char*argv[])
     {
         method met[fun_max_number];
         FILE *configfile=fopen("config.ini","r");
         //读配置文件信息
         int funcount=0;
         char buff[100];
         while(fgets(buff,line_max_length,configfile))
         {
    
             met[funcount]=method(buff);
             //cout<<met[funcount].msg<<" "<<met[funcount].menu<<" "<<met[funcount].libso<<" "<<met[funcount].fun_entry<<" "<<endl;
             funcount++; 
             bzero(buff,100*sizeof(char));
         }
         fclose(configfile);
        // cout<<"close config"<<endl;
        //循环执行部分while(1)
          while(1)
          {     
              for(int i=0;i<funcount;i++)
                    cout<<"Pressing "<<met[i].msg<<" :"<<met[i].menu<<endl;
                    //printf("Pressing %c : %s \n",met[i].msg,met[i].menu);
                char flag;
                cin>>flag;
    
              for(int a=0;a<funcount;a++)
              {
                  if(flag==met[a].msg)
                  {
                      met[a]._act();
                             //跳转到对应的函数,链接库
                      getchar();
                  break;
                  }
              }
    
          }
        return 0;
     }
    
    
    

    主程序中读并且处理配置文件信息,然后用一个循环来作为主体,在循环中调用链接库。在处理配置文件信息的时候使用了一个method类,

    //"readso.hpp"
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<dlfcn.h>
    using namespace std;
    class method{
        public:
            method();
            method(char *str);
            ~method()
            {
    
             char msg;
             char *menu;
             char *libso;//链接库的绝对路径
             char *fun_entry;//对应借口的符号,根据这个符号从动态链接库中查找相关函数的地址
             void *handle;//dlopen句柄
    
    
        public:
    
           void (*function)();
           void _act();
    
    };
    //readso.cpp
    #include"readso.hpp"
    using namespace std;
    method::method()
        {
                /*this->msg='A';
                this->menu="Adding";
                this->libso="/lib/liba.so";
                this->fun_entry="Add";
                */
    
        }
    method::method(char *str)
            {   
                    char a,b[100],c[100],d[100];
                    int n=0;
    
                    sscanf(str,"%c %s %s %s",&a,b,c,d);
                    //cout<<"read::::"<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<endl;
    
                    this->msg=a;
                    this->menu=new char[strlen(b)+1];
                    strcpy(this->menu,b);
                    this->libso=new char[strlen(c)+1];
                    strcpy(this->libso,c);
                    this->fun_entry=new char[strlen(d)+1];;
                    strcpy(this->fun_entry,d);
    
                    //sscanf(str,"%c %s %s %s",&(this->msg),this->menu,this->libso,this->fun_entry);     
                    //cout<<this->msg<<" "<<this->menu<<" "<<this->libso<<" "<<this->fun_entry<<" "<<endl;   
    
             }
    void method::_act()
    {
    
                     this->handle=dlopen(this->libso,RTLD_LAZY);
                     //this->handle=dlopen(c,RTLD_LAZY);
                     if(!handle)
                         cout<<"error open "<<this->libso<<endl;
                     else{
                        this->function=(void(*)())dlsym(this->handle,this->fun_entry);
                        //this->function=(void(*)())dlsym(this->handle,d);
                        char*err=dlerror();
                        this->function();
                        //getchar();
                        dlclose(this->handle);
                        if(err)
                            cout<<err<<endl;
                    }
    
    }
    

    写的时候没有考虑的清楚,把method类写的比较复杂,其实关键得成员变量不需要这么多,method::method(char *str)是类的构造函数,*str是从配置文件读到的信息,每条*str指向的信息包含四个,比如
    “A Adding a.so Add”。
    在method::_act()中,使用了dlopen()和dlsym()函数,函数声明如下

    #include <dlfcn.h>
    
    void *dlopen(const char *filename, int flag);
    
    char *dlerror(void);
    
    void *dlsym(void *handle, const char *symbol);
    
    int dlclose(void *handle);

    dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,dlerror返回出现的错误,dlsym通过句柄和连接符名称获取函数名或者变量名,dlclose来卸载打开的库。 dlopen打开模式如下:

      RTLD_LAZY 暂缓决定,等有需要时再解出符号
      RTLD_NOW 立即决定,返回前解除所有未决定的符号。
     dlopen函数将lib.so加载到main程序内存中,dlsym()函数查找内存,查找符号表找到fun_entry对应接口地址,映射到void (*function)()成员,调用void (*function)()即为调用相关的函数,比如
     function=(void(*)())dlsym(/lib/liba.so,Add);后
     执行function()函数即为执行Add()函数。
     至此,所有工作准备就绪。
     编译主函数,在调试的时候编译的次数太多,就把编译过程写在了makefile文件中,makefile: 

    main:main.o readso.o
        g++ -rdynamic -o main main.o readso.o -ldl
    main.o:main.cpp readso.hpp
        g++ -c main.cpp -o main.o
    readso.o:readso.hpp readso.cpp
        g++ -c readso.cpp -o readso.o
    clean:
        rm -rf *.o main

    配置文件

    A Adding /lib/liba.so Add
    M Multiplying /lib/liba.so Multiply
    D Dividing /lib/liba.so Divide
    P Power /lib/libb.so Pow
    S Subtracting /lib/liba.so Sub

    需要注意的问题

    dlopen接口是标准c的接口,c和c++的符号表有所不同,所以a.so和b.so不能用c++编写,否则在dlsym的时候无法在符号表中查找到Add()等接口。
    只有在a.so和b.so中存在的函数才能写到配置文件中。
    在更改配置文件后,比如,增加、删除操作后,需要通过重启程序的方式来获取到配置文件更改的结果,做到了题目中提到的在不更改主程序的情况下完成菜单的增加和删除操作。

    展开全文
  •  LTC:registered:4280 热插拔 (Hot SwapTM) 控制器允许在一块带电背板上安全地进行电路板的插拔操作。通过采用一个外部 N 沟道传输晶体管,可使电路板电源电压和浪涌电流以一种可调速率斜坡上升。一个 I2C 接口和板...
  • 凌特公司日前推出的新型四电源热插拔(Hot SwapTM)控制器LTC4245具有8位片上ADC和I2C兼容接口。LTC4245拥有支持3.3V、5V和±12V CompactPCI或12V、3.3V和辅助3.3V PCI Express的灵活性,通过测量板卡电压、电流和...
  • TI 公司的TPS2480/81是具有正电压智能保护的热插拔控制器和I2C电流监视器.具有可编程的FET功率限制,外接N沟FET栅极驱动,可编程的故障定时器,电流,电压和功率的I2C监视,1%的高精度电流监视,并具有动态校准,输电压9-20...
  • 凌力尔特公司(Linear Technology Corporation)推出LTC4308和LTC4309,这扩展了I²C和SMBus...这两个都可热插拔的两线总线缓冲器在I/O卡插入带电背板时防止信号讹误,并按照I²C和SMBus规范提供容性隔离。 LTC4308 和
  • TPS2480/81是具有正电压智能保护的热插拔控制器和I2C电流监视器。具有可编程的FET功率限制,外接N沟FET栅极驱动,可编程的故障定时器,电流、电压和功率的I2C监视,1%的高精度电流监视,并具有动态校准,输入电压9V~...
  • MAX5976A/MAX5976B为完全集成的解决方案,适用于需要在带电背板上安全插入、拔出电路板卡的热插拔应用。器件在单芯片封装内集成了热插拔控制器、24mΩ功率MOSFET以及电子断路器保护。IC设计用于2.7V至18V电源保护。 ...
  • 在Web开发中,比较郁闷的事情是修改源码之后,需要重新编译整个项目,然后重启web服务器。...本文将向你展示如何使Spring Boot的Web应用具有热插拔功能(在Eclipse/STS中设置)。 1.下载spring-loaded

    在Web开发中,比较郁闷的事情是修改源码之后,需要重新编译整个项目,然后重启web服务器。现在Spring Boot有了热插拔的组件,可以让你修改源码之后,不需要再重启web服务器,只需要刷新浏览器页面即可,无需再不停的重启。

    本文将向你展示如何使Spring Boot的Web应用具有热插拔的功能(在Eclipse/STS中设置)。

    1.下载spring-loaded

    从Spring网站下载spring-loaded:

    springloaded-1.2.3.RELEASE.jar

    或者是从GitHub中下载最新得版本

    2.在Eclipse/STS中设置spring-loaded

    A.先运行一次你的项目:打开Eclipse->右击你的Spring Boot项目-> Run As->Spring Boot

    B.右击你得Spring Boot项目->Run As->Run Configurations...->Java Application-><project_name>->Arguments

    在VM Arguments参数中设置spring-loaded选项

    -javaagent:/Users/qiya/springloaded-1.2.3.RELEASE.jar -noverify


    你可以把路径换成你的spring-loaded jar文件路径。

    好了,现在你可以试试修改你得java代码。




    展开全文
  • Summit Microelectronics公司推出业界首款可编程双路供电可热插拔控制器SMH4814,可监控两个独立的-48V电源,允许冗余电源控制。 设计人员可采用该公司基于GUI的非易失编程技术使SMH4814满足特定的功率管理和控制...
  • 凌力尔特公司(Linear Technology Corporation)推出 LTC4308 和 LTC4309,这扩展了 I2C 和 SMBus 总线缓冲器与上升...这两个都可热插拔的两线总线缓冲器在 I/O 卡插入带电背板时防止信号讹误,并按照 I2C 和 SMBus 规范
  • 凌力尔特公司 (Linear Technology Corporation) 推出 LTC4308 和 LTC4309,这扩展了 I2C 和 SMBus 总线缓冲器与上升时间...这两个都可热插拔的两线总线缓冲器在 I/O 卡插入带电背板时防止信号讹误,并按照 I2C 和 SMBus
  • 凌特公司(Linear Technology Corporation)推出的新型四电源热插拔(Hot SwapTM)控制器 LTC4245 具有 8 位片上 ADC 和 I2C 兼容接口。LTC4245拥有支持 3.3V、5V 和 ±12V CompactPCI 或 12V、3.3V 和辅助 3.3V PCI...
  • TE Connectivity (TE)推出的2位和3位LIGHT-N-LOK可热插拔连接器属于插入式线到线连接器。此类连接器可为带电和中性镇流器接线提供安全、可插拔的断开开关,符合国家电气法规和加拿大电气法规的要求,适用于新安装和...
  • 凌力尔特推出 LTC4308 和 LTC4309,这扩展了 I2C 和 SMBus 总线缓冲...这两个都可热插拔的两线总线缓冲器在 I/O 卡插入带电背板时防止信号讹误,并按照 I2C 和 SMBus 规范提供容性隔离。  LTC4308 和 LTC4309 的特点
  • CPCI总线简介CPCI总线是...CPCI总线具有严格的标准和规范,保证其具有良好的兼容性,支持多种处理器和操作系统,符合CPCI规范的扩展卡可插入任何CPCI系统并可靠地工作。CPCI标准将外设组件互连(PCI)标准特性与支持嵌...

    CPCI总线简介

    CPCI总线是一个开放式、国际性技术标准,由PCI总线工业计算机制造商组织PICMG(PCI Industrial Computer Manufacturer Group)负责制定和支持。CPCI总线具有严格的标准和规范,保证其具有良好的兼容性,支持多种处理器和操作系统,符合CPCI规范的扩展卡可插入任何CPCI系统并可靠地工作。CPCI标准将外设组件互连(PCI)标准特性与支持嵌入式应用的坚固机械外形完美结合在一起,其性能特征是专门针对工业环境而量身定制的。简单的说:CPCI总线=PCI总线的电气规范+标准针孔连接器+欧洲卡规范。CPCI基于ICMG2.0规范,其电气特性与PCI总线相同,因此用户的软件和普通PC机兼容,现有的PCI外围卡也可以很容易地移植到CPCI平台上。CPCI使用高密度针孔总线连接器,和使用金手指连接器的PCI卡相比,具有连接更可靠,完全气密的特点,模块的抗震性和抗腐蚀性高。CPCI还支持热插拔,即可在不关机状态下插入或取出板卡。热插拔的优点在于能增强系统性能或诊断系统故障而无需关闭系统,这对很多应用来说十分重要。

    另外,CPCI在32位/33MHz系统中能够提供132MB/s的背板传输能力,在64位/66MHz系统配置情况下的性能为528 MB/s。在对带宽要求高的场合CPCI具有很强的优势。

    除了上述所有的优点,CPCI还具有非技术性的优势,即经济实用、可快速推向市场以及高可靠性。所以,在当今的工控、通信、军事等诸多要求高可靠性领域中CPCI总线已经取代了ISA、STD等其它总线,成为主流总线形式。

    C PCI系统硬件方案概述

    CPCI系统由机箱、电源、总线背板和功能单元组成。一般而言,CPCI机箱内部就带有电源和总线背板,其中CPCI总线背板如图1所示。

    CPCI系统最多能加载的CPCI功能单元数取决于机箱所能提供的槽数n:一个CPCI系统由1个系统槽和(n-1)个外围槽组成。在CPCI系统中,系统槽为系统提供仲裁、时钟、中断和复位功能,这些信号对总线上所有的功能单元起作用。

    在这个CPCI系统中,我们研制的实际上是一块功能单元板,其硬件框图如图2所示。

    由于数字信号处理部分计算量大,且实时要求高,我们采用了FPGA和DSP协同处理数据的方案。在数字信号处理时,低层的信号预处理算法处理的数据量大,对处理的速度要求高,但运算结构相对简单,因而适于用FPGA进行硬件实现,相比之下,高层处理算法所处理的数据量相对较小,但算法的控制结构复杂,适于用运算速度高、寻址方式灵活、通信机制强大的DSP芯片来实现。

    CPCI总线控制以及通信协议十分复杂,一般需要选用专门的处理芯片。我们这里选用了PLX公司的PCI9054芯片,而电源管理选用了凌力尔特公司的LTC4240芯片。

    CPCI总线接口设计

    PCI总线接口的实现

    设计PCI接口的实现通常有两种方法:一种是用可编程器件FPGA或CPLD,另一种是用专用PCI接口芯片。二者各有优缺点:利用可编程器件自行设计PCI接口逻辑,可以根据具体的应用需要,优化接口逻辑,灵活性是该方法最大的特点,且接口逻辑也可获得较高的性能。但是由于PCI协议比较复杂,在具体的实现中也相当困难,并且各种逻辑关系验证起来也很麻烦,有时会得不偿失,把简单的设计变得复杂化了;而利用专用芯片来实现PCI总线接口是一种能够解决设计难点的有效方法。但是这种芯片必须具有较低的成本和通用性,而不限于插卡一侧的特定处理器总线,能够优化数据传输,提供配置空间,具备片内FIFO功能(用于突发性传输)等。目前,很多半导体器件公司提供这类专用芯片。如PLX开发的PCI9030、PCI9054 和AMCC开发的接口芯片S5933等。

    比较以上两种实现PCI接口的方案可知,用可编程逻辑器件能够较灵活地实现所需要的功能,但为了达到PCI指标的苛刻要求,需要做大量的逻辑验证和时序分析工作。采用PCI专用芯片,可以比较容易地实现PCI接口,大大缩短开发时间,当然,由于厂家设计芯片时对通用性的考虑,在用户需要的某个方面可能不是最好的,但综合性能方面,采用专用芯片要比用可编程器件设计好得多。

    我们最终选用了PLX公司的PCI9054芯片。

    P CI9054是PLX公司生产的PCI总线通用接口芯片,采用先进的PLX数据管道结构技术,符合PCIV2.1和V2.2规范。提供了两个独立的可编程DMA控制器。每个通道均支持块和分散/集中的DMA方式:在PCI总线端支持32位/33MHz;本地端(local bus)可以编程实现8、16、32位的数据宽度,传输速率最高可达132MB/s。

    PCI9054与DSP的接口

    PCI9054作为一种桥接芯片在PCI总线和LOCAL总线之间提供传递消息,既可以作为两个总线的主控设备去控制总线,也可以作为两个总线的目标设备去响应总线。其本地总线可工作在M,C,J三种模式:M模式是专为Motorola公司的MCU设计的工作模式。C模式下9054芯片通过片内逻辑控制将PCI的地址线和数据线分开,很方便地为本地工作时序提供各种工作方式,一般较广泛应用于系统设计中。J模式是一种没有Local Master的工作模式。它的好处是地址数据线没有分开,严格仿效PCI总线的时序。

    由于DSP我们采用了TI公司的C6202,考虑到与DSP的扩展总线进行接口,PCI9054的LOCAL总线选用了J模式。其连接如图3所示。

    这种连接方式十分方便,几乎不需要加多少改动,两块芯片就能互相通信。其部分引脚的逻辑转换关系如图4所示。

    热插拔电路设计

    CPCI总线不同于PCI总线的最大特点是支持热插拔(Hot Swap)。

    热插拔技术概述

    CPCI热插拔技术的基本目的是在系统正常工作的同时,CPCI总线上插入或拔出插件板,完成故障插件板的更换与计算机系统的重新配置。热插拔技术主要分为三种处理过程:

    1)物理连接过程

    热插入——在工作着

    CPCI总线上加入插件板。

    热拔出—— 在工作着

    CPCI总线上移走插件板。

    2)硬件连接过程

    计算机系统在硬件上的电气连接与断开。

    3)软件连接过程

    计算机系统在软件上的连接与断开。

    这 些连接过程在系统中虽属于不同的连接层,但是彼此相互关联。例如:当物理连接不存在时,硬件连接层就不能产生电气连接。而插件板从计算机系统的CPCI总线上拔出后,软件与硬件连接将自动断开。

    热插拔芯片介绍

    LTC4240热插拔控制器是凌力尔特公司研制的针对CPCI总线的热插拔控制器,它使线路板能够在带电的CPCI总线插槽中安全地插入或拔出, 能控制全部4个CPCI电源,它使用两个外部N沟道晶体管控制3.3V和5V电源,而±12V电源则由两个片上开关管调节。电子断路器对所有4个电源进行过流保护,“电源良好”输出信号表明所有电源电压都在正常容限之内,另外,LTC4240有 个内置的I 2 C总线兼容接口,从而可用软件控制和监视器件功能及电源状态。它还使用户能够开启或关闭器件、置位RESETOUT、开启状态LED指示驱动器以及不受±12V电源故障的影响。这个器件还可为I/O引脚提供预充电偏压.以及通过将PCI_RST信号和HEALTHY信号整合来产生LOCAL_PCI_RST信号.并能满足PCI定时要求,且不需要外部逻辑电路。

    LTC4240工作过程

    1)板卡插入过程

    当板卡插入背板时,在CPCI接插件的防护地连接上,板卡上可能存在潜在的对地电压放电。该热插拔板将首先接触到背板插件的长针(+5V和地),即LTC4240的VCC管脚被加电,将对其后端电路进行复位以关断VGATE3/5输出,从而禁止外部MOSFET管工作,并输出1V参考电压,此1V参考电压对还未接触到背板的I/O管脚加电,同时PWRGD#的输出将被置高,接着I/O管脚接触到背板插针上,BD_SEL#管脚被主机置低,以确认板卡已经被正确的插入,此时LTC4240控制的上电顺序开始。LTC4240通过控制VGATE3/5的输出来打开外部的MOSFET功率管。板卡上的电路都保持在复位状态,直到5和3V电源电压稳定,而且内部复位时间计时器达到一定时间时,复位信号停止,板卡进入正常操作过程。

    在 正常工作过程中,LTC4240将持续监控板卡的后端电压,一旦电压超过关断电压阈值,LTC4240将控制PWRGD#输出为低,以使主机检测到该信号并指示板卡电源有问题。

    2)板卡拔出过程

    板卡拔出时,首先将BD_SEL#与地断开,LTC4240则立即关断VGATE3/5输出,并改变PWRGD#的状态,同时将LOCAL_PCI_RST#输出置低,并将总线I/O接口电路置为高阻态,这时电源依旧对I/O脚加电,以使总线从激活状态平稳转为非供电状态。一旦I/O脚与背板插针断开,板卡上的电路和LTC4240将通过最后断开的长针进行最后的放电过程。

    设计好接口电路后,硬件设计工作还只完成了一半。由于PCI9054是通用PCI接口功能芯片,它的功能还不一定能够满足用户的需求,所 以还要进行功能寄存器设置以使接口电路具有特定的功能。寄存器的配置包括EEPROM初始化、LOCAL功能寄存器和PCI配置寄存器的配置。

    1)EEPROM初始化

    在计算机的加电自检期间,PCI总线的RST#信号复位,PCI9054内部寄存器的默认值作为回应。PCI9054输出本地LRESET#信号并检测串行EEPROM。如果串行EEPROM中的前33个比特不全为1,那么PCI9054确定串行EEPROM非空,用户可通过向PCI9054的寄存器CNTRL的29位写1来加载EEPROM的内容到PCI9054的内部寄存器,配置的信息(设备识别号、供应商代码号、Local总线三个空间的大小以及三个空间的基址等)事先要利用编程器写入配置存储器中,也可以在主机的专用程序中对EEPROM进行配置。

    2)PCI配置寄存器的配置

    配置PCI配置寄存器比较简单。主要是填写生产商ID号、器件ID号、类码子系统ID号和子系统生产商ID号。

    3)本地配置寄存器的配置

    对 于本地配置寄存器的配置就是对本地地址空间及其本地总线属性的配置。这些配置要根据实际开发的硬件板卡的硬件资源进行配置。

    设备驱动程序的设计

    在完成上述工作以后,还需在主控板(相当一台高性能计算机)上完成设备驱动程序。其关键是如何完成硬件操作,基本功能是完成设备的初始化、对端口的读写操作、中断的设置和响应及中断的调用,以及对内存的直接读写。在windows下有很多驱动程序开发环境,只需根据硬件的具体情况,很方便就能完成驱动程序的编制。

    结束语

    我们研制的设备实际上是一个通用硬件平台,通过加载不同软件,它需要完成很多复杂信号的检测、解调等功能,由于受到硬件运算速度、存储量等资源限制,这些信号处理仅靠底层的硬件电路(如DSP、FPGA)将很难满足要求,这就需要传给主控板处理;另外,考虑到应用的场合,CPCI总线系统很适合我们的要求,其接口设计就成为十分重要的部分,需要从软硬件两个方面全盘考虑、精心设计,才能达到预期目标。

    责任编辑:gt

    展开全文
  • 因此本文将介绍以下两个方面的内容:①采用具有热插拔功能的电源模块组成48V分布式电源结构时应考虑的设计问题;②用热插拔控制器电路解决多个电路板或刀片热插拔运行中的安会问题。
  • 2. USB热插拔功能USB接口都具有热插拔功能,能够做到即插即用。该功能的是通过USB主设备识别USB从设备上的上拉电阻来检测USB设备的连接和断开,并由此判断设备是低速设备还是全速设备,若是高速设备则还需要一系列...
  • MAX13487EESA+T

    千次阅读 2019-11-17 09:12:17
    MAX13487E 半双工RS-485/RS-422收发器,带有自动选向控制 利用AutoDirection省去隔离控制通道 说明 ...MAX13487E/MAX13488E具有热插拔功能,可以消除上电或热插入时总线上的故障瞬变信号。 MAX1348...
  • MAX13487E/MAX13488E具有热插拔功能,可以消除上电或热插入时总线上的故障瞬变信号。 MAX13487E/MAX13488E具有Maxim专有的自动选向控制功能。这种结构使其非常适合多种应用,比如:隔离的RS-485端口(这种
  • 3PEAK提供支持3V/5V、半双工、有极性和无极性的RS-485/-422收发器,芯片内部包含一路驱动器和一路接收器,具有热插拔功能, 可消除上电或热插入时总线上的故障瞬态信号。 RS-485芯片提供的限摆率驱动器能降低EMI和...
  • 摘 要:针对便携式移动办公的需求,提出了在USB 接口的移动存储设备上构建Linux 微型桌面操作系统的方法,分析了整个微型...由于USB盘体积小、携带方便、同时具有热插拔功能,给移动数据存储带来了便利。而开源的Linux
  • 摘 要:针对便携式移动办公的需求,提出了在USB 接口的移动存储设备上构建Linux 微型桌面操作系统的方法,分析了整个微型...由于USB盘体积小、携带方便、同时具有热插拔功能,给移动数据存储带来了便利。而开源的Linux

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 200
精华内容 80
关键字:

具有热插拔功能