专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »嵌入式开发 » 硬件驱动程序:Win2k驱动程序设计之硬件 »正文

硬件驱动程序:Win2k驱动程序设计之硬件

来源: 发布时间:星期五, 2008年12月12日 浏览:114次 评论:0

=tf width="98%" align=center border=0>驱动必须和硬件相结合是无可争辩事实传统硬件设计者编写测试代码是第驱动这些早期驱动然后传递给硬件机制软件工程师去开发全功能驱动 

  迟早驱动开发工程师必须理解硬件和足够术语章概述下大多数系统硬件基础 

  硬件基础 

  无论开发怎样驱动都必须清楚以下几点: 

  1. 怎样使用驱动状态和控制寄存器? 

  2. 怎样使驱动产生个中断? 

  3. 驱动怎样传输数据? 

  4. 是否驱动使用专用存储器? 

  5. 怎样驱动宣布它存在? 

  6. 驱动怎样通过软件进行配置? 

  下面将依次介绍 

  设备寄存器 

  驱动通过读写和外设相关联寄存器来和外设通讯每个设备寄存器执行个如下功能: 

  1. 命令: 仅占了几位去控制设备如: 开始和结束个数据转换或者配置设备和简单 

  2. 状态: 驱动去读这些寄存器来得到当前设备状态 

  3. 数据: 3. 数据: 这些寄存器被用来转换驱动与设备之间数据驱动写输出数据寄存器读输入数据寄存器 

  简单设备仅有很少相关联寄存器复杂设备(如: 显示适配器)就会有很多寄存器寄存器数量和用途最终被硬件设计者定义生成硬件设计说明书经验告诉我们那些保留位不是不必关心当读时候要掩盖它们时候要强制为零 

  访问设备寄存器 

  在知道了硬件之后还必须知道如下信息: 

  1. 设备个寄存器地址 

  2. 寄存器相对地址 

  通常情况下设备寄存器占用连续地址空间因此访问其它寄存器时候必须知道第个寄存器地址不幸在不同平台上个虚拟地址空间有不同意义因此详细讨论放到了第八章CPU访问设备寄存器使用以下方法(如图2.1)其中之

  1. 使用CPU特殊I/O指令 

  2. 使用标准存储器指令430)this.width=430" align=center border=0>
EISA: 扩展ISA接口总线构架 

  EISA接口总线是对原始ISA总线扩展EISA接口去除了ISA局限性同时保持兼容遗留下来ISA卡当然这种兼容在几个方面受到限制例如: 数据宽度加宽到32Bits时钟速率保持8MHz最大数据传输率为32N/S再如: EISA插槽也接受ISA卡所以不可能改善由于ISA卡布线而产生噪声问题 
  
  寄存器访问 

  EISA接口总线可以扩展到15个插槽个插槽分配固定4KBI/O地址这样使低端地址产生冲突如表2.5只有256个地址保证唯 


表2.5 使用EISA接口总线地址空间 

  中断机制 

  EISA中断是ISA接口超集虽然EISA同样提供像ISA15个不同优先级别中断但是中断请求线可以单独设定为下降沿触发中断或者电平触发中断这样允许EISA卡和ISA卡共存在同总线上 

  DMA能力 

  像ISA接口使用两个DMAC产生从0到77个系统DMA信道(信道4不可用) 

  EISA使用好几个方法扩展ISA接口: 

  1. 任何个信道都可以传输8Bits16Bits32Bits数据所以任何设备可以使用任何信道 

  EISADMA信道总线循环格式可以单独设定这个特性可以使新设备更快运行而且兼容遗留下来ISA卡如表2.6所示 


表2.6 EISADMA总线循环 

  2. 增加了24BitsDMAC计数寄存器使个传输操作就传送16Ms数据为了兼容性DMAC可以使用16Bits计数寄存器 

  3. EISA DMAC产生32Bits地址它可以访问整个系统4GByte物理地址空间所以不必像ISA那样必须放在第个16MByte空间 

  设备寄存器 

  EISA接口总线有32Bits地址空间设备专用寄存器可以占用系统4GB空间任何地方也可以使用卡上自带ROM地址 

  自动识别和自动配置 

  几个部分组成了EISA配置过程: 

  1. 每个EISA接口卡必须在0xnC80(n是EISA插槽代号从1到0xA)地址处设置个4-ID寄存器这个ID标识了EISA接口设备卡制造商设备类型版本号等 

  2. 设计者可以使用剩下124Butes(从0xn C84 到 0xn CFF)作为配置EISA接口卡寄存器可能有个保存DMA信道号码寄存器个保存中断请求号码寄存器存储数值在这些存储器和设置跳线与开关效果是等价 

  3. 使用个存储包含EISA接口卡资源列表使用配置寄存器地址脚本文件这个文件是用标准EISA脚本语言写成文件名是根据EISA接口卡ID号码设定这个文件通常来自EISA接口卡制造商提供软盘 

  4. EISA接口卡配置是在系统激活时运行这点使人迷惑不解扫描以前清空EISA接口卡插槽如果发现了它使用插槽ID寄存器构造个空EISA接口卡脚本文件然后请求制造商提供软盘旦软盘插入配置开始分配资源给EISA接口卡它也复制这些分配给与这个插槽相关联主板上非易失性CMOS存储器这样在以后系统激活时就不需要这张软盘了 

  WIN2000自动侦测多种EISA接口卡可以使用HAL提供HalGetBusData和HalSetBusData来直接访问EISA接口卡插槽 
PCI: 外设互联接口 

  高速网络快速移动视频图像24Bits像素显示器这些都需要高数据传输速度PCI总线尝试去满足人们这种对硬件有苛刻要求需要虽然它原始设计来自Intel它已经被分别被植入到DECAlpha 和MotorolaPowerPC系统中如图2.2所示 

  利用快速总线时钟(33MHz)和些技术使PCI构架可以传输32Bits数据速度达到132M/S传输64Bits数据速度可以再提高产生这个快速数据传输原因如下: 

  1. PCI协议假定每个数据传输都是个爆发操作结果高速设备将使用巨大吞吐量去传输大量数据 

  2. PCI支持加倍总线管理允许直接设备到设备数据传输(在存储器中无中间停顿)这样使I/O和CPU操作重迭 

  3. 个中央总线仲裁器通过对数据传输进行重迭仲裁减少了反应时间它允许当这个佣有者释放总线时候个佣有者马上开始操作 

  4. 个智能桥放置在主CPU和PCI总线之间作为数据缓冲区和读前面功能它减少了花费等待数据时间 

  PCI接口卡允许32个同时插在同条总线上个接口卡由8个独立功能部分组成在分离出个功能去发送消息个总线上可以同时有255个可设定地址功能而且如图2.2所示个系统可扩展到256个PCI总线 


图2.2 典型PCI总线系统 

  访问寄存器 

虽然使用32Bits地址但是I/O寄存器寻址空间在80X86平台上仍然是64K所以PCII/O寄存器和其它东西必须压缩到这64K而且在有EISA或者ISA总线系统上设计者仍然需要避免遗留EISA或者ISA设备使用这64K空间 

  除了I/O寄存器空间和存储器空间外PCI还定义了个配置空间配置空间将和自动配置起讨论 

  中断机制 

  PCI总线共有四个优先权相同中断线(INTA-INTD)这些中断线可以设定为低有效电平触发和可共享状态个单功能设备必须使用INTA多功能设备可以使用从INTA开始任意中断线限制是个功能只能连接个中断线 

  对于中断优先权PCI总线规范是没有设定但是它通过个外部控制器改变中断请求线给正确系统中断线例如: 计算器上转向控制器为了完成将PCI功能请求INTA-INTD转换到系统中断请求IRQ0-IRQ15其中之任何产生中断功能必须填写以下两个寄存器: 

  1. 中断引脚寄存器: 这个只读寄存器存储PCI中断线标识 

  2. 中断线寄存器: 这个可读可写寄存器存储中断优先权和中断向量在个人计算器中0x00- 0x0F与IRQ0 - IRQ15相对应 

  这是个非常灵活方案它不强加给系统设计者任何特殊策略这也使它很容易地支持其它处理器环境 

  DMA构架 

  PCI规范中没有定义副DMA使用PCI只使用主DMA或者过程控制I/O使用副DMA只是EISA桥 

  在固有DMA操作中参与者被称为代理者在任何传输中仅涉及两个代理者: 

  1. 发起者: 这是个总线管理者它有权使用总线将要建立个数据传输操作 

  2. 目标: 者是PCI总线当前被发起者寻址功能它有数据传输地址 

  所有总线管理者都可以是发起者所以可以在两个PCI之间直接传输数据而不经过主存储器这个强大数据传输能力使它可以应用在高速设备如网卡和视频适配卡 

  PCI规范中也没有定义仲裁PCI总线是否有权使用策略它只是定义了PCI总线仲裁信号时序而是由系统定义了确定下个有权使用PCI总线方法 

  设备缓冲区 

  PCI总线使用设备缓冲区可以使用32Bits寻址空间任何地方但必须在主CPU可以访问设备缓冲区之前激活某些PCI功能 

  PCI总线个有趣特性是个单功能可以在ROM中有多个映像个对应不同CPU平台这个特性给制造商为不同平台设计产品PCI规范为ROM块定义了个标准头格式这样可以加载ROM中适当部分到主存储器中执行 

  自动配置 

  PCI规范中定义了PCI接口个功能必须有自己256个用来配置PCI接口存储地址 

  第个64Bits是头它有个固定结构剩下192Bits留给PCI接口卡设计者系统可以使用头去唯标识个PCI接口功能和给它分配资源内容包括: 

  1. 制造厂商设备类型版本号码等信息 

  2. 对标准命令和状态寄存器纪录启用各种功能和提供信息 

  3. 个功能使用缓冲区和I/O寄存器空间请求资源列表 

  4. 个中断引脚和个中断线寄存器 
 
  5. 个指向PCI设备ROM指针 

  在每个功能有256Bits情况下PCI系统配置空间可以很容易变得很大可能会超过64K(80X86)虽然可以选择是否映 射它们到主存储器但是它们会占用大量空间为了解决这个问题PCI功能访问配置数据使用了两个寄存器: 

  1. 配置地址寄存器: 它标识了总线号码设备功能配置空间地址 

  2. 配置数据寄存器: 它作为CPU和配置空间数据缓冲区在设置了配置地址寄存器之后通过读写配置数据寄存器来读写配置空间 

  幸运WIN2000提供了HAL去简单访问配置数据HalGetBusDataHalSetBusData 和HalAssignSlotResources分别去得到设置配置和给PCI设备分配资源USB: 通用串行总线 

  各大公司联合发行了通用串行总线协议使用它来为数字图像计算器通话多媒体游戏等这些设备提供个低价中等速度总线现在USB接口版本号码是1.1支持这个协议公司数量持续增加个更高速度USB接口版本2已经提出 

  USB接口最高速度是12MBit/S低速USB接口数据传输速度是1.5MBit/SUSB版本2允许数据传输速率是480Mbit/S数据串行通过两条数据线另外两条是提供给USB设备电源线 

  USB接口速度是ISA接口1/5但是没有必须主板插槽限制设备可以连接到远于5M距离可以使用USB集线器在条USB总线上扩展多个USB设备当然这时联机距离可以再增加条USB总线扩展5个USB集线器联机距离可以达到30M典型联机如图2.3所示 


图2.3 USB接口拓扑实例 

  寄存器访问 

  设备寄存器需要使用特殊USB命令来访问这些命令是些从8-bit到64-bit数据流用来配置电源控制和接收少量设备数据个计算器上最多可以扩展127个USB设备添加设备时候系统动态分配给它个与总线相关联地址命令数据数量和意义由USB设备指定数据块传输是利用同步机制贞扩展到1023Bytes数据贞占用固定1mS时间间隔 

  中断机制 

  USB没有真正中断主机USB接口给设备注册个固定时间间隔它指是传输多长时间中断通常是16到32mS注册码长度可以达到64Bytes 

  从设备角度去看USB中断和DMA能力是被有USB接口主机定义着相当大成就被放到主机USB接口协议上: 开放主机控制接口(OpenHCI)和通用主机控制接口(UHCI)主控制器提供个传统中断和DMA传输结构 

  DMA能力 

  USB设备不能直接访问系统存储器它们被主机USB接口隔离USB不支持DMA然而主机USB接口为每个USB设备提供个虚拟DMA当主机USB接口从USB设备接收到数据时候它使用DMA将数据收到数据传送到系统内存这样主机USB接口就提供了DMA能力 

  自动侦测与自动配置 

  USB接口直接支持即插即用每个USB设备被赋上USB接口或者USB集线器信号插入时候报告制造商ID和设备描述符WIN2000侦测它们存在位置然后安装个合适驱动 
IEEE 1394:火线总线 

  被苹果计算器公司首先提出和应用后来电气和电子工程师协会(IEEE)定义了个高速对等串行接口来提供给较低速度USB传输但是它最后被证明是不适当IEEE1394接口(IEEE1394a)支持三种速度数据传输100200和400 Mbites/secIEEE1394b支持更高速度甚至在最低速度(10 MBytes/sec)下速度还是比原始ISA要快 

  1394火线标签上仍然有个苹果公司商标1394这个术语被用来描述计算器硬件总线Sony和其它公司使用 "i.LinkTM" 来描述1394软件 

  每个1394设备可以使用长达4.5米4芯或者6芯电缆连接到主机使用菊花链方式可以连接63个1394设备最长达到72米1394桥接器可以连接62个附加设备这样1024个1394总线可以连接到可以连接到1394设备理论数量是64K个设备连接上时候主机将分配给它个16BitsID号码 

  6芯电缆里有两对螺旋形独立数据传输线另外对是电源线整个电缆是被套上外壳保护起来两头各连接个任天堂连接器 

  1394接口典型使用是在数字照相机它需要巨大代宽来传输大量数据到主机去完成编辑工作有这样数据传输速度设备都有这样接口 

  访问寄存器 

  IEEE1394接口标准与IEEE1212接口标准有控制状态寄存器(CSR)CSR标准定义了个固定64Bits空间其中有10Bits总线号码6Bits节点ID剩下左侧48Bits给设备使用虽然这是给IEEE1212接口定义规格但是256 TBytes地址范围足够满足任何场合需要 

  中断机制 

  像USB接口IEEE1394模仿设备中断设备必须发送个数据报去宣布它状态或者主机请求设备状态情况下1394设备驱动必须对这些数据做出反应将它们放置到系统存储器空间 

  1394家族有个开放主机控制器接口(OHCI)OHCI规范对于驱动程驱设计者是个重要标准它为1394接口提供个传统中断和DMA构架1394同业工会提供个方便联结到OHCI规格和其它相关信息: http://www.1394.ta.org 

  DMA构架 

  主机接口适配器使用DMA来传输数据和命令到或者从系统存储器1394设备不能直接访问系统存储器OHCI提供个地址范围这个地址范围里数据被主机软件或者DMAC直接发送到系统内存这样来实现虚拟DMA功能 

  自动侦测与自动配置 

  1394接口直接支持即插即用每个被插到插槽设备被附上总线信号在1394总线复位时候主机发现它然后罗举设备ROM 

  计算器卡总线 

  大概十年前好几个公司联合为可移动设备开发了个标准总线构架起初是存储卡后来这个团队成为了个人计算器存储卡国际协会(PCMCIA)今天300多家公司都是PCMCIA会员 

  原始PC卡标准定义了有68个脚接口定义速度与ISA接口相当可移动设备尺寸和电力资源是缺乏所以设计强调是尺寸和功率而不是速度 

  术语PCMCIA卡可交替和PC卡使用这是术语学制造混乱PCMCIA是个组织而PC卡是种接口今天PCMCIA至少定义了三种接口: PC CardDMA和CardBus 

  原始PC卡时钟于ISA卡相同是8MHz允许8Bits或者16Bits设备因而16Bits卡最大数据传输速度是16 MBytes/secCardBus允许32Bits设备时钟于PCI卡相同是33MHz所以它最大数据传输速度是128MBytes/sec 

  访问寄存器 

  PC卡标准为它I/O访问定义了26Bits地址范围(64M)其寻址与ISA接口相似CardBus定义了32Bits地址范围和PCI卡 

  DMA构架 

  PC卡标准不允许DMA访问1995年发布了个新标准扩展了DMA功能像ISA卡DMA标准允许传输8Bits或者16Bits数据假定设备在副DMAC在主DMAC设备执行方式式不同 

  CardBus卡标准允许DMA方式像PCI卡传输16Bits或者32Bits数据在33MHz时钟频率下 

  自动侦测与自动配置 

  PC卡完全支持即插即用支持热拔插和自动配置PC卡和CardBus卡标准软件分为两层: 插槽服务和卡服务插槽服务是基本输入输出水平软件它在系统中管理个或者多个插槽它负责侦测和报告设备是否插入或者移除卡服务管理卡硬件资源 

  准备设计驱动 

  为新硬件设计个驱动可能是个挑战驱动工程师遵循个与普通软件工程师不同设计方法论以下提示对设计个驱动是有帮助 
学习硬件 

  在开始个新驱动之前学习尽可能多这个硬件设备知识大部分需要信息都在硬件提供文件中至少要确定以下信息: 

  1. 总线结构 

  2. 控制寄存器 
 
  3. 和状态汇报 

  4. 中断行为 

  5. 数据传输机制 

  6. 设备存储器 

  总线结构 

  总线结构对设计驱动有巨大影响自动识别和自动配置信息必须清楚WIN2000希望新设备分享即插即用机制 

  控制寄存器 

  必须知道设备寄存器尺寸和地址规划每个控制状态数据寄存器内容必须被完整描写特殊行为也必须描述出来如: 

  1. 些寄存器可能只读或者只写 

  2. 个单寄存器在读时候和写时候执行功能不同 

  3. 在发出个命令再间隔定时间之后这个数据或者状态寄存器数据才有效 

  4. 寄存器访问需要特殊顺序 

  和状态汇报 

确定设备使用汇报硬件和设备状态任何协议 

  中断行为 

  正确找出硬件在什幺情况下产生中断以及是否设备使用多于中断向量如果它是个多设备控制器中断可能来自控制器它自己这时必须有个机制标识出那个真正产生中断设备 

  数据传输机制 

  过程控制I/O与DMA设备是完全不同些设备可以执行这两种I/O在设计使用DMA传输数据设备时确定DMA机制是使用DMAC主还是副是否有缓冲区地址范围限制 

  设备存储器 

  如果设备使用专用存储器确定怎样去访问它它可能被映 射到固定主存储器地址或者它是个必须被寄存器请纪录下来它映 射地址 

  使用硬件智能 

  些外设包含有自己处理器它们执行诊断和控制功能这些处理器可能在设备固件(ROM)下运行或者在时候下载过程控制之下 

  我们可以充分利用设备智能利用硬件功能可以提高驱动执行和诊断能力 

  测试硬件 
  
  硬件应该在早期进形测试除了有机会发现硬件之外也提供个发现设备动作过程 

  1. 基本测试: 确定所有联机都已经正确连接后打开开关装入执行确定所有资源不冲突 

  2. 分别测试: 如果可能为所有硬件和固件编写单独测试这些常常是些没有在操作系统帮助下运行幸运硬件设备制造商会提供些测试 

  最后记得去测试设备侦测和汇报能力 

  小结 

  本章粗略介绍了硬件问题个驱动需要发现它控制设备确定需要请求资源后来章节将介绍WIN2000使这些变容易服务 

1

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: