掌桥专利:专业的专利平台
掌桥专利
首页

一种用户态控制I2C设备的方法与终端

文献发布时间:2023-06-19 10:08:35


一种用户态控制I2C设备的方法与终端

技术领域

本发明涉及计算机技术领域,特别涉及一种用户态控制I2C设备的方法与终端。

背景技术

I2C(Inter-Integrated Circuit)总线具有高效性和兼容性,接口用在组件上占用空间非常小,并且传输速率快,I2C总线上可以同时挂载多个设备。

现有技术中对I2C设备的控制通常有以下两种:

一种是通过设备驱动来控制I2C设备,它对设备的读写,初始化,复位等,比较简单。但是缺点就一个驱动只能对应一个芯片,对其他不同厂家和不同类型芯片的设备来说,是没有任何作用的,因此一个驱动不能访问所有的I2C设备,复用性低且效率不高。

还有一种通过用户态程序I2C-tools工具包直接访问/dev接口,这个访问是直接访问I2C总线,对于外部的I2C设备来说,进行复位,上电等操作还要分开来控制。I2C-tools命令使用起来比较繁琐,读写连续数据操作起来,不是很直接方便。

发明内容

本发明所要解决的技术问题是:提供一种用户态控制I2C设备的方法与终端,使用方便的同时提高程序的复用性和实用效率。

为了解决上述技术问题,本发明采用的技术方案为:

一种用户态控制I2C设备的方法,包括步骤:

S1、加载内核驱动,进行设备树匹配和I2C总线初始化,并创建字符设备节点;

S2、由用户态程序根据用户操作信息,生成对应的操作数据,并将所述操作数据写入字符设备节点,所述操作数据包括目标I2C设备地址和具体操作内容;

S3、由内核驱动解析所述操作数据,得到所述目标I2C设备地址和所述具体操作内容,调用驱动的操作方法集中与所述具体操作内容对应的方法向与所述目标I2C设备地址对应的目标I2C设备发送操作请求,使得所述目标I2C设备接收并执行所述操作请求。

为了解决上述技术问题,本发明采用的另一种技术方案为:

一种用户态控制I2C设备的终端,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

S1、加载内核驱动,进行设备树匹配和I2C总线初始化,并创建字符设备节点;

S2、由用户态程序根据用户操作信息,生成对应的操作数据,并将所述操作数据写入字符设备节点,所述操作数据包括目标I2C设备地址和具体操作内容;

S3、由内核驱动解析所述操作数据,得到所述目标I2C设备地址和所述具体操作内容,调用驱动的操作方法集中与所述具体操作内容对应的方法向与所述目标I2C设备地址对应的目标I2C设备发送操作请求,使得所述目标I2C设备接收并执行所述操作请求。

本发明的有益效果在于:本发明创建了用于控制I2C总线的字符设备节点,并对所有I2C设备使用同一I2C驱动进行驱动,提高了驱动程序的复用性,且提高了效率和节省资源,本发明能够通过用户态程序向字符设备节点写入操作数据,从而对I2C总线上的所有I2C设备进行控制,使用更加方便。

附图说明

图1为本发明实施例的一种用户态控制I2C设备的方法的流程图;

图2为本发明实施例的一种用户态控制I2C设备的终端的结构图;

图3为本发明实施例的一种用户态控制I2C设备的方法的具体流程图;

图4为本发明实施例的一种用户态控制I2C设备的方法中预设通信协议示意图;

图5为本发明实施例的一种用户态控制I2C设备的方法的通信示意图;

图6为本发明实施例的一种用户态控制I2C设备的方法的通信层次示意图;

标号说明:

1、一种用户态控制I2C设备的终端;2、处理器;3、存储器。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

请参照图1以及图3至图6,一种用户态控制I2C设备的方法,包括步骤:

S1、加载内核驱动,进行设备树匹配和I2C总线初始化,并创建字符设备节点;

S2、由用户态程序根据用户操作信息,生成对应的操作数据,并将所述操作数据写入字符设备节点,所述操作数据包括目标I2C设备地址和具体操作内容;

S3、由内核驱动解析所述操作数据,得到所述目标I2C设备地址和所述具体操作内容,调用驱动的操作方法集中与所述具体操作内容对应的方法向与所述目标I2C设备地址对应的目标I2C设备发送操作请求,使得所述目标I2C设备接收并执行所述操作请求。

从上述描述可知,本发明的有益效果在于:本发明创建了用于控制I2C总线的字符设备节点,并对所有I2C设备使用同一I2C驱动进行驱动,提高了驱动程序的复用性,且提高了效率和节省资源,本发明能够通过用户态程序向字符设备节点写入操作数据,从而对I2C总线上的所有I2C设备进行控制,使用更加方便。

进一步的,所述步骤S2中所述操作数据的格式为预设通讯协议的通信数据格式;

步骤S3中所述由内核驱动解析所述操作数据具体为:

由内核驱动根据预设通讯协议对所述操作数据进行解析。

由上述描述可知,用户态程序与内核驱动间的通信通过预设的通信协议进行,使通信数据的要求能加严谨,方便内核进行分析和处理。

进一步的,所述通信数据格式具体为:

第一字节为读写位,第二字节为目标设备地址,第三和四字节为待读写的寄存器地址,第五字节为设置访问设备的速率,第六字节为预留位,第七字节为待读写数据的长度,余下字节为待读写数据的具体内容;

所述步骤S2中由用户态程序根据用户操作信息,生成对应的操作数据具体为:

根据所述用户操作信息是数据读取还是数据写入的判断结果向第一字节写入0或1;

读取所述用户操作信息中的目标设备地址,写入第二字节;

读取所述用户操作信息中的目标寄存器地址,将目标寄存器地址写入第三和第四字节;

将所述用户操作信息中访问所述目标I2C设备的速率写入第五字节;

预留第六字节;

将所所述用户操作信息中的待读写数据的长度写入第七字节;

将所述用户操作信息中的待读写数据的具体内容写入余下字节,得到操作数据;

所述由内核驱动根据预设通讯协议对所述操作数据进行解析为:

读取所述操作数据中第二字节,得到所述目标设备地址,读取所述操作数据中其他字节的相应数据,得到所述具体操作内容。

由上述描述可知,预设的用户态程序根据数据内容对数据进行字节位区分写入,从而得到符合预设通信协议通信数据格式的操作数据,内核驱动按照字节位进行解析,得到对应数据,步骤严谨,保证数据的正确性。

进一步的,所述步骤S3中所述操作方法集中的操作方法包括读取、写入、开启、关闭和ioctl方法。

由上述描述可知,驱动的操作方法集包括读取、写入、开启、关闭和ioctl方法,能够适用于用户的各种常用需求。

进一步的,所述ioctl方法用于对I2C设备进行gpio操作,所述gpio操作包括上电和复位。

由上述描述可知,程序通过调用ioctl方法能够实现用户对目标I2C设备的gpio操作需求。

请参照图2,一种用户态控制I2C设备的终端,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

S1、加载内核驱动,进行设备树匹配和I2C总线初始化,并创建字符设备节点;

S2、由用户态程序根据用户操作信息,生成对应的操作数据,并将所述操作数据写入字符设备节点,所述操作数据包括目标I2C设备地址和具体操作内容;

S3、由内核驱动解析所述操作数据,得到所述目标I2C设备地址和所述具体操作内容,调用驱动的操作方法集中与所述具体操作内容对应的方法向与所述目标I2C设备地址对应的目标I2C设备发送操作请求,使得所述目标I2C设备接收并执行所述操作请求。

从上述描述可知,本发明的有益效果在于:本发明创建了用于控制I2C总线的字符设备节点,并对所有I2C设备使用同一I2C驱动进行驱动,提高了驱动程序的复用性,且提高了效率和节省资源,本发明能够通过用户态程序向字符设备节点写入操作数据,从而对I2C总线上的所有I2C设备进行控制,使用更加方便。

进一步的,所述步骤S2中所述操作数据的格式为预设通讯协议的通信数据格式;

步骤S3中所述由内核驱动解析所述操作数据具体为:

由内核驱动根据预设通讯协议对所述操作数据进行解析。

由上述描述可知,用户态程序与内核驱动间的通信通过预设的通信协议进行,使通信数据的要求能加严谨,方便内核进行分析和处理。

进一步的,所述通信数据格式具体为:

第一字节为读写位,第二字节为目标设备地址,第三和四字节为待读写的寄存器地址,第五字节为设置访问设备的速率,第六字节为预留位,第七字节为待读写数据的长度,余下字节为待读写数据的具体内容;

所述步骤S2中由用户态程序根据用户操作信息,生成对应的操作数据具体为:

根据所述用户操作信息是数据读取还是数据写入的判断结果向第一字节写入0或1;

读取所述用户操作信息中的目标设备地址,写入第二字节;

读取所述用户操作信息中的目标寄存器地址,将目标寄存器地址写入第三和第四字节;

将所述用户操作信息中访问所述目标I2C设备的速率写入第五字节;

预留第六字节;

将所所述用户操作信息中的待读写数据的长度写入第七字节;

将所述用户操作信息中的待读写数据的具体内容写入余下字节,得到操作数据;

所述由内核驱动根据预设通讯协议对所述操作数据进行解析为:

读取所述操作数据中第二字节,得到所述目标设备地址,读取所述操作数据中其他字节的相应数据,得到所述具体操作内容。

由上述描述可知,预设的用户态程序根据数据内容对数据进行字节位区分写入,从而得到符合预设通信协议通信数据格式的操作数据,内核驱动按照字节位进行解析,得到对应数据,步骤严谨,保证数据的正确性。

进一步的,所述步骤S3中所述操作方法集中的操作方法包括读取、写入、开启、关闭和ioctl方法。

由上述描述可知,驱动的操作方法集包括读取、写入、开启、关闭和ioctl方法,能够适用于用户的各种常用需求。

进一步的,所述ioctl方法用于对I2C设备进行gpio操作,所述gpio操作包括上电和复位。

由上述描述可知,程序通过调用ioctl方法能够实现用户对目标I2C设备的gpio操作需求。

请参照图1、图3、图4、图5和图6,本发明的实施例一为:

一种用户态控制I2C设备的方法,包括步骤:

S1、加载内核驱动,进行设备树匹配和I2C总线初始化,并创建字符设备节点;

本实施例中,开机启动时,内核驱动自动加载,并进行设备树匹配方式,初始化I2C总线,完成后,驱动会创建字符设备节点stw_I2C。

S2、由用户态程序根据用户操作信息,生成对应的操作数据,并将所述操作数据写入字符设备节点,所述操作数据包括目标I2C设备地址和具体操作内容;

其中,所述步骤S2中所述操作数据的格式为预设通讯协议的通信数据格式;

所述通信数据格式具体为:

第一字节为读写位,第二字节为目标设备地址,第三和四字节为待读写的寄存器地址,第五字节为设置访问设备的速率,第六字节为预留位,第七字节为待读写数据的长度,余下字节为待读写数据的具体内容;

所述步骤S2中由用户态程序根据用户操作信息,生成对应的操作数据具体为:

根据所述用户操作信息是数据读取还是数据写入的判断结果向第一字节写入0或1;

读取所述用户操作信息中的目标设备地址,写入第二字节;

读取所述用户操作信息中的目标寄存器地址,将目标寄存器地址写入第三和第四字节;

将所述用户操作信息中访问所述目标I2C设备的速率写入第五字节;

预留第六字节;

将所所述用户操作信息中的待读写数据的长度写入第七字节;

将所述用户操作信息中的待读写数据的具体内容写入余下字节,得到操作数据;

本实施例中,因为使用应用层去设置I2C地址,设置数率,读写数据等,来控制不同的I2C设备,设置复位引脚,来达到通讯的目的。为了利于操作通讯,用户态和内核态通讯的时候,用户态按照通信协议下发数据,驱动按照该协议解析数据,如图5所示,通信协议的通信数据格式如图4所示。

当cpu处理器的I2C总线下面有两个不同的I2C设备,例如设备1的地址是0x10,设备2的地址是0x20,我们要对该设备进行初始化,上电,复位,访问等操作,例如,要对设备0x10的0x01寄存器写入0xaa值进行初始化,并设置读写数率为100K,对设备0x20的0x4寄存器写入0x56进行初始化,并设置读写数率为200K,则操作及构造数据如下:

先构造设备1的初始化数据,之后写入字符设备节点,构造操作数据如下:

0x01 0x10 0x00 0x01 0x0a 0x0 0x1 0xaa;

当完成对设备1初始化后,继续构造设备2的初始化数据,根据协议,构造操作数据如下:

0x01 0x20 0x00 0x04 0x14 0x0 0x1 0x56;

当需要对设备进行访问,进行数据的读取,获取到当前设备里面寄存器的值时,例如,要获取设备1的0x5到0x8寄存器里面的值,则直接进行数据构造,0x0 0x10 0x00 0x050x0 0x3写入到字符设备节点中,之后设备会进行读取设备相对应的寄存器,将读取带的数据会加到写入数据的后面,之后返回,例如,读取的数据分别是0x1 0x2 0x3,则返回给用户的数据这是0x0 0x10 0x00 0x05 0x0 0x3 0x1 0x2 0x3。

S3、由内核驱动解析所述操作数据,得到所述目标I2C设备地址和所述具体操作内容,调用驱动的操作方法集中与所述具体操作内容对应的方法向与所述目标I2C设备地址对应的目标I2C设备发送操作请求,使得所述目标I2C设备接收并执行所述操作请求。

步骤S3中所述由内核驱动解析所述操作数据具体为:

由内核驱动根据预设通讯协议对所述操作数据进行解析;

所述由内核驱动根据预设通讯协议对所述操作数据进行解析为:

读取所述操作数据中第二字节,得到所述目标设备地址,读取所述操作数据中其他字节的相应数据,得到所述具体操作内容;

所述步骤S3中所述操作方法集中的操作方法包括读取、写入、开启、关闭和ioctl方法;

所述ioctl方法用于对I2C设备进行gpio操作,所述gpio操作包括上电和复位。

本实施例中,内核驱动接收到该操作数据后,进行数据解析,并最终发送给硬件I2C设备。具体的,按照固定的通讯数据协议来解析用户态传递下来的数据,并调用相应的方法,在操作方法集fops中,通过ioctl来控制gpio,通过read、write函数对I2C设备进行读写。驱动操作方法集中的方法通过调用i2c_transfer来实现对I2C设备的操作,i2c_transfer通过调用相应的adapter的master_xfer方法来实现,而master_xfer主要根据struct i2c_msg类型来进行处理。

请参照图2,本发明的实施例二为:

一种用户态控制I2C设备的终端1,包括处理器2、存储器3及存储在存储器3上并可在处理器2上运行的计算机程序,其特征在于,所述处理器2执行所述计算机程序时实现以上实施例一中的步骤。

综上所述,本发明提供的一种用户态控制I2C设备的方法与终端,创建了用于控制I2C总线的字符设备节点,并对所有I2C设备使用同一I2C驱动进行驱动,提高了驱动程序的复用性,且提高了效率和节省资源,本发明能够通过用户态程序向字符设备写入操作数据,从而对I2C总线上的所有I2C设备进行控制,使用更加方便;且本发明用户态与内核间的通信按照通信协议进行,能够有效的进行数据解析和执行,减少出错。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 一种用户态控制I2C设备的方法与终端
  • I2C设备的控制方法、装置及终端
技术分类

06120112437460