总线驱动

2024-08-13

总线驱动(精选7篇)

总线驱动 篇1

0 引言

工业总线中高频传输时,导线内部的电感和电容会受到高频的影响,而不是一般意义上的纯阻性导线。因此,在高频条件下导线对电路结构产生影响。Intord总线采用10m长双绞线为信号传输线路,该总线系统的终端负载数量为120。在系统开发中,需要建模型判断120负载接入后总线的驱动能力是否满足要求,从而保证信号可靠的传输。国内目前在总线设计方面的研究相对较少,缺少在总线负载方面的建模研究。在传输线方面对双绞线有很多理论的建模分析,但主要都是集中在信道模型上,而缺少针对驱动能力的建模分析。本文将基于传输线理论,分析双绞线的性质,抓住影响驱动能力的关键因素,对目前正在研发阶段的Intord总线系统建立电路模型,并用simulink仿真该电路模型,检验introd总线的驱动能力,并为后续研发工作提供理论指导。

在双绞线上对系统负载能力产生影响的因素主要有电感、电容和直接电阻。双绞线建模的任务就是明确在系统中所使用的双绞线电感、电容和直接电阻沿长度方向是如何分布的。确定各参数的分布规律后,再进一步计算出具体数值,建立系统的电路模型。下面就分析确定双绞线的传输模型。

1 传输线模型分析

在电路分析中,由两个具有一定长度的导体组成回路的连接线,就可称之为传输线。由于传输线的一个基本特征是信号在其上的传输需要时间,因而人们也常常将传输线称之为延迟线。

在一般的电路分析中,所涉及的网络都是集总参数系统的,即电路上的所有参数,如阻抗、容抗、感抗等,都集中于空间的各个点上,各个元件,各点之间的信号是瞬间传递的。集总参数系统是一种理想化的模型。而实际的情况则是各种参数分布于电路所在空间的各处,当这种分散性造成的信号延迟时间与信号本身的变化时间相比已不能忽略的时侯,就不能再用理想化的模型来描述网络。这时,信号是以电磁波的速度在信号通道上传输,信号通道是带有电阻、电容、电感的复杂网络,各种电路参数是在空间分布的。在一个较大的电路系统中,信号在线路上传播的时间不能忽略,信号脉冲在传播过程中被分散在传输线上,线路上各点的电势是不稳定的,这种电路就称为分布式系统;而相反,如果电路系统很小,使得走线的距离很短,输入信号在极短的时间内就可以到达接收端,这样传输线上的每一点电势基本上可以看成是均衡的,这样的系统称为集总电路。一般的划分标准是将传输线的延时Tp与信号上升时间Tr进行比较,当TpTr/4时,就可以认为该电路是集总电路。

Intord总线体系中的信号周期为1000ns,Tr=100ns。在铜导线中电磁波的传播速度Vt=2/3×C=2×108m/s。设双绞线长度为X,TpTr/4=>X/2×108≤100×10-9/4=>X≤5m即该信号在双绞线中传输时长线与短线的区分点是5米。长度超过5m时,需要按照分布式模型以5m为最小长度,分段建立集总模型,由多个集总模型最后组成所需要的分布式模型。Intord总线系统总线长度10m,按分布式模型建模。

2 双绞线特征参数计算

特征阻抗是在高频、超高频范围内的概念,它不是直流电阻。在信号的传输过程中,在信号沿到达的地方,信号线和参考平面(电源平面或地平面)之间由于电场的建立,就会产生一个瞬间的电流,如果传输线是各向同性的,那么只要信号在传输就会始终存在一个电流I,而如果信号的输出电平为V,则在信号传输过程中,传输线就会等效成一个电阻,大小为V/I,把这个等效的电阻称为传输线的特征阻抗Z0。

电缆的特性阻抗是电缆中传送波的电场强度和磁场强度之比。特性阻抗一般写作Z0。由下面的公式定义Z0=E/I。电压和电流是由电缆中的感抗和容抗共同决定的。特性阻抗公式可以被写成后面这个形式:Ζ0=(R+j*2ππfL)/(+j*2ππfc)。当频率提高到一定程度(高频通常用100kHz以上的频率传输),公式中包含f的两项变的很大,这时候RG可以被忽略。等式成为:Ζ0=(j*2πfL)/(j*2πfc)简化成Ζ0=L/C

特性阻抗是由导体的大小和导体间的间隔,以及导体之间使用的绝缘体决定的。Intord总线系统的传输线使用5类双绞线。5类双绞线的物理尺寸参数:d=0.0201in,s=0.0362in Er(电介常数)=2.3。根据双绞线的电感、电容计算公式H/in=10.16×10-9ln(2s/d)H/in;C=[0.7065×10-12ln(2s/d)]ErF/in,计算得到5类双绞线的电感L=13.020nH/in,C=1.268pF/in,Z0=101Ω。5类双绞线20℃的恒定温度下的直流电阻为9.38/100m。

信号在传输的过程中,如果传输路径上的特征阻抗发生变化,信号就会在阻抗不连续的结点产生反射。如果电缆被和本身特性阻抗等值的电阻终止的话,所有馈入电缆的信号都被电缆和负载吸收了。如果阻抗不匹配的话,电缆中的部分电磁波会从电缆失配处反射,当这些反射波碰撞到信号发生器(源端)的时候,它们再次反射并和正在发射的正常信号混合,很难区分出哪些是原始信号,哪些是再次反射波。同样地在将信号脉冲送出电缆时也是如此,当遇到和本电缆特性阻抗不匹配的阻抗时,部分能量被反射回源端。如果信号脉冲到达了电缆的开路或短路端,所有的能量都被反射回去。如果是其他不匹配的终止情况,则有部分能量会反射。反射能量会使信号失真,而且如果信号发生器的阻抗和电缆的阻抗不同的话,能量会被再次反射向电缆终端,形成多余的脉冲信号。

双绞线在长线模型下,由于特征阻抗的影响必须要考虑阻抗匹配,否则会引起信号失真。驱动电缆电源的输出阻抗,必须和电缆的特性阻抗相等,这样才能使所有输出的功率进入传输电缆,避免从电缆的输入端反射回源端。其次,应该使电缆输出端负荷设备的输入阻抗和电缆的特性阻抗相同,这样所有功率进入了负载设备,而不会被负载反射回电缆。Intord系统建模时参考计算得到的特征阻抗Z0=101Ω,在输出端和负载端分别接入101Ω的匹配电阻,输出端串联接入,负载端并联接入。

3 总线系统模型建立

Intord总线系统导线长度10m,因此传输模型属于长线传输线。Matlab的simulink仿真工具有非常好的仿真性能,可以使用SimPowerSystem中的库元件建立Intord总线系统的电路仿真模型,并通过输出波型分析总线系统的驱动能力。在建模过程中由于10m双绞线的直流电阻只有0.98Ω,与负载与输出端相比可以忽略,不会影响系统负载能力的分析。10m长的Intord系统可能分解为两个5m长的集总模型。5m长双绞线分布电感与电容分别为L=2.563μH,C=249.6pF。在模型电路中,L=L1=2.573μH,C=C1=249.6pF,匹配电阻为101Ω,终端负载在建模时采用50kΩ, 50pF。Intord总线系统电路模型如图2所示。

单一负载接入时,输入1MHz的方波脉冲,通过观察输出端的波形信号,判断驱动能力的好坏。在仿真过程中如去掉输出端及负载端的匹配电阻,发现仿真波形严重失真。接入匹配电阻后,波形有显著的改善。

完整的Intord总线系统负载端将会并联接入120个负载节点,但在开发阶段的实际演示系统中,终端负载都是使用开发板与总线系统直接接入,因此在演示阶段接入120块开发板显然是不现实的。因此,总线系统对120个负载的驱动能力的验证需要通过建模来仿真分析。另一方面,由于终端负载也是Intord总线系统的一部分,处于研发阶段,通过系统级建模分析可以帮助确定终端负载的电阻、电容特征参数,从而满足系统整体的设计要求。

在单负载建模时使用的负载参数是50kΩ, 50pF。120个负载接入系统时,相当于120个50kΩ,50pF的负载并联,这个并联的负载系统等效于一个电阻为416Ω、电容为6nF的单负载。通过该模型简化可以建立120个负载的模型,并通过输入1MHz的方波观察波型是否满足要求。

通过建模仿真后的波形观察,当负载端接入120个节点后,由于负载电容显著增加,引起波型严重的畸变,输入端的方波在接收端已经变为三角波,这主要是由于大电容的充放电延迟所引起的。

因此,如果终端负载电容设计为50pF,则总线系统无法驱动120个节点。因此,需要改变节点的电容。通过仿真电路调试分析,当负载总电容为1.2nF时,波形如图3所示。此时的波形是可以接受的,因此在节点设计过程中需要将负载电容调整到10pF。

4 结束语

传输线理论应用于特定长度双绞线传输系统,分析双绞线的电气特性,筛选出对负载能力有主要影响的因素,确定传输系统模型是本文的主要内容。在理论建模的基础上,应用simulink仿真总线系统,验证系统驱动能力。在验证过程中得到的结论是系统无法驱动50pF的负载电容,需要将负载电容调整到10pF。

本文的建模分析工作是传输线理论与simulink仿真技术相结合的产物。随着国内创新意识增强和发展,这种传统理论与现代仿真技术相结合建模方法将会得到更为广泛地应用在产品研发和技术创新领域。

参考文献

[1]Howard Johnson,Martin Graham.高速数字设计[M].北京:电子工业出版社,2007.

[2]洪乃刚.电力电子和电力拖动matlab仿真[M].北京:机械工业出版社,2006.

[3]薛定宇,陈阳泉.基于MATLAB/Simulink的系统仿真技术与应用[M].北京:清华大学出版社,2002.

基于总线法驱动MAX197 篇2

MAX197的采样精度和其时序密切相关, 普通的基于位操作的驱动方式, 指令周期的时间远大于MAX197时序要求的最大时间, 这样使MAX197的精度大为降低, 在精度要求较高的场合达不到测试要求, 解决方法通常是将CPU换为arm, DSP或FPGA, 这样不仅增加了成本, 而且提高了设计难度[2]。而基于总线法驱动MAX197, 可以在CPU为单片机的条件下, 使MAX197的精度大幅度提升。

1 位操作

对MAX197的位操作方式, 是根据电路图中, MAX197与单片机的连接, 对单片机所用到的管脚进行操作。电路图如图1所示。

在图1中, D0至D7为单片机的P0口, 在位操作中, 根据MAX197芯片手册所提供的时序图[3], 部分程序如下:

在此程序中, 由于单片机的指令周期过长, 在这里使用“_nop_ () ;”, 但即使是“_nop_ () ;”相当于一个机器周期的延时, 在单片机晶振为11.059 2 MHz的条件下, 机器周期的延时也要大于MAX197时序的最大时间[4]。所以通过WR和RD, 虽然可以驱动MAX197, 但是所采集的数据精度大为降低, 远不能满足高精度的电子测试场合。

2 总线操作

在单片机中, P2口和P0口不仅可以作为I0口使用, 也可以作为总线使用。在图1中, P2口用做地址总线, P0口用做数据总线, 根据MAX197的芯片手册, CS端口为低电平, HBEN=1时, 读取高四位;HBEN=0时, 读取低8位, 所以当HBEN=1时, 其绝对地址为0x7000, 当HBEN=0时, 其绝对地址为0x3000。再设置其量程为±5 V, 时钟模式为内部时钟方式, 采集模式为内部自动转换模式, 所用采集通道为1通道, 则采集程序可简化为

这是因为例如“define Y1 XBYTE[0x7000]Y1=0x48;”相当于

当执行指令MOVX@DPTR, A时, 这是51单片机写, 对应的WR为0;当执行指令MOVX A, @DPTR时, 这是51单片机读, 对应的RD为0;这两个0状态, 都是瞬间出现, 不超过一个机器周期, 马上恢复为1, 控制时序的WR和RD反应所需时间要比位操作短的多[5]。

3 采集实验结果

将FLUKE六位半数字万用表采集的数据作为标准, CPU为单片机的条件下, 分别使用位操作法和总线操作法驱动MAX197, 对同一信号进行采集进行对比。信号分别是频率为50 Hz 0.5 Hz, 有效值为2 V的交流电和3 V的直流电, 每种方法分别测试3次, 交流信号测试结果如表1所示, 直流信号测试结果如表2所示。

4 结论

位操作法在测量交流信号时, 误差不超过100 m V, 在测量直流信号时, 误差不超过50 m V, 可以满足一些测试精度不高的测试要求;总线操作法测量交流信号时, 误差不超过10 m V, 测量直流信号时, 误差不超过5 m V, 精度远大于位操作法, 在CPU为单片机的前提下, 可以满足测试精度比较高的测试要求。

参考文献

[1]朱一纶.高速A/D转换芯片MAX197及其在微机系统中的应用[J].金陵职业大学学报, 2000, 15 (1) :16-18.

[2]颜廷秦.12位MAX197和51单片机实现数据采集设计[J].能源技术与管理, 2006, 3:75-77.

[3]Maxim.MAX197数据手册[OL].http//wenku.baidu.com, 百度文库, 2010-03-30.

[4]郭天祥.51单片机C语言教程—入门、提高、开发、扩展全攻略[M].北京:电子工业出版社, 2008.

总线驱动 篇3

随着工业自动化制造装备数字化和网络化的发展, 现场总线技术以其高度的开放互联性、简化的分布控制性和可靠的环境兼容性等技术优点, 得到了装备制造商的广泛接受。目前很多旧数控机床经常因为数控系统老化故障或者与新的控制系统的总线接口不兼容导致性能下降、生产效率降低。因此必须对机床进行数字化改造。然而机床的模拟伺服驱动装置、伺服电机和主轴电机以及机床的机械结构均性能良好。为了充分利用现有的设备资源, 节约改造的成本, 就必须设计一个现场总线信号与传统模拟信号的转换接口模块。

本设计结合旧数控铣床的实际改造项目, 开发了一种基于SERCOS总线的模拟驱动接口模块, 该模块可以接收力士乐数控系统Indra Motion MTX发出的SERCOS总线数字指令信号, 并转换成±10V的标准模拟量控制信号, 用来控制西门子611A模拟伺服驱动器, 该模块对SERCOS现场总线在工业现场的推广应用具有重要意义。

1 SERCOS总线简介

SERCOS (Serial Real-time Communication Specification) 总线常用于工业控制系统中连接上位控制单元和伺服驱动单元进行实时数据通信, 该总线协议详细的定义了物理层的拓扑结构、收发线路和NRZI编码格式以及数据链路层的数据帧结构等内容, 使用户能方便的操作控制系统、伺服驱动器和可编程控制器等自动化机械装备。因此在数控机床和各种数控机械设备中获得了广泛的应用。SERCOS总线的传输介质采用双向光纤, 通讯速率高, 实时性强, 因而特别适合于多轴同步运动控制。和其他总线相比, SERCOS总线具有以下优势:

1) 数据传输性能高, 其有效数据的传输效率可与100M以太网相媲美;

2) 采用光纤连接, 消除了电磁干扰, 传输距离远;

3) 具有很高的同步精度;

4) 可自行诊断故障信息, 方便用户安装和维修。

2 硬件设计

2.1 硬件系统总体设计

本文设计的模拟驱动接口模块采用SERCON816芯片作为SERCOS总线接口控制器, 实现SERCOS总线接口的物理层和数据链路层等底层通信协议。采用TLV5614芯片作为数模转换器, 实现数控系统控制指令到机床各轴伺服驱动装置模拟量控制信号的转换。采用TMS320F28335芯片作为微处理器, 对S E R C O N 8 1 6 芯片和TLV5614芯片进行数据读写和控制。硬件系统总体框图如图1所示。

2.2 SERCOS总线接口电路设计

S E R C O N 8 1 6 总线接口控制器是继SERCON410B之后的新一代SERCOS接口控制芯片, 由于采用了新的制造工艺, 其实时通信速率大幅提高至16Mbps。本文采用16位数据总线接口与TMS320F28335连接, 地址总线采用12位, 可寻址芯片内部2K×16位的双口RAM。同时将六路TXD信号并联, 以提供最大的输出功率适应各种材质、长度的光纤。

TMS320F28335接收来自SERCON816的中断信号, 并通过地址总线、译码控制电路和数据总线对其进行控制。由于SERC0N816电源电压为5V而TMS320F28335的总线电压为3.3V供电, 所以采用74LVC164245和74LV245芯片实现总线隔离、驱动和电平转换。本文将双口RAM映射到TMS320F28335存储空间的0x82000~0x82fff地址, 将128字的控制寄存器映射到TMS320F28335存储空间的0x83000~0x8307F地址。

2.3 D/A电路设计

由于原来的数控铣床需要控制X、Y、Z三个进给轴和一个主轴, 因此选用4通道的TLV5614芯片作为数模转换器。该芯片转换时间为3µs~9µs, 分辨率可达12位, 可通过标准的四线SPI串行接口与TMS320F28335通讯。芯片采用数字电源和模拟电源两组相互独立的电源供电, 输出为轨到轨输出的电压信号, 其输出电压幅值由公式 (1) 给出:

其中, VR E F是参考基准电压, C O D E是在0~4095范围内的12位DAC输入值。

本文采用参考基准电压2.5V、电源5V, 由公式1可得DAC的输出电压为0~5V。由于模拟伺服驱动装置的控制电压为-10V~+10V, 因此还要通过调理电路对输出电压进行偏置放大以达到输出双极性信号的要求。最终共输出4路模拟信号用于驱动X、Y、Z三个进给轴和一个主轴。

3 软件设计

3.1 总体框图

本文设计的模拟驱动接口模块软件部分主要包括:TMS320F28335初始化模块、SERCOS初始化模块、非周期性数据传输模块、周期性数据传输模块、DAC处理模块等。TMS320F28335初始化模块主要完成TMS320F28335芯片的系统配置以及外设、中断向量等的初始化设置;SERCOS初始化模块主要完成SERCON816芯片的内存初始设置和通讯初始化;非周期性数据传输模块主要是响应来自数控系统的数据读/写请求, 打开服务通道, 完成控制参数和过程命令的非周期性传输;周期性数据传输模块在定时中断中完成, 用于读取周期指令值和写入周期反馈值;DAC处理模块主要通过TMS320F28335与TLV5614的SPI通讯, 完成周期指令值的输出。主程序流程如图4所示。

3.2 SERCOS初始化模块

要建立数控系统和模拟驱动接口模块之间的通讯链路, 必须正确初始化S E R C O N 8 1 6 芯片。 主要包括控制寄存器初始化、 双口R A M初始化和通讯初始化。本接口模块中主要系统参数配置为:使用服务通道1、工作时钟频率 (16MHz) , 数据传输率 (2Mbps) , 阶段0~阶段2的通讯周期 (1000μs) , 阶段3~阶段4的通讯周期 (8000μs) 。在阶段0~阶段2, 输出信号CON_CLK在每个通讯周期开始后 (MST之后) 的200μs~490μs时间段内变为高电平;在阶段3~阶段4, 输出信号CON_CLK在每个通讯周期开始后 (MST之后) 的1000μs~2500μs时间段内变为高电平。SERCON816初始化程序的流程如图5所示。

3.3 DAC处理模块

TLV5614的通过编程16位的寄存器对芯片进行控制, 其中第15位和第14位用于选择DAC的4个通道, 第13位为转换模式位, 第12位为状态位, 第11位到第0位为12位的DAC输入值。对于每一次完整的DA数据传输, 首先将片选信号CS从高电平变为低电平, 然后将帧同步信号FS从高电平变为低电平开始传输数据, 接着串行时钟信号SCLK每产生一个下降沿就从数据输入信号DIN传输一位数据直至连续传输完16位数据, 最后将帧同步信号FS变为高电平, 芯片将16位数据锁存后进行DA转换并输出。其控制时序如图6所示。

4 结束语

应用本设计的模拟驱动接口模块和Indra Motion MTX数控系统对旧数控铣床改造后, 机床的各项性能指标均有大幅提升, 数字化功能更加完善, 可以方便地与工厂的网络管理系统进行互联, 实现了高质高效的生产加工。同时本文为模拟伺服驱动的老旧设备改造提供了一种新思路。如印刷纺织等行业中的无轴传动和多轴同步控制设备, 只需更换新的运动控制系统和模拟接口模块即可直接驱动原来的模拟伺服驱动器和设备机械, 因此具有非常高的应用推广价值。

摘要:SERCOS总线是一种广泛应用于数控机械装备的现场总线, 选用SERCON816总线接口控制器、TLV5614数模转换器及TMS320F28335控制器, 通过合理设计其接口电路并进行初始化设置和程序编写, 实现了SERCOS现场总线信号与传统模拟信号的高速转换并在旧铣床数控改造中成功应用。为相关行业模拟伺服驱动的老旧设备改造提供了一种新思路。

关键词:SERCOS总线,模拟驱动,机床改造

参考文献

[1]李敏, 沈晶巍, 刘通.ADI4在旧数控机床改造中的匹配功能应用[J].制造技术与机床, 2009 (12) :125-127.

[2]刘清.基于CAN总线的模拟量输出从站的设计[J].自动化仪表, 2004, 25 (7) :19-21.

[3]冯晓东, 汤同奎, 邵惠鹤.隔离多通道LONWORKS模拟量输出节点的设计[J].化工自动化及仪表, 2000, 27 (5) :30-32.

[4]郇极, 尹旭峰.数字伺服通讯协议SERCOS驱动程序设计及应用[M].北京:北京航空航天大学出版社, 2005.

[5]彭学文, 朱志红, 贾正春.伺服驱动单元SERCOS总线接口的设计与实现[J].自动化与仪表, 2001, 16 (5) :64-66.

[6]王水迎, 王建武.基于TMS320F2812的SERCOS总线从站接口卡的设计[J].制造业自动化, 2007, 29 (5) :94-96.

[7]张德红, 门延会, 毛羽.SIEMENS840D系统在GS30型数控机床改造中的应用[J].2011 (2) :56-58.

[8]权宁辉, 高军礼, 宋海涛.基于SERCOS总线的高速数字通信接口软件设计[J].机床与液压, 2011, 39 (11) :78-80.

[9]徐跃, 王太勇, 赵艳菊, 董靖川.基于总线和网络技术的开放式可监控数控系统[J].农业机械学报, 2008, 39 (10) :178-182.

总线驱动 篇4

VME总线是一种通用的计算机总线,它结合了Motorola公司Versa总线的电气标准和在欧洲建立的Eurocard标准的机械形状因子,是一种开放式架构,因其高可靠性、较小的机械尺寸和较高的数据传输带宽而成为实时信号处理系统的常用选择,被广泛应用于工业控制、军用系统、航空航天、交通运输和医疗等领域。

本文探讨了在VxWorks实时操作系统下VME驱动的结构,通过对SBS提供的BSP包进行分析和修改,实现VME驱动的加载和运行。

1VxWorks下VME驱动的结构

VxWorks提供了通用VME总线的驱动程序,用户可使用该文件作为VME总线驱动的模板,也可在此基础上开发适合自身硬件特性的专用驱动。一般地,在系统启动阶段,当初始化VME设备时,首先查找系统中是否存在VME设备,若存在,则读取VME设备的基地址寄存器,确定其所需的空间类型和容量大小,按要求映射到系统的物理地址空间中去;然后将VME设备的各寄存器初始化成缺省值,禁止访问相关寄存器,清除所有的中断,初始化中断服务链表,将中断服务程序挂接到中断服务链中;最后开中断,使能VME WINDOW、总线管理、内存管理、IO周期等。

本实验中采用SBS VR9工业计算机,采用TUNDRA Universe VME总线与PCI总线的桥接芯片,SBS公司为其提供了专用的驱动程序Universe.c和universe.h,在该程序中提供了一系列与universe芯片相关的应用函数,包括universe芯片的复位、寄存器初始化、总线中断的禁止、使能、发起、应答等。本实验在universe芯片软件接口的基础上进行分析和修改,实现VxWorks操作系统下VME接口的驱动开发与应用。

2VxWorks下VME驱动的实现

VxWorks操作系统自带有多种平台下的BSP包。本实验采用的VR9主板配置了Intel Pentium M芯片,因此在pcPentium4 BSP(target/config/pcPentium4)基础上进行开发,包括以下三个步骤:

2.1定义VME的基本设置

Config.h文件是BSP中的重要文件,该文件中定义了特定主板上与硬件相关的组件和其参数,因此添加以下与vme总线相关的定义:

2.2定义VME的内存映射关系

Vxworks在上电过程中会对系统中各设备执行地址映射的操作,以便应用程序可以正确地访问各设备。在sysLib.c中有一张表sysPhysMemDesc描述了系统物理内存在逻辑内存中的空间分配情况,系统在引导的时候会根据这里的描述管理内存空间。Vme总线作为系统的设备之一同样需要进行逻辑空间分配,因此在表中加入以下地址空间分配定义:

在sysLib.c中还有一个sysHwInit函数,其作用是初始化所有的硬件设备,配置其所需的参数,需要在该函数中加入VME总线的设备配置函数vmeModulInit如图1所示。

2.3对VME进行初始化

除了在sysHwinit中完成对VME总线的设备配置之外,还需要在bootConfig.c中完成VME芯片的缺省初始化,包括芯片寄存器的初始值设置,中断使能禁止等,在go函数中加入缺省初始化的函数入口sysVmeDeinit即可:

经过以上修改,pcPentium4已能够支持VME总线设备,用户可在此基础上开发上层的应用程序,完成诸如加载基于VME总线的SHARC板、实现SHARC板与主板之间经VME总线的数据交换等功能。

3驱动调试与实验结果

本实验的硬件平台由工控机箱内的VR9主板和SHARC信号处理板组成,两者之间通过VME总线进行通信,由VR9主板向SHARC信号处理板发送处理指令、由SHARC信号处理板向VR9主板发送处理结果,如图 2所示。

实验中为SHARC信号处理板配置了累加器程序,加载实验程序后,从主控板控制台上打印出SHARC信号处理板的计算结果,说明VME驱动已正常工作。

4结语

本文主要介绍了VxWorks操作系统下VME总线驱动的分析和配置方法,重点说明了VME总线驱动配置的过程。实验证明VME总线驱动正常加载并运行;该驱动已在实际项目中得到应用。

摘要:介绍在VxWorks实时操作系统下VME(VersaModule Eurocard)总线驱动的结构与实现,重点说明BSP配置的全过程。实验中,在VR9主板上加载了VME驱动,实现了主控板和信号处理板通过VME总线的进行数据传输。

关键词:VxWorks,VME总线,板级支持包

参考文献

[1]叶凯,杨文淑,启亮.VxWorks下数据采集卡设备驱动程序开发[J].微计算机信息,2007,23(14):51-53.

[2]吴小华,姜维东,郑先成.基于VxWorks的A429-PC104板卡驱动程序的开发[J].计算机测量与控制,2008,16(6):877-880.

总线驱动 篇5

关键词:PCI,vxworks,驱动程序,运动控制卡

VxWorks是目前世界上用户数量最大的实时嵌入式操作系统,它具有高度可剪裁的微内核结构、高效的多任务调度、灵活的任务间通信手段、快速灵活的I/O系统、确定的微妙级中断延迟时间等优点。

本文介绍了基于PCI接口规范的通用运动控制卡在VxWorks下的驱动程序的设计。对其设计驱动程序需要对实时操作系统、实时软件设计、硬件设备有深入的了解。因此,该设计不仅本身具有很高的应用价值,也为实时驱动程序的设计提供了一个样例。

1 系统组成

在基于微机的数据采集、处理与控制系统中,计算机接口卡常常是其中的关键硬件设备。目前在运动控制领域,各类运动控制卡得到广泛运用,其中以工控机通过ISA或PCI等系统总线连接运动控制卡的主从式结构最为流行,由工控机发出控制指令和参数,控制卡根据接收到的指令及参数完成具体控制功能。由于PCI总线的高速和即插即用特性,使其取代ISA被广泛应用于高速数据采集与传输等系统中,有效地解决了实时采集、实时传输和实时存储等问题。

根据本课题任务及技术指标要求,板卡要具有多路能接受陀螺反馈数字信号的RS-232接口和RS-485接口,加速度模数转换通道及其他模拟量采集通道,多路控制方位、高度、旋像伺服系统的数模转换通道。板卡数字输入输出信号为标准的TTL电平,具有接受测角和姿态信号的多位并行接口,通用I/O接口,板卡能够与主控PC机进行数据交换,系统的功能框图和组成结构框图分别如图1和2所示。

2 PCI配置空间

PCI系统具有三种地址空间:存储器空间、I/O空间和配置空间。每个PCI设备都有64个配置双字用于实现配置寄存器,64个配置双字分为两部分,⑴PCI协议定义了开头16个双字的格式和用途,称为设备的配置头区域;⑵其它48个双字的用途是由设备指定的。目前PCI协议定义了两种头区域格式,第1类配置头区域用于定义PCI-PCI桥,而第0类配置头区域用于定义其它PCI设备。所有的PCI设备,包括PCI-PCI桥都必须实现下述配置寄存器:厂商标志、设备标志、命令、状态、分类码、版本标志和头区域类型寄存器。如表1所示为PCI配置寄存器。这些寄存器对编程访问PCI设备至关重要,我们就是利用vendor ID和device ID来枚举出对应的设备,再进一步获得设备的其他信息的。

3 驱动程序的开发

VxWorks提供在指定目标系统上运行的板级支持包(BSP),本文选用的是针对pentium的板级支持包。VxWorks是支持PCI总线的,提供了一些库函数专门用来访问PCI设备。为了调用这些函数以方便开发,需要包含如下头文件"iosLib.h"、"pciConfigLib.h"、"pciIntLib.h"、"sysLib.h"和"pciLocalBus.h",还需要导入sysOutLong()和sysInByte()等函数。在config.h里面定义INCLUDE_PCI以添加VxWorks对PCI的支持,还可以定义PCI_CFG_TYPE为PCI_CFG_FORCE、PCI_CFG_AUTO或PCI_CFG_NONE,我们一般定义为PCI_CFG_NONE,Vxworks只需把配置好的信息读出来就可以了。

针对PCI总线结构的数据采集模块,其驱动程序的主要开发步骤如下:确定设备的PCI配置信息→确定设备的内部存储器、寄存器基地址及中断号→设备初始化→中断服务程序→设备各功能函数。以下按照程序执行的顺序分步骤给出源代码,并加以详细的说明。

1)查找PCI设备

2)获得设备映射信息

根据设备的总线号busNo、设备号deviceNo、功能号funcNo,通过调用pciConfigInLong、pciConfigInByte获得设备映射的内存基地址memBase和I/O基地址ioBase以及中断号Irq,部分代码如下:

3)中断挂接

4)使能映射空间

4 结束语

利用上文所述的方法编写的驱动程序,达到了本项目所要求的性能指标,系统经过实际验证是高速稳定可靠的,而且由于PCI总线的即插即用特性,不需要用户去手动跳线,极大得方便了使用。

参考文献

[1]microsoft msdn[EB].2001.

[2]卞红雨,曹明明,桑恩方.VxWorks下PCI总线设备驱动程序设计[J].声学与电子工程,2005(2).

总线驱动 篇6

PCI总线是一种与CPU无关的32/64位地址数据复用总线, 工作频率为33 MHz/66 MHz, 它支持突发传输, 具有即插即用、电源管理等功能[1,2]。PCI总线以其优良性能和可适应性成为现代微机的主流总线[3]。在开发PCI设备的过程中, 需要为PCI设备写驱动程序。Windows驱动程序模型 (WDM) 是Microsoft公司力推的全新驱动程序模式, 它支持PnP、电源管理和WMI等技术[4,5]。在Windows操作平台上, WDM已成为主流的驱动模型[6]。这里主要介绍根据工程背景开发的基于PCI总线的实时测频卡的WDM驱动程序设计。

1 实时测频卡硬件系统结构

实时测频卡的主要功能是实时测定信号频率, 实时识别信号调制方式。系统的电路框图如图1所示。外部待测信号通过SMA接口进入实时测频卡的ADC。ADC输出的数字信号在FPGA中缓存后进入DSP。在DSP内对信号进行粗估, 然后通过EMIF接口把转化为频率和相位控制字的粗估结果发给DDC。DDC做出调整后, 通过FPGA把移频和降采样后的信号输入给DSP。DSP依据粗估结果和DDC的数据进行实时测频。测频完毕后, 通过PCI总线向PC机发出中断信号。PC机响应中断, 读取DSP内指定位置内存处的测频数据。为简化PCI接口电路设计, 选用带有PCI接口电路的DSP芯片TMS320C6416。

2 TMS320C6416的PCI接口介绍

实时测频卡通过TMS320C6416的PCI接口和主机进行通信。该接口符合PCI 2.2规范, 能提供33 MHz总线时钟, 32 b数据宽度, 可达到峰值132 MB/s的数据带宽。PCI接口包括配置寄存器、I/O寄存器和存储器映射寄存器[7]。图2给出了部分PCI配置寄存器。配置寄存器的主要功能如下[8]:

(1) 设备的识别、控制和状态指示。将供应商ID域、设备ID域、版本域、配置头类型域、分类代码域这五个域用于识别设备。所有的PCI设备必须设置这些域, 配置软件可利用它们来确定系统中可用的PCI总线设备。对于TMS320C6416芯片而言, 供应商ID为104CH;设备ID为A106H;其他三个域随不同的应用会有所改变。命令寄存器为发出和响应PCI总线命令提供粗略的控制。状态寄存器用于记录PCI总线有关操作的状态信息。

(2) 中断引脚寄存器的功能。01H~04H值对应于PCI中断请求引脚INTA #~INTD #。

(3) 基地址寄存器的功能。其功能是为PCI设备指定存储空间。PCI存储空间分为独立寻址的Memory空间和I/O空间两类。Memory空间适用于设备功能寄存器较多或数据流量较大的场合, I/O空间适用于设备功能寄存器较少或数据流量较小的场合。PCI接口拥有3个基地址寄存器BAR用于保存指向PCI存储空间的指针。图2为部分PCI配置寄存器。

① Base 0基地址寄存器 (BAR0) 。确定一个4 MB可预取的PC机内存地址空间。将DSP存储空间中不同的4 MB空间都映射到PC机内存相同的4 MB空间中。由DSP页寄存器 (DSPP) 设置该区域在DSP存储空间中的映射位置;用BAR0访问DSP内部的RAM和外挂的通过EMIFA和EMIFB访问的存储器空间。访问时每次最多只能读取DSP存储空间的4 MB内容, 并且需要定义DSPP寄存器, 以指定访问空间的起始地址。访问支持数据突发传输模式。这种映射方式只适用于DSP处于从模式。

② Base 1基地址寄存器 (BAR1) :确定一个8 MB不可预取的访问区间。对DSP芯片而言, 其访问地址固定在0180000H~0200000H的范围内。用BAR1来访问DSP内部所有的操作命令控制寄存器。

③ Base 2基地址寄存器 (BAR2) :定义一个16 B的PC机I/O空间, 用于访问PCI的I/O寄存器。BAR2加偏移00H, 访问主机状态寄存器HSR;BAR2加偏移04H, 访问主机对DSP控制寄存器HDCR;BAR2加偏移08H, 访问DSP页寄存器DSPP。

3 WDM概述

WDM (Windows Driver Model) 是一种遵循即插即用协议的内核模式驱动程序, 它是微软的全新驱动程序模式, 旨在通过提供一种灵活的方式来简化驱动程序的开发, 在实现对新硬件支持的基础上, 减少并降低必须开发的驱动程序数量和复杂性。在WDM中, 采用图3所示的分层驱动程序体系结构[6]。

在WDM模型中, 每个硬件设备至少有两个驱动程序:总线驱动程序和功能驱动程序。总线驱动程序由操作系统实现, 它在最底层直接与设备打交道, 负责管理硬件与计算机的连接;负责发现总线上所有的设备, 并检测设备何时添加到总线上或何时从总线上删除。设备功能驱动程序在上层通过与低层驱动程序打交道, 进行硬件操作, 以实现PCI设备的功能。中间还可以有类过滤驱动程序或设备过滤驱动程序用于修改和监视IRP (I/O请求包) , 实现数据的过滤或转换。一般在特殊的情况下才需要编写。在实际开发中, 只需要开发一个设备功能驱动程序即可。

WDM还引入了功能设备对象 (Functional Device Object, FDO) 与物理设备对象 (Physical Device Object, PDO) 来描述硬件。一个PDO对应一个真实的硬件, 一个硬件只允许有一个PDO, 却可以有多个FDO。在驱动程序中直接操作的不是硬件而是相应的PDO与FDO。当应用程序与WDM 驱动程序进行通信时, 系统为每一个用户请求打包, 形成一个I/O请求包 (IRP) 结构, 将其发送到驱动程序, 并通过识别IRP中的PDO来区别是发送给哪一个设备。IRP从驱动程序堆栈栈顶进入, 每层驱动再把I/O请求划分成更简单的请求, 以传给更下层的驱动执行, 最底层的驱动程序在收到IRP后, 通过硬件抽象层HAL与硬件发生作用, 从而完成I/O请求工作。内核通常通过发送IRP来运行驱动程序中的代码。

4 测频卡WDM驱动程序实现

在微软公司DDK工具的支持下, Compuware NuMega公司提供Driver Studio工具包中的DriverWorks将WDM驱动程序编写所需的对内核及对硬件的访问封装成类库, 加上驱动程序代码生成向导DriverWizard, 极大地简化了驱动程序的开发难度[9]。本文选择DriverWorks作为WDM驱动程序的开发工具。

测频卡驱动程序的主要功能是为用户读取所测信号的频率参数, 包括载频、调制方式、码元速率等。同时用户还能通过驱动程序发送命令对测频卡的工作方式进行控制。由此可知, 驱动程序要重点处理好硬件访问和中断处理工作。

4.1 I/O访问

类KIoRange封装了对I/O端口的操作。本卡中PCI配置寄存器中的Base 2基地址寄存器定义了I/O空间。在OnstartDevice例程中取得I/O资源, 并初始化, 其函数实现如下:

完成初始化后, 可以用成员函数inb, inw, ind从I/O端口读一个 (多个) 字节、字、双字的数据;outb, outw, outd向I/O端口写一个 (多个) 字节、字、双字的数据。

4.2 内存访问

在Windows系统中, 内存分为分页内存和非分页内存。在WDM驱动程序中, 对于硬件的内存映射一般需要用非分页内存。因为在一些较高级别的例程中, 使用分页内存会造成系统产生缺页中断, 从而引起死锁。使用非分页内存无需太多的转换, 非常安全, 效率也高。类KMemoryRange封装了对PCI设备映射内存的操作。类KMemoryRange成员函数的读/写操作同类KIoRange。由PCI配置寄存器中的Base 0和Base 1基地址寄存器分别定义了两个内存空间。在OnstartDevice例程中取得内存资源并初始化, 其函数实现如下:

4.3 中断处理

中断处理一般需要声明两种类实例:Klnterrupt和KDeferredCal1。Kinterrupt类用于实现硬件中断处理;KDeferredCall类用于实现延时过程调用。首先创建一个Klnterrupt类实例mIrq, 将此实例作为设备类的成员变量, 然后创建一个KDeferredCall类实例mDpcForIrq。mIrq对应的中断服务例程和mDpcForIrq对应的延时过程调用例程也需要在实例中声明。这两个实例mIrq和mDpcForIrq都是在OnstartDevice例程中初始化的, 代码如下:

中断服务例程的处理时间应尽量短, 对于一些耗时, 但不需要立即处理的任务, 中断服务程序会调用一个低于中断服务程序DIRQL级别的延迟过程调用程序DPC, 在DISPATCHLEVEL上完成处理, 这个级别上的限制较少, 函数调用也相对比较方便。在中断服务例程中, 首先判断中断是否是自己设备产生的, 若不是, 返回FALSE;若是, 进行必要的处理, 请求一个DPC (延时过程调用) , 然后返回TRUE。关键代码如下:

在延时过程调用例程DpcForIrq中, 读取所测信号的频率参数:

5 驱动程序与应用程序之间的通信

虽然驱动程序是为设备的硬件层编程服务的, 但同样需要提供和应用程序进行通信的能力, 从而最终达到应用程序控制设备的目的。应用程序与驱动程序之间的通信通过调用Win32 API来实现, 应用程序用Creatfile函数通过已经定义的设备接口来获取驱动程序文件句柄, 然后将文件句柄作为其他Win32 API函数的一个参数, 对驱动程序的进行数据操作。调用DeviceloControl进行数据量较小的, 如控制指令传输或端口、寄存器访问;调用ReadFile, WriteFile等函数进行数据量较大的传输, 如内存读/写等[10]。驱动程序与应用程序的通信有DeviceControl异步完成、共享Win32事件通知两种方式。Win32事件通知是由应用程序创建了一个事件后, 设置事件的状态为Unsignal, 然后直接将该事件句柄传递给驱动程序, 等待驱动程序发送事件通知。驱动程序通过类Kevent获取这个事件的一个对象指针后, 在IRQL≤DISPATCHLEVEL级别的例程中设置事件信号状态为Signal来通知应用程序进行后续处理[11]。

6 结 语

基于上述的硬件结构和驱动程序设计方法, 成功开发了一款实时测频卡, 在实际中得到了很好的应用, 板卡工作正常, 达到了预期效果。实践证明, DriverWorks是一款功能强大, 使用方便的驱动程序开发工具, 利用它可以方便快捷地构造PCI设备的驱动程序框架, 大大加快了开发周期, 提高了开发效率。

摘要:介绍实时测频卡的硬件结构及DSP芯片TMS320C6416中PCI接口部分的配置寄存器;简述WDM驱动程序的体系结构和基本原理。重点介绍采用Driver Works工具开发WDM驱动程序的方法;详细分析驱动程序设计过程中:I/O端口和内存的映射与访问, 中断处理, 以及驱动程序与应用程序之间的通信。实践证明, 采用自带PCI接口的DSP芯片可以简化设备PCI接口的软硬件复杂度, 降低开发成本, 同时与开发工具Driver Works相结合, 可以大大加快开发周期, 提高开发效率。

关键词:PCI,WDM,Driver Works,设备驱动程序,DSP

参考文献

[1]李贵山, 陈金鹏.PCI局部总线及其应用[M].西安:西安电子科技大学出版社, 2003.

[2]刘晖.PCI系统结构[M].4版.北京:电子工业出版社, 2001.

[3]尹勇, 李宇.PCI总线设备开发宝典[M].北京:北京航空航天大学出版社, 2005.

[4]Chris Cant.Windows WDM设备驱动程序开发指南[M].孙义, 马莉波, 国雪飞, 等译.北京:机械工业出版社, 2001.

[5]张惠娟, 周利华.Windows环境下的设备驱动程序设计[M].西安:西安电子科技大学出版社, 2002.

[6]武安河.Windows 2000/XP WDM设备驱动程序开发[M].2版.北京:电子工业出版社, 2005.

[7]李方慧, 王飞, 何佩琨.TMS320C6000系列DSPs原理及应用[M].2版.北京:电子工业出版社, 2003.

[8]Texas Instruments Inc.TMS320C6000 DSP Peripheral Com-ponent Interconnect (PCI) Reference Guide[Z].2007.

[9]Compuware Corporation.Using DriverWorks[Z].1998.

[10]魏先民.PCI总线高速数据采集卡及其驱动程序设计[J].微计算机信息, 2008, 24 (1) :85-86.

[11]孙健, 贾民平, 许飞云.基于PCI总线的数据采集卡WDM驱动程序开发[J].机电工程, 2007, 24 (12) :99-101.

总线驱动 篇7

海思半导体是目前国内通信、光器件等领域的芯片解决方案供应商。其针对在通信安防领域,已推出一系列化的监控芯片及解决方案,如本文中所采用的Hisi3531芯片。而该芯片与其他从设备的通信都是通过I2C串行总线接口实现。该总线(Inter-Integrated Circuit)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。由于其具有接口线少,控制方式简单,通信速率较高等优点,成为近年来在微电子通信控制领域广泛采用的一种新型总线标准。本文就是基于Hisi3531平台对I2C总线的驱动进行研究并且实现应用。

1I2C总线硬件的构成

物理结构上,I2c总线系统由一条串行数据线SDA和一条串行时钟线SCL组成。主机按一定的通信协议向从机寻址和进行信息传输。在数据传输时,任何的时钟信号都是由I2c主控制器产生,在读取I2c从设备的数据及向I2c从设备写入数据时都是I2c主控制器将数据在SDA线上传输的同时还通过SCL线传输时钟。I2c总线上主控器和I2c从设备关系,如图1所示:

从图1中我们可以看到I2c主控制器和每个I2c从设备都是并联在I2c总线上,每个I2c设备对应一个唯一的地址识别。而这个地址体现在I2c总线开始传输的第一个字节中,如果I2c从设备的地址和这个字节中储存的地址相同就可以认为这个从设备被主控制器寻址。

2 嵌入式linux I2c总线驱动架构

嵌入式linux I2c总线驱动体系架构主要分为3个部分,分别是I2c核心子系统,I2c总线控制器驱动和I2c设备驱动。Linux下I2c总线驱动架构图如图2所示:

从图2我们可以看出,linux中对I2c设备驱动采取了层次化处理,主要分为总线层和设备层,将I2c设备驱动的一些共同属性抽象起来归结起来作为总线层,而将具体I2c设备特殊操作作为设备层。同时我们也从以下4个主要模块进行理解:

2.1 硬件I2c Adaptor、软件I2c Adaptor/Algorithm

硬件I2c Adaptor表示一个I2c硬件适配器,也就是I2c主控制器,相当于hisi3531板内置I2c主芯片,硬件I2cAdaptor的作用主要是用来在I2c接口上产生I2c传输的时钟信号和数据信号。而软件I2c Adaptor是硬件I2c Adaptor在内核中的一个抽象,用数据结构体struct i2c_adapter来表示,其中最要的成员变量是指向适配器驱动的程序的algo结构体指针。紧接着是把Algorithm也规划在这个模块中是因为它是实现访问I2c主控制器的接口,来实现从I2c主控制器发送或接收数据,每个Adaptor都有自己的Algorithm,I2c主控制器通过他自己的Algorithm来与挂接在改主控制器上的I2c从设备进行通信。

2.2 硬件I2c Device和软件实体 Client /Driver:

硬件I2c Device表示一个I2c硬件设备,也就是I2c从设备(SlaveDevice),I2c设备并行挂在I2c总线上,如hisi3531的I2c接口的GPIO寄存器就是一个I2c从设备,I2c设备通过I2c接口与I2c主控制器相连接,I2c主控制器通过I2c接口可以读、写I2c从设备。软件实体Client是代表并行挂接I2c总线上硬件I2c从设备的一个抽象,每一个I2c从设备对应一个Client,它是应用程序访问I2c从设备的接口。而软件实体Driver则表示并行挂接I2c总线上硬件I2c从设备的设备驱动,只有通过I2c设备驱动,应用程序才能直接访问挂接I2c总线上的从设备。

2.3 软件实体 I2c-Core

I2c-Core在驱动框架中起到了承上启下的作用,里面定义了许多重要的函数,它提供了I2C总线驱动和设备驱动的注册、注销方法,I2C传输、发送和接收函数以及探测设备、检测设备地址的上层接口等,这些函数都是在编写I2c设备驱动程序中必须要用到的接口函数,正是由于这些通用的接口函数才使得代码具有很强的可移植性和重用性。

2.4 软件实体I2c-dev

I2c-dev相当于I2c设备器的应用层访问口,通常命名为I2c-0、I2c-1、I2c-2,但由于其缺少通用性,一般很少用到所以并不做详细的介绍。

3 基于Hisi3531平台 的gpio_i2c通信应用

3.1 基于Hisi3531 的I2c寄存器

Hisi3531的I2c接口主要包括如下5个寄存器:

(1) I2C_COM——I2C命令寄存器 .用于配置I2c模块工作命令,例如选择I2c工作模式,应答信号ACK发送与禁止等。

(2)I2C_SR——I2C状态寄存器。用于读取I2c模块工作状态,检查命令是否完成。如总线是否完成传输中断标志,总线是否有发送接收中断标志等。

(3)I2C_SCL——I2C SCL高底电平周期数寄存器。用于配置I2c模块工作时SCL高电平周期数.

(4)I2C_RXR,I2C_TXR——I2C接收发送数据寄存器。用于控制双向的I2c总线数据流,将数据从I2C_TXR寄存器发送给从设备或者从I2C_RXR寄存器中接收来自从设备的数据。

(5)I2C_CTRL——I2C控制寄存器,用于配I2c使能和中断屏蔽。如:总线是否有发送接收中断屏蔽,总线完成传输中断屏蔽等

(6)I2C_ICR——I2C中断清除寄存器,主要用于在系统初始化配置时对相应的中断标志进行清除。

3.2 基于Hisi3531 I2c通信时钟算法

基于Hisi3531平台的I2c总线通信中I2C_SCL寄存器系统时钟与高低电平周期数之间的转换,其接口定义函数为static void I2C_DRV_SetRate (unsigned intI2cRate),由于其具有针对性,根据hisi3531芯片的时钟要求,我们在具体的过程定义设置如下:

3.3 基于Hisi3531 I2c总线驱动实现

在linux内核中我们可以把已经规定好的I2c总线驱动看做一个平台,而我们所基于Hisi3531平台I2c总线驱动则是基于这个平台设备和平台设备驱动架构的。所以我们现在主要是完成两件事情:定义和向内核注册I2c总线控制器平台设备、定义和向内核注册I2c总线控制器平台设备驱动,以及实现I2c总线控制器平台设备驱动中的成员函数,其设备驱动函数定义为

由上面两个函数我们可以看书hi3531_i2c总线平台驱动实现了I2c总线驱动探测函数probe和移除函数remove。其中最重要的是一个函数是设备探测函数probe。它主要完成I2c总线控制设备探测工作,为应用程序或I2c设备驱动调用I2c总线驱动做好准备。

3.4 基于Hisi3531的i2c-gpio通信实现

首先我们先了解一下I2c总线通信的几种信号状态,分别是:空闲状态,开始信号,结束信号和应答信号。这些信号都是由SDA和SCL上的电平变化来表示的。

空闲状态:SCL高电平SDA高电平;

开始信号:SCL高电平SDA从高-->低跳变;

结束条件:SCL高电平SDA从低--->高跳变;

应答信号:主机在传输完一个字节后,从机在第九个clock发送ACK信号(低电平)表示已经接受数据。

为了实现设备寄存器的读写操作我们定义了如下两个接口函数

unsigned int I2C_DRV_Write(unsigned int I2cNum, char I2cDevAddr, unsigned int I2cRegAddr, unsigned int I2cRegAddrByteNum, unsigned int Data, unsigned int DataLen)

unsigned int I2C_DRV_Read(unsigned int I2cNum, char I2cDevAddr, unsigned int I2cRegAddr, unsigned int I2cRegAddrByteNum, unsigned int DataLen)

利用这两个函数根据芯片的读写时序进行封装,就可以读写芯片内部的寄存器,以写芯片寄存器为例,必须往总线上写寄存器的地址,然后写入要往寄存器里写入的数据,图3是基于hisi3531平台的实现gpio_i2c读写功能的流程图。

从图3流程图中我们可以实现基于本文所研究I2c主控制器与从设备gpio寄存器之间的通信,首先有关hisi3531I2c接口提供的时钟信号线I2C_SCL与数据信号线I2C_SDA分别定义与GPIO12_5 ,GPIO12_4复用,同时定义两个基本的读取与发送接口函数

unsigned char gpio_i2c_read(unsigned chardevaddress, unsigned char address)

void gpio_i2c_write(unsigned char devaddress,unsigned char address, unsigned char data)

在这两个接口函数里基本实现了gpio_i2c通信功能。同时在实现gpio_i2c通信功能之前我们不要忘了先要注册gpio_i2c的设备驱动,我们定义了如下的接口函数

从这个函数中同样包含了设备探测函数probe,这个函数接口的调用则是通过gpio_i2c设备探测函数probe在内核检测到i2c设备和i2c设备驱动配备时才被调用。所以接下来的工作就是把gpio_i2c设备驱动注册到内核中,定义调用函数

通过这个接口函数我们就可以确定把gpio_i2c设备驱动注册到内核驱动上,也就是i2c总线i2c_bus_type的设备链表上。接下来就可以调用gpio_i2c设备探测函数probe函数,为gpio_i2c设备创建一个给应用程序访问的字符设备接口。通过定义一个应用程序调用的字符设备接口函数

在这个接口函数里定义了open,close等常用的文件操作接口函数,通过这些接口函数实现对gpio寄存器的访问。

4 结语

本文首先对I2c总线做了简单的概述,由于它的简单易操作,所以更广泛地得到应用,其次对其整个驱动架构做了深入的探讨,总结出4个模块便于理解。最后就是实现基于Hisi3531平台的gpio_i2c通信,这块主要是对Hisi3531平台的i2c设备驱动与gpio_i2c设备驱动分别注册到内核中,同时定义一些调用函数来实现i2c总线的通信应用,目前此方案已经在Hisi3531平台上得到很好的应用。

摘要:通过学习嵌入式liunx设备驱动程序,对I2C总线体系结构做了进一步的深入研究,在基于Hisi3531平台上,以其内置的I2C模块为主控制器,gpio寄存器为从设备,实现I2C总线驱动程序的应用。

【总线驱动】推荐阅读:

驱动CAN总线07-24

总线数据07-12

485总线07-22

总线平台07-27

总线方式07-28

仪表总线08-06

总线故障08-16

安全总线08-22

总线通讯09-21

总线控制10-04

上一篇:碳汇市场下一篇:缺陷发现