一种I2C控制器驱动方法及系统技术方案

技术编号:18458659 阅读:29 留言:0更新日期:2018-07-18 12:39
本发明专利技术提供一种I2C控制器驱动方法及系统,所述方法包括:I2C控制器结构体的实例化;I2C总线发送和接收数据方法的实现;设备树的描述。通过对i2c_adapter的实例化、i2c_algorithm方法的实现以及对设备树的描述,实现了符合最新Linux内核编写要求的I2C控制器驱动,通过采用设备树技术替换老内核使用板级文件的形式来描述硬件资源,将硬件信息从硬编码中剔除,减少了无用代码的存在,利于驱动的长期维护和二次开发;由于本驱动兼容了A3x不同平台I2C控制器的硬件特性,实现了单个驱动文件支持多个I2C控制器的功能;本驱动由于严格遵守设备模型,提供了sys、proc接口,为上层软件提供了足够的底层硬件信息,利于上层软件的编写调试。

A I2C controller driving method and system

The invention provides a I2C controller driving method and system. The method includes the instantiation of the I2C controller structure body, the implementation of the data method for sending and receiving the I2C bus, and the description of the device tree. Through the instantiation of i2c_adapter, the implementation of the i2c_algorithm method and the description of the device tree, the I2C controller driver which meets the requirements of the latest Linux kernel is realized, and the hardware resources are described by replacing the old kernel by the device tree technology in the form of the board level file, and the hardware information is removed from the hard coding and reduced. The existence of useless code is beneficial to the long-term maintenance and two development of the driver. Because this driver is compatible with the hardware characteristics of the I2C controller of different A3x platforms, the function of multiple I2C controllers is supported by a single driver file. The driver provides a sys, proc interface for the upper software because of strict compliance with the device model. Enough underlying hardware information is conducive to the compilation and debugging of the upper software.

【技术实现步骤摘要】
一种I2C控制器驱动方法及系统
本专利技术涉及服务器驱动
,特别是一种I2C控制器驱动方法及系统。
技术介绍
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件,然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下,主机负责产生定时时钟和终止数据传送。传统ARMLinux中,外设的硬件描述体现在板级文件中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的无用代码,很多代码只是在描述板级细节,而这些板级细节对于内核来讲毫无用处,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,且这些无用代码给后期维护带来了不便。
技术实现思路
本专利技术的目的是提供一种I2C控制器驱动方法及系统,旨在解决当前I2C控制器驱动对于外设的硬件描述设置在板级文件中,无用代码过多不方便维护的问题,实现剔除无用的冗余编码,利于驱动长期维护和二次开发。为达到上述技术目的,本专利技术提供了一种I2C控制器驱动方法,包括以下步骤:S101、I2C控制器结构体的实例化;S102、I2C总线发送和接收数据方法的实现;S103、设备树的描述。优选地,所述I2C控制器结构体的实例化包括:解析设备树,获取硬件属性信息;申请缓冲区,初始化完成量;获取I/O内存并映射到内核空间;从平台获取中断信号、注册中断处理函数;从平台获取使能时钟,设置分频系数并写入硬件寄存器;软件复位;实例化i2c_adapter并调用i2c_add_adapter注册到I2C总线。优选地,所述I2C总线发送和接收数据方法的实现具体为:对于数组中的每个消息,先判断其消息类型,若为读消息,则赋予从设备地址为:(msg->addr<<1)|1,否则为:msg->addr<<1,对每个消息产生一个开始位,并传送从设备地址,然后开始数据的发送或接收,对最后的消息还需产生一个停止位。优选地,所述数据的发送或接收,均涉及I2C总线协议的ack应答。优选地,所述设备树的描述包括:I2C控制器的初始化;设置I2C控制器的寄存器起始地址以及地址范围;使用SPI的39号中断,其中断触发方式是高电平触发;指定I2C控制器的输入时钟;指定I2C控制器提供给I2C设备的时钟;指定I2C控制器的复位引脚;指定I2C控制器使用的引脚以及引脚状态;指定挂接在I2C控制器下的I2C设备节点的reg字段的地址。本专利技术还提供了一种I2C控制器驱动系统,包括:控制器实例化模块,用于I2C控制器结构体的实例化;数据传输模块,用于实现I2C总线数据的发送和接收;设备树模块,用于对设备树进行描述。优选地,所述控制器实例化模块包括:设备树解析单元,用于解析设备树以及获取硬件属性信息;缓冲区申请单元,用于申请缓冲区,初始化完成量;I/O映射单元,用于获取I/O内存并映射到内核空间;中断处理单元,用于从平台获取中断信号、注册中断处理函数;时钟单元,用于从平台获取使能时钟,设置分频系数并写入硬件寄存器;复位单元,用于软件复位;注册单元,用于实例化i2c_adapter并调用i2c_add_adapter注册到I2C总线。优选地,所述数据传输模块包括:消息类型判断单元,用于判断消息类型;地址赋值单元,用于根据消息类型赋予从设备地址;数据收发单元,用于数据的发送或接收;停止位单元,用于对最后的消息产生一个停止位。优选地,所述数据的发送或接收,均涉及I2C总线协议的ack应答。优选地,所述设备树模块包括:初始化单元,用于I2C控制器的初始化;控制器地址设置单元,用于设置I2C控制器的寄存器起始地址以及地址范围;中断设置单元,用于使用SPI的39号中断,其中断触发方式是高电平触发;控制器时钟设置单元,用于指定I2C控制器的输入时钟;设备时钟设置单元,用于指定I2C控制器提供给I2C设备的时钟;复位引脚设置单元,用于指定I2C控制器的复位引脚;引脚状态设置单元,用于指定I2C控制器使用的引脚以及引脚状态;挂接设备地址设置单元,用于指定挂接在I2C控制器下的I2C设备节点的reg字段的地址。
技术实现思路
中提供的效果仅仅是实施例的效果,而不是专利技术所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:与现有技术相比,本专利技术通过对i2c_adapter的实例化、i2c_algorithm方法的实现以及对设备树的描述,实现了符合最新Linux内核编写要求的I2C控制器驱动,通过采用设备树技术替换老内核使用板级文件的形式来描述硬件资源,将硬件信息从硬编码中剔除,减少了无用代码的存在,利于驱动的长期维护和二次开发;由于本驱动兼容了A3x不同平台I2C控制器的硬件特性,实现了单个驱动文件支持多个I2C控制器的功能;本驱动由于严格遵守设备模型,提供了sys、proc接口,为上层软件提供了足够的底层硬件信息,利于上层软件的编写调试。附图说明图1为本专利技术实施例中所提供的一种I2C控制器驱动方法流程图;图2为本专利技术实施例中所提供的一种I2C控制器驱动系统结构框图。具体实施方式为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本专利技术进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本专利技术的不同结构。为了简化本专利技术的公开,下文中对特定例子的部件和设置进行描述。此外,本专利技术可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本专利技术省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本专利技术。下面结合附图对本专利技术实施例所提供的一种I2C控制器驱动方法及系统进行详细说明。如图1所示,本专利技术实施例公开了一种I2C控制器驱动方法,包括以下步骤:S101、I2C控制器结构体的实例化;S102、I2C总线发送和接收数据方法的实现;S103、设备树的描述。I2Cframework中使用结构体i2c_adapter来抽象描述I2C控制器,每一个i2c_adapter对应一个物理上的i2c控制器,在i2c总线驱动probe函数中动态创建。通过i2c_add_adapter注册到i2c_core。I2Cframework中使用结构体i2c_algorithm抽象了通过I2C总线发送和接收数据的方法,i2c_algorithm中的关键函数是master_xfer(),以i2c_msg为单位产生i2c访问需要的信号。不同的平台所对应的master_xfer()是不同的,需要根据所用平台的硬件特性实现各自的xxx_xfer()方本文档来自技高网
...

【技术保护点】
1.一种I2C控制器驱动方法,其特征在于,包括以下步骤:S101、I2C控制器结构体的实例化;S102、I2C总线发送和接收数据方法的实现;S103、设备树的描述。

【技术特征摘要】
1.一种I2C控制器驱动方法,其特征在于,包括以下步骤:S101、I2C控制器结构体的实例化;S102、I2C总线发送和接收数据方法的实现;S103、设备树的描述。2.根据权利要求1所述的一种I2C控制器驱动方法,其特征在于,所述I2C控制器结构体的实例化包括:解析设备树,获取硬件属性信息;申请缓冲区,初始化完成量;获取I/O内存并映射到内核空间;从平台获取中断信号、注册中断处理函数;从平台获取使能时钟,设置分频系数并写入硬件寄存器;软件复位;实例化i2c_adapter并调用i2c_add_adapter注册到I2C总线。3.根据权利要求1所述的一种I2C控制器驱动方法,其特征在于,所述I2C总线发送和接收数据方法的实现具体为:对于数组中的每个消息,先判断其消息类型,若为读消息,则赋予从设备地址为:(msg->addr<<1)|1,否则为:msg->addr<<1,对每个消息产生一个开始位,并传送从设备地址,然后开始数据的发送或接收,对最后的消息还需产生一个停止位。4.根据权利要求3所述的一种I2C控制器驱动方法,其特征在于,所述数据的发送或接收,均涉及I2C总线协议的ack应答。5.根据权利要求1所述的一种I2C控制器驱动方法,其特征在于,所述设备树的描述包括:I2C控制器的初始化;设置I2C控制器的寄存器起始地址以及地址范围;使用SPI的39号中断,其中断触发方式是高电平触发;指定I2C控制器的输入时钟;指定I2C控制器提供给I2C设备的时钟;指定I2C控制器的复位引脚;指定I2C控制器使用的引脚以及引脚状态;指定挂接在I2C控制器下的I2C设备节点的reg字段的地址。6.一种I2C控制器驱动系统,其特征在于,包括:控制器实例...

【专利技术属性】
技术研发人员:王鹏
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南,41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1