i2c总线注意事项和在linux下使用实战

i2c总线注意事项和在linux下使用实战

仔细阅读上图中的下部分文字。

注意你的i2c_msg发送方式,决定了是否有pause。

注意图中,什么叫sr。

注意图上说的什么样的才是真i2c协议

i2c设备驱动涉及的linux i2c api:
参见include/linux/i2c.h
i2c_transfer()
i2c_master_send()、i2c_master_recv ()
i2c_smbus_xfer()
struct i2c_driver
struct i2c_client
i2c_get_clientdata()、i2c_set_clientdata()
i2c_register_driver()、i2c_del_driver ()
i2c_check_functionality()

arm device tree引入以前,i2c设备的生成是靠board中i2c_register_board_info(int busnum,struct i2c_board_info const *info, unsigned len) 进行加入。arm device tree后,由i2c host controller driver根据自己的device node下面的子节点,通过i2c_register_adapter()时调用of_i2c_register_devices()进而调用i2c_new_device()来创建struct i2c_client 。进而也确定了struct i2c_client和struct i2c_adapter的父子关系。

在实际的i2c设备驱动编写时,需要注意,一般i2c设备总是容易出现偶尔的访问无应答(访问失败的情况),所以一般都需要加入retry重试5次以内的方式加入重试机制。有的甚至在每次重试间(两次调用i2c_transfer()之间),不但要加入msleep,还需要重新上电,具体取决于i2c设备本身。

具体请参考我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

原文地址:https://blog.51cto.com/8906847/2367910

时间: 2024-10-06 05:16:21

i2c总线注意事项和在linux下使用实战的相关文章

spi总线注意事项和linux下使用实战

spi总线注意事项和linux下使用实战 spi一般是4线(CS.MISO.MOSI.SCK)或者3线(MISO和MOSI线合并),当然这里忽略了设备芯片的电源.地等其他线.一条spi总线上只有一个master,slave根据片选情况可以有多个,但同一时间只能有一个工作.通过片选cs信号来区分.这里只关心spi总线的外设,所以不用像spi host controller驱动及内核spi_bus_type那样关心很多spi的细节.具体协议参见<SPI_motorola_specification.

CAN总线基础和在linux下使用实战

CAN总线基础和在linux下使用实战 CAN 是Controller Area Network 的缩写有CANH和CANL两线,即差分信号通信.当然设备芯片还会有电源和地等线.在总线空闲时,所有的单元都可开始发送消息(多主控制).最先访问总线的单元可获得发送权(CSMA/CA 方式).多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权.没有目标地址和源地址的概念,只有标识符,根据标识符决定优先级,根据表示符,设备自己判断是否接收给上层,让上层处理.即消息是广播的形式.两个以上的

linux下NFS实战

系统环境 系统平台:CentOS release 6.8 (Final) NFS Server IP:172.16.55.6 防火墙关闭 SELinux=disabled 安装NFS程序包 1.查看系统是否已经安装 [[email protected] vsftpd]$ yum list nfs-utils 已加载插件:fastestmirror, security Loading mirror speeds from cached hostfile 已安装的软件包 nfs-utils.x86_

[I2C]I2C总线协议图解

转自:http://blog.csdn.net/w89436838/article/details/38660631 1  I2C总线物理拓扑结构      I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成.通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递.在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平. 2  I2C总线特征 I2C总线上的每一个设备都可以作为主设备或者从设备

I2C总线协议详解

1.1 I2C总线知识 1.1.1  I2C总线物理拓扑结构     I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成.通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递.在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平. 1.1.2  I2C总线特征    I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知)

Vsftp的PASV mode(被动模式传送)和Port模式及 Linux下VsFTP配置全方案

什么叫做PASV mode(被动模式传送)?他是如何工作的? FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接.FTP服务程序一般会支持两种不同的模式,一种是Port模式,一种是Passive模式(Pasv Mode),我先说说这两种不同模式连接方式的分别. 先假设客户端为C,服务端为S. Port模式: 当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S

Linux+I2C总线分析(主要是probe的方式)

Linux I2C 总线浅析 ㈠ Overview Linux的I2C体系结构分为3个组成部分: ·I2C核心: I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法,I2C通信方法(即“algorithm”)上层的.与具体适配器无关的代码以及探测设备.检测设备地址的上层代码等.这部分是与平台无关的. ·I2C总线驱动: I2C总线驱动是对I2C硬件体系结构中适配器端的实现.I2C总线驱动主要包含了I2C适配器数据结构i2c_adapter.I2C适配器的algorithm数据结构i2c_a

linux驱动之i2c总线驱动调用分析【基于linux4.4】

平台:RK3399 使用设备树描述板级资源: 框架: linux i2c框架同样采用分层.分离的模式设计:从上到下分为  app调用层.i2c core层.驱动层:驱动层又分为 cpu平台 i2c控制器相关的驱动层以及 i2c总线上挂接的设备驱动程序:而分离的思想则体现在板级相关的信息放在设备树上实现,而通用的读写.初始化流程.操作流程等则放到驱动里面实现(类似platform总线驱动): 具体分析: 1. cpu i2c控制器驱动(adpter) static struct platform_

在linux下用tomcat部署java web项目的过程与注意事项

在linux下用tomcat部署java web项目的过程与注意事项(原创) 一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27根据操作系统选择Linux x64 - RPM Installer或Linux x86 - RPM Installer下载jdk-6u27-linux-x64-rpm.bin后放在/home目录中,当然其它地方也行.注意:LINUX