内蒙古赤峰市红山区创维E900s怎样设置出USB调试

您好,欢迎回来
您好,欢迎来到中国供应商!
西门子总线连接器(带编程口)
西门子总线连接器(带编程口)
西门子总线连接器(带编程口)上海桀呈工业自动化设备有限公司型号/规格品牌/商标SIEMENS西门子产品规格:全新原装产品产地:德国产品描述:全新原装质量保证价格优势产品简述:质保一年,一年内因产品质量问题免费更新产品不收取任何费用。
营业执照已上传
发货地上海 金山区
发货期限3天内发货
供货总量1000台
营业执照已上传
经营模式|经销批发
注册资本|800万人民币
企业类型|有限责任公司
公司地址|上海 上海 金山区 上海市金山区枫泾镇泾波路
供应产品分类
本页信息为上海桀呈工业自动化设备有限公司为您提供的“”产品信息,如您想了解更多关于“西门子总线连接器(带编程口)”价格、型号、厂家,请联系厂家,或给厂家留言。
加工定制:否品牌:Siemens/西门子型号:西门子总线连接器(带编程口)
西门子总线连接器(带编程口)
西门子总线连接器(带编程口)西门子总线连接器(带编程口)产品品牌:siemens/西门子&产品规格:全新原装上海桀呈工业自动化设备有限公司联系人:方弟洲24小时销售技术服务热线:138-(微信同步)Q Q:地址:上海市金山区枫泾镇泾波路999弄114号西门子6ES7-200/300/400/1200/6EP/6AV/6GK/ET200/6SE变频器/电缆/DP接头/触摸屏/变频器/数控伺服备件/维修-------------------------------合作方式如下:1.)款到发货2.)淘 宝 交 易,第三方担保交易,快捷、安全、高效。3.)快递公司代收货款。推荐德邦物流。4.)当 面 交 易,可以上门提货当面现金交易。S7-300模块化微型 PLC 系统,满足中、小规模的性能要求各种性能的模块可以非常好地满足和适应自动化控制任务简单实用的分布式结构和多界面网络能力,应用十分灵活操作方便,设计简单,不含风扇任务增加时可顺利扩展大量的集成功能,使它功能非常强劲S7-300F故障安全型自动化系统,可满足工厂日益增加的安全需求基于 S7-300可连接配有安全型模块的附加 ET 200S 和 ET 200M 分布式 I/O 站通过采用 PROFIsafe 行规的 PROFIBUS DP 进行安全相关通信标准模块另外也可用于非安全相关应用西门子PLC S7-300系列PLC安装及注意事项西门子S7-300安装注意事项一) 辅助电源功率较小,只能带动小功率的设备(光电传感器等);西门子S7-300安装注意事项二) 一般PLC均有一定数量的占有点数(即空地址接线端子),不要将线接上;西门子S7-300安装注意事项三) PLC存在I/O响应延迟问题,尤其在快速响应设备中应加以注意。西门子S7-300安装注意事项四) 输出有继电器型,晶体管型(高速输出时宜选用),输出可直接带轻负载(LED指示灯等);西门子S7-300安装注意事项五) 输入/断开的时间要大于PLC扫描时间;西门子S7-300安装注意事项六) PLC输出电路中没有保护,因此应在外部电路中串联使用熔断器等保护装置,防止负载短路造成损坏PLC;西门子S7-300安装注意事项七) 不要将交流电源线接到输入端子上,以免烧坏PLC;西门子S7-300安装注意事项八) 接地端子应独立接地,不与其它设备接地端串联,接地线裁面不小于2mm2;西门子S7-300安装注意事项九) 输入、输出信号线尽量分开走线,不要与动力线在同一管路内或捆扎在一起,以免出现干扰信号,产生误动作;信号传输线采用屏蔽线,并且将屏蔽线接地;为保证 信号可靠,输入、输出线一般控制在20米以内;扩展电缆易受噪声电干扰,应远离动力线、高压设备等。S7-300硬件结构S7-300或者S7-400的PLC是模块式的PLC,各种模块式相互独立的,分别安装在机架上。硬件结构如图:DI:数字量输入模块,DO:数字量输出模块,AI:模拟量输入模块,AO:模拟量输出模块7-CPU模块S7-CPU模块可分为紧凑型、标准型、革新型、户外型、故障安全型、特种型CPU。CPU312C表示是紧凑型CPU;CPU313C-2DP表示集成了PROFIBUS-DP协议的紧凑型CPU;CPU314-2PtP表示集成了点到点协议的紧凑型CPU;CPU313表示标准型CPU;CPU312IFM表示户外型CPU;CPU317-2DP表示集成了PROFIBUS-DP协议的特种型CPU;的运行模式1)RUN-P:可编程运行模块,在此模式下,可以让用户调试运行程序。2)RUN:运行模式,在此模式下,仅能运行程序,不能修改程序。3)STOP:停机模式,在此模式下,CPU不执行用户程序,但是装有STEP7的计算机可以读出或者修改用户程序。4)MRES:存储器复位模式。当开关在此位置释放时会自动返回到STOP位置,该位置不可保存。S7-300PLC功能1)高速的指令处理。2)人机界面(HMI)。3)诊断功能。4)口令保护。7-300模块(多机架图)~~~MPI是多点接口(Multi Point Interface)的简称,是西门子公司开发的用于PLC之间通讯的保密的协议。MPI通讯是当通信速率要求不高、通信数据量不大时,可以采用的一种简单经济的通讯方式。MPI通信可使用PLC S7-200/300/400、操作面板TP/OP及上位机MPI/PROFIBUS通信卡,如CP5512/CP5611/CP5613等进行数据交换。MPI网络的通信速率为19.2Kbps~12Mbps,***多可以连接32个节点,通讯距离为50m,但是可以通过中继器来扩展长度。S7-300数字量模块地址的确定1)数字I/O模块每个槽占4B(等于32个I/O点),如槽1的地址为0.0~3.7;数字量模块中的输入点和输出点的地址由字节部分和位部分组成,如I0.0,可以参考下图理解:电源模板&6ES7 307-1BA01-0AA0 电源模块(2A)6ES-0AA0 电源模块(5A)6ES-0AA0 电源模块(10A)CPU&6ES-0AB0 CPU312,32K内存6ES-0AB0 CPU312C,32K内存 10DI/6DO6ES-0AB0 CPU313C,64K内存 24DI/16DO / 4AI/2AO6ES-0AB0 CPU313C-2PTP,64K内存 16DI/16DO6ES-0AB0 CPU313C-2DP,64K内存 16DI/16DO6ES-0AB0 CPU314,96K内存6ES-0AB0 CPU314C-2PTP 96K内存 24DI/16DO / 4AI/2AO6ES-0AB0 CPU314C-2DP 96K内存 24DI/16DO / 4AI/2AO6ES-0AB0 CPU315-2DP, 128K内存6ES-0AB0 CPU315-2 PN/DP, 256K内存6ES-0AB0 CPU317-2DP,512K内存6ES-0AB0 CPU317-2 PN/DP,1MB内存6ES-0AB0 CPU319-3 PN/DP,1.4M内存内存卡&6ES-0AA0 SIMATIC Micro内存卡 64kByte(MMC)6ES-0AA0 SIMATIC Micro内存卡128KByte(MMC)6ES-0AA0 SIMATIC Micro内存卡512KByte(MMC)6ES-0AA0 SIMATIC Micro内存卡2MByte(MMC)6ES-0AA0 SIMATIC Micro内存卡4MByte(MMC)6ES-0AA0 SIMATIC Micro内存卡8MByte(MMC)开关量模板&6ES-0AA0 开入模块(16点,24VDC)6ES-0AA0 开入模块(16点,24VDC)6ES-0AA0 开入模块(16点,24VDC,源输入)6ES-0AA0 开入模块(32点,24VDC)6ES-0AB0 开入模块(16点,24VDC,诊断能力)6ES-0AA0 开入模块(32点,120VAC)6ES-0AA0 开入模块(8点,120/230VAC)6ES-0AA0 开入模块(8点,120/230VAC)与公共电位单独连接6ES-0AA0 开入模块(16点,120/230VAC)6ES-0AA0 开入模块(16点,24/48VDC)6ES-0AA0 开入模块(16点,48/125VDC)6ES-0AA0 开出模块(16点,24VDC)6ES-0AA0 开出模块(16点,24VDC)高速6ES-0AA0 开出模块(8点,48-125VDC)6ES-0AB0 开出模块(8点,24VDC)诊断能力6ES-0AB0 开出模块(16点,24VDC,独立接点,故障保护)6ES-0AA0 开出模块(32点,24VDC)6ES-0AA0 开出模块(32点,120VAC/230VAC)6ES-0AA0 开出模块(8点,24VDC,2A)6ES-0AA0 开出模块(8点,120V/230VAC)6ES-0AB0 开出模块(8点,120V/230VAC,独立接点)6ES-0AA0 开出模块(8点,继电器,2A)6ES-0AA0 开出模块(8点,继电器,5A,独立接点)6ES-0AA0 开出模块(16点,继电器)6ES-0AB0 开出模块(8点,继电器,5A,故障保护)6ES-0AA0 开出模块(16点,120V/230VAC)6ES-0AA0 8点输入,24VDC;8点输出,24VDC模块6ES-0AA0 16点输入,24VDC;16点输出,24VDC模块模拟量模板&6ES-0AB0 模拟量输入模块(8路,多种信号)6ES-0AB0 模拟量输入模块(2路,多种信号)6ES-0AB0 模拟量输入模块(8路,15位精度)6ES-0AB0 模拟量输入模块(8路,15位精度)4通道模式6ES-0AB0 模拟量输入模块(8路,14位精度,快速)6ES-0AB0 模拟量输入模块(8路, 13位精度)6ES-0AB0 8路模拟量输入,16位,热电阻6ES-0AB0 8路模拟量输入,16位,热电偶6ES-0AB0 模拟输出模块(4路)6ES-0AB0 模拟输出模块(2路)6ES-0AB0 模拟输出模块(8路)6ES-0AB0 模拟量输出模块(4路,15位精度)6ES-0AB0 模拟量输入(4路RTD)/模拟量输出(2路)6ES-0AA0 模拟量输入(4路)/模拟量输出(2路)附件&6ES-0AA0 IM365接口模块6ES-0AA0 IM360接口模块6ES-0AA0 IM361接口模块6ES-0AA0 连接电缆 (1米)6ES-0AA0 连接电缆 (2.5米)6ES-0AA0 连接电缆 (5米)6ES-0AA0 连接电缆 (10米)6ES-0AA0 导轨(480mm)6ES-0AA0 导轨(530mm)6ES-0AA0 导轨(830mm)6ES-0AA0 导轨(2000mm)6ES-0AA0 20针前连接器6ES-0AA0 40针前连接器功能模板&6ES-0AE0 FM350-1 计数器功能模块6ES-0AE0 FM350-2 计数器功能模块6ES-0AE0 FM351 定位功能模块6ES-0AE0 FM352 电子凸轮控制器+组态包光盘6ES-0AE0 FM355C 闭环控制模块6ES-0AE0 FM355S 闭环控制系统6ES-0AE0 FM355-2C 闭环控制模块6ES-0AE0 FM355-2S 闭环控制模块6ES-0AB0 SM338位置输入模块6ES-0AE0 FM352-5高速布尔处理器6ES-7XG0 FM352-5功能软件包通讯模板&6ES-0AE0 CP340 通讯处理器(RS232)6ES-0AE0 CP340 通讯处理器(20mA/TTY)6ES-0AE0 CP340 通讯处理器(RS485/RS422)6ES-0AE0 CP341 通讯处理器(RS232)6ES-0AE0 CP341 通讯处理器(20mA/TTY)6ES-0AE0 CP341 通讯处理器(RS485/RS422)6ES-0YA0 可装载驱动 MODBUS RTU 主站6ES-0YA0 可装载驱动 MODBUS RTU 从站6ES-0AA0 RS232电缆 5m6ES-0AA0 RS232电缆 10m6ES-0AA0 RS232电缆 15m6ES-0AA0 20mA/TTY电缆 5m6ES-0AA0 20mA/TTY电缆 10m6ES-0AA0 20mA/TTY电缆 50m6ES-0AA0 RS485/RS422电缆 5m6ES-0AA0 RS485/RS422电缆 10m6ES-0AA0 RS485/RS422电缆 50m6GK-0XE0 CP342-5通讯模块6GK-0XE0 CP342-5 光纤通讯模块6GK-0XE0 CP343-5通讯模块6GK-0XE0 CP343-1 以太网通讯模块6GK-0XE0 CP343-1 以太网通讯模块6GK-0XE0 CP343-1 以太网通讯模块6GK-0XE0 CP343-1 以太网通讯模块6GK-0XE0 CP343-1 IT 以太网通讯模块6GK-0XE0 CP343-1 IT 以太网通讯模块(支持PROFINET)6GK-0XE0 CP343-1PN PROFINET以太网通讯模块6GK-0XA0 CP343-2 AS-InterfaceCPU 还具有以下配置:SIMATIC 微型存储卡(MMC 卡)插槽;MMC 卡替代集成的装载存储器,因此是操作必备品。 使用前连接器连接到集成的 I/O 端口(仅限紧凑型 CPU) 连接 PROFIBUS 总线(仅限于DP型CPU) RS 422/485 的连接(仅 PtP CPU) 连接 PROFINET(仅限于PN型CPU)&SIMATIC S7-300 CPU 具有高性能、所需空间小以及***小的维护成本,因此提高了性价比。高处理速度;例如,在 CPU 315-2 DP 中,位运算时,0.05 μs;浮点运算时,0.45 μs,在 CPU 319-3 PN/DP 中,位运算时,0.004 μs;浮点运算时,0.04 μs 扩展数量 作为装载存储器的 SIMATIC 微型存储卡(MMC):可在微型存储卡中存储一个完整的项目,包括符号和注释。RUN 模式下也可以进行读/写操作。这样可以降低服务成本 无需电池即可在 MMC 上备份 RAM 数据编程使用STEP7中的 LAD、FBD STL 对 CPU 进行编程。可以使用下列编程工具:STEP 7 Basis 和 STEP 7 Professional。可以运行 CPU 314 的工程与组态工具(例如,S7-GRAPH、S7-HiGraph、SCL、CFC 或 SFC)。标准型CPU对标准型 CPU 进行编程时需要 STEP 7 V5.2+SP1 以上的软件。紧凑型 CPU对紧凑型 CPU 进行编程时需要 STEP 7 V5.3+SP2 以上的软件。老版本的STEP 7需要升级。SIMATIC ET 200SP SIMATIC ET 200SP 分布式 I/O 系统是一种极为灵活的可扩展分布式 I/O 系统,用于通过 PROFINET 将过程信号连接至中央通过 PROFINET 或 PROFIBUS 控制器。 SIMATIC ET 200SP 可安装到导轨上,基本上由以下部分组成: 一个与按照 PROFINET 或 PROFIBUS 标准 IEC 61158 运行的所有控制器进行通信的接口模块; 根据接口模块,可以任意组合方式将***多 64 个 I/O 模块插到无源基本单元中; 一个使 SIMATIC ET 200SP 的配置变得完整的服务器模块。&特殊功能 设定实际值 设置参考点 删除剩余行程 运行模式 实现定位任务的准备步骤: 协调机械系统和电子电路: 通过输入机械数据可轻松实现。 通过S7 CPU或组态软件规定目标位置 从CPU向FM 451传送接口信号(启动,停止) FM 451处理实际定位任务: 将控制快速横动、慢移速度、顺时针或逆时针的4个数字量输出分配到各个通道。 根据离目标的距离来规定慢移速度或快速横动/慢移速度 在到达关断点后,模块监视目标的逼近。 到达目标区后,给 CPU 发一个信号。&集成式系统诊断 系统诊断信息在显示屏上以纯文本格式持续显示,TIA Portal,HMI 设备和 web 服务器,包括驱动器中的消息,在CPU停止运行的状态下均有可能。此功能是作为一个系统功能集成在 CPU 固件中,无需由用户单独组态。若配置了新硬件组件,则会自动更新诊断信息。 通过质量信息,直接在用户程序中进行简单快速的诊断: 通过激活模块的质量信息 (QI),可直接在用户程序中查询和评估所提供过程值的有效性。此时,访问是通过过程映像并使用简单二进制或加载命令进行的。先决条件是可在 TIA Portal 中对模块进行诊断,并对质量信息进行组态。 通过 SIMATIC STEP 7 Professional V12 组态软件进行组态 SIMATIC S7-1500 控制器系列可在 Totally Integrated Automation Portal 平台中使用 STEP 7 Professional V12 或更高版本来编程。 SIMATIC STEP 7 Professional V12 是 SIMATIC S7-1500 的直观组态系统。&LOGO!CSM 紧凑型交换机模块的设计相应于 LOGO! 组件的设计 紧凑型设计; 坚固的塑料外壳,包括: 4 个 RJ45 端口,用于连接至工业以太网; 其中 1 个端口位于前面以便于进行诊断访问 外部电源电压采用 3 针连接方式 LED 指示灯,用于工业以太网端口的诊断和状态指示 可简便安装在标准安装导轨上 无风扇,低维护 Functions 将以太网接口数量加倍,以便连接带有以太网接口的 LOGO! 产品系列 (…-0BA7 和 -0BA8) 的逻辑模块 通过三个另外节点来设计小型、局域工业以太网 通过自动检测和自动交叉功能来自动检测数据传输速率 用于诊断和状态显示的 LED 网络拓扑结构和网络组态&模块化: 功能强大的 S7-400 背板总线和可以直接连接到 CPU 的通讯接口可以实现许多通讯线路的高性能操作。例如,这允许把一条通讯线路用于 HMI 和编程任务,一条通讯线路用于高性能和等距运动控制组件,一条通讯线路用于普通 I/O 现场总线。还可以执行额外需要的与 MES/ERP 系统或 Internet 的连接。&CPU 315F-2 PN/DP 允许对设备实施故障安全型自动化系统,以满足提高的安全要求(特别是制造自动化方面的安全要求)。 可在 SIMATIC S7-300 中用作一个 PROFINET IO 控制器和一个标准 PROFIBUS DP 主站。CPU 315F-2 PN/DP 也可用作分布式智能从站(DP 从站)。 可以通过两个集成的接口连接包含故障安全型 I/O 模块的分布式 I/O 站。ET 200M 的故障安全型 I/O 模块还可以安装在安全相关的中央组态中。 基于 PROFIsafe 行规执行 F-CPU 和故障安全型 I/O 模块之间的安全通讯。 CPU 运行需要 SIMATIC 微型存储卡(MMC 卡)。&集成通信功能 编程器/OP 通信 全局数据通信 S7 基本通信 S7 通信(仅服务器) 系统功能 CPU 为诊断、参数设置、同步、报警、时间测量等提供了多种系统功能。 更多详情,参见手册。 通信 通过 PROFIBUS DP 执行中央控制器与分布式站之间的安全型通信和标准通信。通过特别开发的 PROFIBUS profile PROFIsafe,可以在标准数据报文中传输带有安全功能的用户数据。无需其它硬件组件,例如特殊安全总线。所需的软件既可以作为一个操作系统的扩展功能集成在硬件组件中,也可以作为一个软件块装载到 CPU 中。&
供应商信息
动领域产品销售,研究开发、工程实施、技术服务、培训上海桀呈工业自动化设备有限公司是西门子集自动化控制与电气传、咨询为一体的高新技术企业。
在西门子工业自动化产品领域,公司凭借雄厚的技术实力及多年从事?西门专业从事西门子工业自动化产品和数控系统销售、技术服务及培训的工程服务公司。
我公司致力于专业推广西门子高性能自动化系统和驱动产品,所经营产品范围包括:LOGO!通用模块;SIMATIC?S7-200、S7-300、S7-400系列可编程控制器;?SIMATIC?HMI面板,工控机,编程器;工业PROFIBUS、以太网及无线通讯等相关产品;正版PCS7?软件、WINCC组态软件、STEP?7编程软件;SITOP工业开关电源;通用型、工程型变频器,直流调速装置等。随着技术的发展和产品的更替,高新产品的出现层出不穷,我公司也紧随西门子脚步争取为广大客户提供***新的自动化产品:SIMATIC?S7-1200系列PLC;SIMATIC?BASIC?HMI面板;G120、G130、G150、S120等全新SINAMICS家族驱动产品;PCS7?V7.1和***新的STEP7?Basic平台软件等。公司各类产品齐全,货量充足,能够满足客户紧急大量现货需求,保证工期进度。
在售前、售后、工程调试阶段,我们都会为客户提供专业技术工程师的全程服务。用我们真挚的热情和精湛的技术为客户创造更大的价值。
主营产品或服务
800万人民币
公司注册时间
公司所在地
上海 上海 金山区 上海市金山区枫泾镇泾波路
有限责任公司
法定代表人
工商注册号
地 址|上海 上海 金山区 上海市金山区枫泾镇泾波路
上海 上海 金山区 上海市金山区枫泾镇泾波路
上海桀呈工业自动化设备有限公司
国家会展中心(上海)
上海世博展览馆
上海世贸商城展览馆
成都世纪城新国际会展中心
深圳会展中心
上海新国际博览中心
深圳会展中心
中国进出口商品交易会展馆
亚洲国际博览馆
中国国际展览中心(老馆)
上海新国际博览中心
国家会展中心(上海)
免责声明:
本商铺内所展现的西门子总线连接器(带编程口)信息及其他相关信息均由商铺所属企业自行提供,信息的真实性、准确性和合法性由商铺所属企业完全负责。中国供应商对此不承担任何保证责任。
友情提醒:
建议您在购买相关产品前务必确认供应商资质及产品质量,过低的价格有可能是虚假信息,请谨慎对待,谨防欺诈行为。
地址:上海 上海 金山区 上海市金山区枫泾镇泾波路
技术支持:什么是总线??总线分为哪几类??
本回答由提问者推荐I/O体系结构和设备驱动程序 - Linux - 次元立方网 - 电脑知识与技术互动交流平台
I/O体系结构和设备驱动程序
一、I/O体系结构
为了确保计算机能够正常工作,必须提供数据通路,让信息在连接到个人计算机的CPU、RAM和I/O设备之间流动。这些数据通路总称为总线,担当计算机内部主通信通道的作用。
一台计算机包括几种不同类型的总线,它们通过被称作“桥”的硬件设备连接在一起。两条高速总线用于在内存芯片上来回传送数据:前端总线将CPU连接到RAM控制器上,而后端总线将CPU直接连接到外部硬件的高速缓存上。主机上的桥将系统总线和前端总线连接在一起。
任何I/O设备有且仅能连接一条总线。总线的类型影响I/O设备的内部设计,也影响着内核如何处理设备。
CPU和I/O设备之间的数据通路通常称为I/O总线。
1.1、I/O端口
每个连接到I/O总线上的设备都有自己的I/O地址集,通常称为I/O端口(I/O port)。可以把两个连续的8位端口看成一个16位端口,但是这必须从偶数地址开始。同理,也可以把两个连续的16位端口看成一个32位端口,但是这必须是从4的整数倍地址开始。有四条专用的语言指令可以允许CPU对I/O端口进行读写,它们是in、ins、out和outs。在执行其中的一条指令时,CPU使用地址总线选择所请求的I/O端口,使用数据总线在CPU寄存器和端口之间传送数据。
I/O端口还可以被映射到物理地址空间。因此,处理器和I/O设备之间的通信就可以使用对内存直接进行操作的语言指令(例如,mov、and、or等等)。现代的硬件设备更倾向于映射的I/O,因为这样处理的速度较快,并可以和DMA结合起来。
1.1.1、访问I/O端口
内核必须使用“资源”来记录分配给每个硬件设备的I/O端口。
资源(resource)表示某个实体的一部分,这部分被互斥地分配给设备驱动程序。在我们的情况中,一个资源表示I/O端口地址的一个范围。每个资源对应的信息存放在resource数据结构中。所有的同种资源都插入到一个树形数据结构中;例如,表示I/O端口地址范围的所有资源都包含在一个根节点ioport_resource的树中。
内核也为以上应用于I/O端口的函数定义了一些快捷函数:request_region()分配I/O端口的给定范围,release_region()释放以前分配给I/O端口的范围。当前分配给I/O设备的所有I/O地址的树都可以从/proc/ioports文件中获得。
1.2、I/O接口
I/O接口(I/O interface)是处于一组I/O端口和对应的设备控制器之间的一种硬件电路。它起翻译器的作用,即把I/O端口中的值转换成设备所需要的命令和数据。在相反的方向上,它检测设备状态的变化,并对起状态寄存器作用的I/O端口进行相应的更新。还可以通过一条IRQ线把这种电路连接到可编程中断控制器上,以使它代表相应的设备发出中断请求。
有两种类型的接口:
专用I/O接口:专门用于一个特定的硬件设备。在一些情况下,设备控制器与这种I/O接口处于同一块卡中。连接到专用I/O接口上的设备可以是内部设备,也可以是外部设备。
通用I/O接口:用来连接多个不同的硬件设备。连接到通用I/O接口上的设备通常都是外部设备。
1.2.1、专用I/O接口
1.2.2、通用I/O接口
1.3、设备控制器
复杂的设备可能需要一个设备控制器(device controller)来驱动。从本质上说,控制器起两个重要作用:
* 对从I/O接口接收到的高级命令进行解释,并通过向设备发送适当的电信号序列强制设备执行特定的操作。
* 对从设备接收到的电信号进行转换和适当地解释,并修改(通过I/O接口)状态寄存器的值。
二、设备驱动程序模型
新的硬件设备即使类型不同但也有相似的功能。对这种设备的驱动程序应当特别关注:
* 电源管理(控制设备电源线上不同的电压级别)。
* 即插即用(配备设备时透明的资源分配)。
* 热插拔(系统运行时支持设备的插入和移走)。
系统中所有硬件设备由内核全权负责电源管理。例如,在以电池供电的计算机进入“待机”状态时,内核应立刻强制每个硬件设备(硬盘、显卡、声卡、网卡、总线控制起等等)处于低功率状态。因此,每个能够响应“待机”状态的设备驱动程序必须按准确的顺序进入“待机”状态。否则一些设备可能会处于错误的电源状态。例如,内核必须首先将硬盘置于“待机”状态,然后才是它们的硬盘控制器,因为若按照相反的顺序执行,硬盘控制器就不能向硬盘发送命令。
2.1、sysfs文件系统
sysfs文件系统是一种特殊的文件系统,被安装于/sys目录下的/proc文件系统相似。/proc文件系统是首次被设计成允许用户态应用程序访问内核内部数据结构的一种文件系统。/sysfs文件系统本质上与/proc有相同的目的,但是它还提供关于内核数据结构的附加信息;此外,/sysfs的组织结构比/proc更有调理。或许,在不远的将来,/proc和/sysfs将会继续共存。
sysfs文件系统的目标是要展现设备驱动程序模型组件间的层次关系。该文件系统的相应高层目录是:
block:块设备,它们独立于所连接的总线。
devices:所有被内核识别的硬件设备,依照连接它们的总线对其进行组织。
bus:系统中用于连接设备的总线。
drivers:在内核中注册的设备驱动程序。
class:系统中设备的类型;同一类可能包含由不同总线连接的设备,于是由不同的驱动程序驱动。
power:处理一些硬件设备电源状态的文件。
firmware:处理一些硬件设备的固件的文件。
2.2、kobject
kobject被嵌入一个叫做“容器”的更大对象中,容器描述设备驱动程序模型中的组件。容器的典型例子有总线、设备以及驱动程序的描述符;例如,第一个IDE磁盘的第一个分区描述符对应于/sys/block/hda/hdal目录。
将一个kobject嵌入容器中允许内核:
* 为容器保持一个引用计数器。
* 维持容器的层次列表或组(例如,与块设备相关的sysfs目录为每个磁盘分区包含一个不同的子目录)。
* 为容器的属性提供一种用户态查看的视图。
2.2.1、kobject、kse和subsystem
通过kset数据结构可将kobjects组织成一颗层次树。kset是同类型kobject结构的一个结合体----也就是说,相关的kobject包含在同类型的容器中。
kobj字段是嵌入在Kset数据结构中的kobject;而位于kset中的kobject,其parent字段指向这个内嵌的kobject结构。因此,一个kset就是kobject集合体,但是它依赖于层次树中用于引用计数和连接的更高层kobject。这种设计编码效率很高,并可获得最大的灵活性。例如,分别用于增加和减少kset引用计数器值的kset_get()函数和kset_put()函数,只需简单地调用内嵌的kobject结构中的kobject_get()函数和kobject_put()函数;因为kset的引用计数器只不过是内嵌的Kse中的类型为kobject的kobj的引用计数器。而且,由于有了内嵌的kobject结构,kset数据结构可以嵌入到“容器”对象中,非常类似于嵌入的kobject数据结构。最后,kset可以作为其他kset的一个成员:它足以将内嵌的kobject插入到更高层次的kset中。
还存在所谓subsystem的kset集合。一个subsystem可以包括不同类型的kset,用包含两个字段的subsystem数据结构来描述:
kset:内嵌的kset结构,用于存放subsystem中的kset。
rwsem:读写信号量,保护递归地包含于subsystem中的所有kset和kobject。
subsystem数据结构甚至也可以嵌入到一个更大的“容器”对象中;因此,容器的应用计数器也是内嵌subsystem的引用计数器----也就是嵌入在subsystem中的kset所嵌的kobject的引用计数器。subsys_get()和subsys_put()函数分别用于增加和减少这个引用计数器的值。
2.2.2、注册kobject、kset和subsystem
一般来说,如果想让kobject、kset和subsystem出现在sysfs子树中,就必须首先注册它们。与kobject对应的目录总是出现在其父kobject的目录中。例如,位于同一个kset中的kobject的目录出现在kset本身的目录中。因此,sysfs子树的结构就描述了各种已注册的kobject之间以及各种容器对象之间的层次关系。
通常,sysfs文件系统的上层目录肯定是已注册的subsystem。
kobject_register()函数用于初始化kobject,并且将其相应的目录增加到sysfs文件系统中。在调用此函数之前,调用程序应该先设置kobject结构中的kset字段,使它指向其父kset(如果有的话)。kobject_unregister()函数则将kobect的目录从sysfs文件系统中移走。为了更易于内核开发者进行开发,也提供了kset_register()和kset_unregister()函数,以及subsystem_register() subsystem_unregister()函数,但本质上它们是围绕kobject_register()和kobject_unregister()的封装函数。
许多kobject目录都包括称作属性(attribute)的普通文件。sysfs_create_file()函数接收kobject的地址和属性描述符作为它的参数,并在合适的目录中创建特殊文件。sysfs文件系统中所描述的对象间的其他关系可以通过符号链接的方式来建立:sysfs_create_link()函数为目录中与其他kobject相关联的特定kobject创建一个符号链接。
2.3、设备驱动程序模型的组件
设备驱动程序模型建立在几个基本数据结构之上,这些结构描述了总线、设备、设备驱动器等等。
2.3.1、设备
设备驱动程序模型中的每个设备是由一个device对象来描述的。
device对象全部收集在devices_subsys子系统中,该子系统对应的目录为/sys/devices。设备是按照层次关系组织的:一个设备是某个“孩子”的“父亲”,其条件为子设备离开父设备无法正常工作。例如,在基于PCI总线的计算机上,位于PCI总线和USB总线之间的桥就是连接在USB总线上的所有设备的父设备。device对象的parent字段是指向其父设备描述符的指针,children字段是子设备链表的首部,而node字段存放指向children链表中相邻元素的指针。device对象中内嵌的kobject间亲子关系也反映了设备的层次关系;因此,/sys/devices下的目录结构与硬件设备的物理组织是匹配的。
每个设备驱动程序都保持一个device对象链表,其中链接了所有可被管理的设备;device对象的driver_list字段存放指向相邻对象的指针,而driver字段指向设备驱动程序的描述符。此外,对于任何总线类型来说,都有一个链表存放连接到该类型总线上的所有设备;device对象的bus_list字段存放指向相邻对象的指针,而bus字段指向总线类型描述符。
引用计数器记录device对象的使用情况,它包含在kobject类型的kobj结构中,通过调用get_device()和put_device()函数分别增加和减少该计数器的值。
device_register()函数的功能是往设备驱动程序模型中插入一个新的device对象,并自动地在/sys/devices目录下为其创建一个新的目录。相反地,device_unregister()函数的功能是从设备驱动程序模型中移走一个设备。
通常,device对象被静态地嵌入到一个更大的描述符中。
2.3.2、驱动程序
设备驱动程序模型中的每个驱动程序都可由device_driver对象描述。
device_driver对象包括四个方法,它们用于热插拔、即插即用和电源管理。当总线设备驱动程序发现一个可能由它处理的设备时就会调用probe方法;相应的函数将会探测硬件,从而对设备进行更一步的检查。当移走一个可热插拔的设备时驱动程序会调用remove方法;而驱动程序本身被卸载时,它所处理的每个设备也会调用remove方法。当内核必须改变设备的供电状态时,设备会调用shutdown、suspend和resume三个方法。
内嵌在描述符中的kobject类型的kobj所包含的引用计数器用于记录device_driver对象的使用情况。通过调用get_drvier()函数和put_driver()函数可分别增加和减少该计数器的值。
driver_register()函数的功能是往设备驱动程序模型中插入一个新的device_driver对象,并自动地在sysfs文件系统下为其创建一个新的目录。相反,driver_unregister()函数的功能则是从设备驱动程序模型中移走一个设备驱动对象。
2.3.3、总线
内核所支持的每一种总线类型都由一个bus_type对象描述。
每个bus_type类型的对象都包含一个内嵌的子系统;存放于bus_subsys变量中的子系统把嵌入在bus_type对象中的所有子系统都集合在一起。bus_subsys子系统与目录/sys/bus是对应的;因此,例如,有一个/sys/bus/pci目录,它与PCI总线类型相对应。每种总线的子系统通常包括两个kset,它们是drivers和devices(分别对应于bus_type对象中的drivers和devices字段)。
名为driver的kset包含描述符device_driver,它描述与该总线类型相关的所有设备驱动程序,而名为device的kset包含描述符device,它描述给定总线类型上连接的所有设备。因为设备的kobject目录已经出现在/sys/devices下的sysfs文件系统中,所以每种总线子系统的devices目录存放了指向/sys/devices下目录的符号链接。bus_for_each_drv()和bus_for_each_dev()函数分别用于循环扫描drivers和devices链表中的所有元素。
当内核检查一个给定的设备是否可以由给定的驱动程序处理时,就会执行match方法。对于连接设备的总线而言,即使其上每个设备的标识符都拥有一个特定的格式,实现match方法的函数通常也很简单,因为它只需要在所支持标识符的驱动程序表中搜索设备的描述符。在设备驱动程序模型中注册某个设备时会执行hotplug方法;实现函数应该通过环境变量把总线的具体信息传递给用户态程序,以通告一个新的可用设备。最后,当特定类型总线上的设备必须改变其供电状态时,就会执行suspend和resume方法。
每个类是由一个class对象描述的。所有的类对象都属于与/sys/class目录相对应的class_subsys子系统。此外,每个类对象还包括一个内嵌的子系统;因此,例如有一个/sys/class/input目录,它就与设备驱动程序模型的input类相对应。
设备驱动程序模型中的类本质上是要提供一个标准的方法,从而为用户态应用程序导出逻辑设备的接口。每个class_device描述符中内嵌一个kobject,这是一个名为dev的属性(特殊文件)。该属性存放设备的主设备号和次设备号,通过它们可以访问相应的逻辑设备。
三、设备文件
我们至少可以假定以下的差异:
* 块设备的数据可以被随机访问,而且从人类用户的观点看,传送任何数据块所需的时间都是较少且大致相同的。
* 字符设备的数据或者不可以被随机访问,或者可以被随机访问,但是访问随机数据所需的时间很大程度上依赖于数据在设备内的位置。
传统上,设备标识符由设备文件的类型(字符或块)和一对参数组成。第一个参数称为主设备号(major number),它标识了设备的类型。通常,具有相同主设备号和类型的所有设备文件共享相同的文件操作集合,因为它们是由同一个设备驱动程序处理的。第二个参数称为次设备号(minor number),它标识了主设备号相同的设备组中的一个特定设备。例如,由相同的磁盘控制器管理的一组磁盘具有相同的主设备号和不同的次设备号。
3.1、设备文件的用户态处理
2.6已经增加了设备号的编码大小:目前主设备号的编码为12位,次设备号的编码为20位。通常把这两个参数合并成一个32位的dev_t变量。MAJOR宏和MINOR宏可以从dev_t中分别提取主设备号和次设备号,而MKDEV宏可以把主设备号和次设备号合并成一个dev_t值。为了实现向后兼容,内核仍然可以正确地处理设备号编码为16位的老式设备文件。
3.1.1、动态分配设备号
设备驱动程序模型提供了一个非常好的解决办法:把主设备号和次设备号存放在/sys/class子目录下的dev属性中。
3.1.2、动态创建设备文件
Linux内核可以动态地创建设备文件:它无需把每一个可能想到的硬件设备的设备文件都填充到/dev目录下,因为设备文件可以按照需要来创建。由于设备驱动程序模型的存在,Linux2.6内核提供了一个非常简单的方法来处理这个问题。系统中必须安装一组称为udev工具集的用户态程序。当系统启动时,/dev目录是清空的,这时udev程序将扫描/sys/class子目录来寻找dev文件。对每一个这样的文件(主设备号和次设备号的组合表示一个内核所支持的逻辑设备文件),udev程序都会在/dev目录下为它创建一个相应的设备文件。udev程序也会根据配置文件为其分配一个文件名并创建一个符号链接,该方法类似于Unix设备文件的传统命令模式。最后,/dev目录里只存放了系统中内核所支持的所有设备的设备文件,而没有任何其他的文件。
通常在系统初始化后才创建设备文件。它要么发生在加载设备驱动程序(系统尚未支持该设备)所在的模块时,要么发生在一个热插拔的设备(如USB外围设备)加入系统中时。udev工具集可以自动地创建相应的设备文件,因为设备驱动程序模型支持设备的热插拔。当发现一个新的设备时,内核会产生一个新的进程来执行用户态shell脚本文件/sbin/hotplug,并将新设备上的有用信息作为环境变量传递给shell脚本。用户态脚本文件读取配置文件信息并关注完成新设备初始化所必须的任何操作。如果安装了udev工具集,脚本文件也会在/dev目录下创建适当的设备文件。
3.2、设备文件的VFS处理
虽然设备文件也在系统的目录树中,但是它们和普通文件以及目录文件有根本的不同。当进程访问普通文件时,它会通过文件系统访问磁盘分区中的一些数据块;而在进程访问设备文件时,它只要驱动硬件设备就可以了。例如,进程可以访问一个设备文件以连接到计算机的温度计读取房间的温度。为应用程序隐藏设备文件与普通文件之间的差异正是VFS的责任。
让我们假定进程在设备文件(块或字符类型)上执行open()系统调用。从本质上说,相应的服务例程解析到设备文件的路径名,并建立相应的索引节点对象、目录项对象和文件对象。
四、设备驱动程序
设备驱动程序是内核例程的集合,它使得硬件设备响应控制设备的编程接口,而该接口是一组规范的VFS函数集(open,read,lseek,ioctl等等)。这些函数的实际实现由设备驱动程序全权负责。由于每个设备都有一个唯一的I/O控制器,因此就有唯一的命令和唯一的状态信息,所以大部分I/O设备都有自己的驱动程序。
4.1、注册设备驱动程序
我们知道在设备文件上发出的每个系统调用都由内核转化为对相应设备驱动程序的对应函数的调用。为了完成这个操作,设备驱动程序必须注册自己。换句话说,注册一个设备驱动程序意味着分配一个新的device_driver描述符,将其插入到设备驱动程序模型的数据结构中,并把它与对应的设备文件(可能是多个设备文件)连接起来。如果设备文件对应的驱动程序以前没有注册,则对该设备文件的访问会返回错误码-ENODEV。
如果设备驱动程序被静态地编译进内核,则它的注册在内核初始化阶段进行。相反,如果驱动程序是作为一个内核模块来编译的,则它的注册在模块装入时进行。在后一种情况下,设备驱动程序也可以在模块卸载时注销自己。
注册设备驱动程序时,内核会寻找可能由该驱动程序处理但还尚未获得支持的硬件设备。为了做到这点,内核主要依靠相关的总线类型描述符bus_type的match方法,以及device_driver对象的probe方法。如果探测到可被驱动程序处理的硬件设备,内核会分配一个设备对象,然后调用device_register()函数把设备插入设备驱动程序模型中。
4.2、初始化设备驱动程序
对设备驱动程序进行注册和初始化是两件不同的事。设备驱动程序应当尽快被注册,以便用户态应用程序能通过相应的设备文件使用它。相反,设备驱动程序在最后可能时刻才被初始化。事实上,初始化驱动程序意味着分配宝贵的系统资源,这些资源因此就对其他驱动程序不可用了。
为了确保资源在需要是能够获得,在获得后不再被请求,设备驱动程序通常采用下列模式:
* 引用计数器记录当前访问设备文件的进程数。在设备文件的open方法中计数器被增加,在release方法中被减少。
* open方法在增加引用计数器的值之前先检查它。如果计数器为0,则设备驱动程序必须分配资源并激活硬件设备上的中断和DMA。
* release方法在减少使用计数器的值之后检查它。如果计数器为0,说明已经没有进程使用这个硬件设备。如果是这样,该方法将禁止I/O控制器上的中断和DMA,然后释放所分配的资源。
4.3、监控I/O操作
在任何情况下,启动I/O操作的设备驱动程序都必须依靠一种监控技术在I/O操作终止或超时时发出信号。
在终止操作的情况下,设备驱动程序读取I/O接口状态寄存器的内容来确定I/O操作是否成功执行。在超时的情况下,驱动程序知道一定出了问题,因为完成操作所允许的最大时间间隔已经用完,但什么也没做。
监控I/O操作结束的两种可用技术分别成为轮询模式(polling mode)和中断模式(interrupt mode)。
4.3.1、轮询模式
CPU依照这种技术重复检查(轮询)设备的状态寄存器,直到寄存器的值表明I/O操作已经完成为止。第五章自旋锁提到一种基于轮询的技术:当处理器试图获得一个繁忙的自旋锁时,它就重复地查询变量的值,直到该值变为0为止。但是,应用到I/O操作中的轮询技术更加巧妙,这是因为驱动程序还必须记住检查可能的超时。
如果完成I/O操作需要的时间相对较多,比如说毫秒级,那么这种模式就变得低效,因为CPU花费宝贵的机器周期去等待I/O操作的完成。在这种情况下,在每次轮询操作之后,可以通过把schedule()的调用插入到循环内部来自愿放弃CPU。
4.3.2、中断模式
如果I/O控制器能够通过IRQ线发出I/O操作结束的信号,那么中断模式才能被使用。
中断处理程序从设备的输入寄存器中读字符,并把它存放在foo全局变量指向的驱动程序描述符foo_dev_t的data字段中。然后设置intr表示,并调用wake_up_interruptible()函数唤醒在foo-&wait等待队列上阻塞的进程。
4.4、访问I/O共享存储器
4.5、直接内存访问(DMA)
现在所有的PC都包含一个辅助的DMA电路,它可以用来控制在RAM和I/O设备之间数据的传送。DMA一旦被激活,就可以自行传送数据;当数据传送完成之后,DMA发出一个中断请求。当CPU和DMA同时访问同一内存单元时,所产生的冲突由一个名为内存仲裁器的硬件电路来解决。
4.5.1、同步DMA和异步DMA
设备驱动程序可以采用两种方式使用DMA,分别是同步DMA和异步DMA。第一种方式,数据的传送是由进程触发的;而第二种方式,数据的传送是由硬件设备触发的。
4.5.2、DMA传送的辅助函数
4.5.3、总线地址
一般而言,启动一次数据传送前,设备驱动程序必须确保DMA电路可以直接访问RAM内存单元。
内核为什么应该关心总线地址呢?这是因为在DMA操作中,数据传送不需要CPU的参与;I/O设备和DMA电路直接驱动数据总线。因此,当核开始DMA操作时,必须把所涉及的内存缓冲区总线地址或写入DMA适当的I/O端口,或写入I/O设备适当的I/O端口。
4.5.4、高速缓存的一致性
开发人员在下面两种DMA映射类型中进行选择:
一致性DMA映射:使用这种映射方式时,内核必须保证内存与硬件设备间高速缓存一致性不是什么问题,也就是说CPU在RAM内存单元上所执行的每个写操作对硬件设备而言都是立即可见的,反过来也一样。这种映射方式也称为“同步的”或“一致的”。
流式DMA映射:使用这种映射方式时,设备驱动程序必须了解高速缓存一致性问题,这可以使用适当的同步辅助函数来解决。这种映射方式也称为“异步的”或“非一致性的”。
一般来说,如果CPU和DMA处理器以不可预知的方式去访问一个缓冲区,那么必须强制使用一致性DMA映射方式。其他情形下,流式DMA映射方式更可取,因为在一些体系结构中处理一致性DMA映射是很麻烦的,并且可能导致更低的系统性能。
4.5.5、一致性DMA映射的辅助函数
dma_alloc_coherent()
4.5.6、流式DMA映射的辅助函数
4.7、内核支持的级别
五、字符设备驱动程序
字符设备驱动程序是由一个cdev结构描述的。
cdev_alloc()函数的功能是动态地分配cdev描述符,并初始化内嵌的kobject数据结构,因此在引用计数器的值变为0时会自动释放该描述符。
cdev_add()函数的功能是在设备驱动程序模型中注册一个cdev描述符。它初始化cdev描述符中的dev和count字段,然后调用kobj_map()函数。kobj_map()则依次建立设备驱动程序模型的数据结构,把设备号范围复制到设备驱动程序的描述符中。
5.1、分配设备号
为了记录目前已经分配了哪些字符设备号,内核使用散列表chrdevs,表的大小不超过设备号范围。两个不同的设备号范围可能共享同一个主设备号,但是范围不能重叠,因此它们的次设备号应该完全不同。chrdevs包含255个表项,由于散列函数屏蔽了主设备号的高四位----因此,主设备号的个数少于255个,它们被散列到不同的表项中。每个表项指向冲突链表的第一个元素,而该链表是按主、次设备号的递增顺序进行排序的。
本质上可以采用两种方法为字符设备驱动程序分配一个范围内的设备号。所有新的设备驱动程序使用第一种方法,该方法使用register_chrdev_region()函数和alloc_chrdev_region()函数为驱动程序分配任意范围内的设备号。
上述函数并不执行cdev_add(),因此设备驱动程序在所要求的设备号范围被成功分配时必须执行cdev_add()函数。
第二种方法使用register_chrdev()函数,它分配一个固定的设备号范围,该范围包含唯一一个主设备号以及0~255的次设备号。在这种情形下,设备驱动程序不必调用cdev_add()函数。
5.1.1、register_chrdev_region()函数和alloc_chrdev_region()函数
5.1.2、register_chrdev()函数
驱动程序使用register_chrdev()函数时需要一个老式的设备号范围:一个单独的主设备号和0~255的次设备号范围。该函数接收的参数为:请求的主设备号major(如果是0则动态分配)、设备驱动程序的名称name和一个指针fops(它指向设备号范围内的特定字符设备文件的文件操作表)。
5.2、访问字符设备驱动程序
5.3、字符设备的缓冲策略
这可以结合两种不同的技术做到:
* 使用DMA方式传送数据块。
* 运用两个或多个元素的循环缓冲区,每个元素具有一个数据块的大小。当一个中断(发送一个信号表明新的数据块已被读入)发生时,中断处理程序把指针移到循环缓冲区的下一个元素,以便将来的数据会存放在一个空元素中。相反,只要驱动程序把数据成功拷贝到用户地址空间,就释放循环缓冲区中的元素,以便用它来保存从硬件设备传送来的新数据。
循环缓冲区的作用是消除CPU负载的峰值;即使接收数据的用户态应用程序因为其他高优先级任务而慢下来,DMA也要能够继续填充循环缓冲区中的元素,因为中断处理程序代表当前运行的进程执行。
延伸阅读:
Linux内核版本号:linux2 6 39交叉编译工具:arm-l...
本教程为 李华明 编著的iOS-Cocos2d游戏开发系列教程:教程涵盖关于i......
专题主要学习DirectX的初级编程入门学习,对Directx11的入门及初学者有......
&面向对象的JavaScript&这一说法多少有些冗余,因为JavaScript 语言本......
Windows7系统专题 无论是升级操作系统、资料备份、加强资料的安全及管......}

我要回帖

更多关于 内蒙古赤峰市 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信