您现在的位置: > 行业杂谈 > 香港vps的LinuxI2C体系
香港vps的LinuxI2C体系
针对香港vps上部署的Linux系统,如何实现设备之间数据的交互,从而较大程度上简化硬件产品和PCB板布线空间占用,由此Linux系统定义了I2C驱动体系结构。下面小编给大家讲解一下I2C驱动体系结构。
首先给大家讲解一下I2C驱动体系结构的构成:
(1)I2C核心:I2C通信方法以及探测设备、检测设备地址等,完成I2C总线驱动和驱动设备的注册、注销。并且从中提供了一组不依赖硬件平台的接口函数,理解I2C核心的主要函数对于I2C核心理解很重要。关键函数包括:增加/删除i2c_adapter函数、增加/删除i2c_driver函数、I2C传输发送接收函数(其中i2c_tranfer函数用于I2C适配器和I2C设备之间的信息交互,i2c_master_send()函数进行写信息,i2c_master_recv()函数进行读信息)。
(2)I2C总线驱动:通过它可以控制I2C以主控方式开始位、停止位、读写周期,设备方式被读写和产生ACK,在I2C中实现由CPU或者直接集成到CPU内部的适配器端的实现。I2C适配器包含的数据结构包含:i2c_adapter数据结构,i2c_algorithm数据结构和I2C适配器通信信号函数,I2C的通信方法是通过i2c_algorithm的functionality()函数和master_xfer()函数。
Functionality()函数用于返回algorithm支持的通信协议,master_xfer()函数完成每个I2C函数的通信。master_xfer()函数的实现形式有多种,多数驱动中以中断方式来完成这个流程。如:发起硬件操作请求后,将自己调度出去,因此中间有会伴随着睡眠的动作。
(3)I2C设备驱动(客户驱动):通过i2c_driver和i2c_client数据结构实现,I2C硬件设备的具体实现(设备端),受CPU控制的I2C适配器挂载设备并实现I2C适配器与CPU交换数据。
I2C设备驱动使用i2c_driver函数和i2c_client数据结构并填充i2c_driver中的成员函数;i2c_client一般被包含在设备的私有信息结构体中。i2c_drive适合被定义为全局变量并初始化。
(4)Linux的i2c-dev.c文件分析:Linux的i2c-dev.c文件提供了i2cdev_read()、i2cdev_write()函数对应于用户空间要使用的read()和write()文件操作接口,这两个函数分别调用I2C核心的i2c_master_send()函数和i2c_master_recv()函数来构造一条I2C消息并引发适配器Algorithm通信函数的调用,来完成消息的传输。
注:大多数复杂一点的I2C设备的读写流程并不对应于一条消息,往往是两条以上的消息进行一次读写周期,在这种情况下,在应用层仍然调用read(),write()文件API来读写I2C涉笔,将不能正确读写。针对这种情况,Linux的i2c-dev.c文件中的i2cdev_read()、i2cdev_write()函数并没有太多的实用价值,只能适用于非RepStar的情况下。
本次讲解就到这里,相信小编已经给大家对于LinuxI2C体系驱动做了一些正确合理的普及,大家现在应该理解是如何工作的了,喜欢动手的朋友可以自行开发Linux内核(上述操作本人都亲自试验过)。
希望大家踊跃的购买我们公司的香港服务器、香港vps以及美国服务器,更好的进行Linux内核相关的研究和实战。
如果还有什么不明确或者不懂的地方,欢迎来到新世界主机咨询了解,详情请咨询QQ: ,TEL: 。我们必将竭诚为您服务。
本文地址:
http://xgvps.com/xingyezatan/424.htm
版权所有*转载时必须以链接形式注明作者和原始出处
Copyright © 2001-2020 香港vps 网址:http://xgvps.com/
香港vps、香港服务器、香港vps主机、香港vps哪里好、就到香港新世界vps主机。
信息来源于网络以及网友投稿,如侵犯了您的权益,请及时通知本站。