首页 > 系统相关 >linux自带i2c工具使用

linux自带i2c工具使用

时间:2023-09-02 14:12:14浏览次数:42  
标签:00 i2c -- 总线 ff linux 自带 I2C

I2C总线被全球超过50个公司的1000+个ICs所使用,已然是一个世界标准.另外,I2C总线与多种不同的控制总线是兼容的,比如SMBus(系统管理总线),PMBus(电源管理总线),IPMI(智能平台管理总线),DDC(显示数据通道)以及ATCA(高级电信架构).如果没记错的话,linux中的I2C框架是完全支持SMBus的.

linux自带i2c工具使用linux自带i2c工具使用
要全面了解I2C,可以从《I2C-bus specification and user manual》看起.I2C最初是由Philips提出的,那么这文档就是由NXP维护的.
我们接下来要了解I2C总线是如何工作的,在一个具体应用中如何设计.I2C的数据传输,握手以及总线仲裁机制都需要了解.I2C总线在每种操作模式下的时序和电气特性都需要了解,这里还是从嵌入式软件工程师的角度着重了解时序特性.

I2C总线的特性:

在消费电子,通信以及工业电子中,看起来不相关的设计中有很多类似的地方.例如,基本上每个系统都包括:

1.一些智能控制,通常是单芯片的微控制器

2.通用的电路:LCD和LED驱动器,远程IO口,RAM,EEPROM,RTC或者DAC\ADC.

3.面向应用的电路:比如收音机和视频系统的数字调谐和信号处理电路,温度传感器和智能卡.

为了让这些共同之处对于系统设计者和设备厂商都有用,也为了最大化硬件的有效性和电路的简单性,Philips半导体开发了一个简单的双向2线的总线,实现了IC之间的有效控制.这个总线就被称为I2C总线.所有兼容I2C总线的设备都包含一个片上的接口,允许它们直接通过I2C总线进行通信.这个设计解决了在设计数字控制电路时带来的很多接口问题.

下面是I2C总线的一些特性:

1.只需要两根线,一个串行数据线(SDA)额一个串行时钟线(SCL).

2.可以通过软件方式和一个唯一的地址来寻找到每一个连接到总线的设备,简单的主从关系一直存在.主机可以作为主机发送器或者主机接收器.

3.它是真正的多主机总线,如果有两个或多个主机初始化数据传输,可以通过冲突检测和仲裁来防止数据被破坏.

4.串行的8位双向数据传输在标准模式下达到100kb/s,快速模式下是400kb/s,超速模式下是3.4Mb/s.

5.串行的8位单向数据在快速模式下可以达到5Mb/s.

6.片上的滤波器可以保护数据完整性.

7.总线上连接的最大IC数量由总线最大的电容所限制.

系统设计者的好处:

由于I2C总线是个是一个标准的总线,不需要额外的接口.所以在系统升级或者修改时,可以简单的换IC.

厂商的好处:

符合I2C总线的IC不仅帮助了设计者,同样给设备厂商很多好处,因为:

1.I2C只有两根线,所以IC的pin脚会少,PCB的面积会小,成本会降.

2.完整的I2C总线协议不需要地址译码器或其他逻辑电路.

这只是一些好处.另外,符合I2C总线的IC会增加系统设计的灵活性.IC很容易升级,比如需要一个更大的ROM,只需要选择一个有更大ROM的微控制器就可以了.

IC设计者的好处:

微控制器的设计者经常要考虑输出pin脚.I2C协议允许在没有单独寻址信号和芯片使能信号的条件下各种外设的连接.另外,带I2C接口的微控制器在市场上更受欢迎,因为有很多外设可以选.

I2c扫描

通过i2cdetect -l指令可以查看TX1上的I2C总线,从返回的结果来看TX1含有七个I2C总线。

ubuntu@tegra-ubuntu:/proc/device-tree$ i2cdetect -l
i2c-0   unknown         Tegra I2C adapter                       N/A
i2c-1   unknown         Tegra I2C adapter                       N/A
i2c-2   unknown         Tegra I2C adapter                       N/A
i2c-3   unknown         Tegra I2C adapter                       N/A
i2c-4   unknown         Tegra I2C adapter                       N/A
i2c-5   unknown         Tegra I2C adapter                       N/A
i2c-6   unknown         Tegra I2C adapter                       N/A
I2C设备查询

    若总线上挂载I2C从设备,可通过i2cdetect扫描某个I2C总线上的所有设备。可通过控制台输入i2cdetect -y 2,结果如下所示。

ubuntu@tegra-ubuntu:/proc/device-tree$ sudo i2cdetect -y 2
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
说明1:-y为一个可选参数,如果有-y参数的存在则会有一个用户交互过程,意思是希望用户停止使用该I2C总线。如果写入该参数,则没有这个交互过程,一般该参数在脚本中使用。 说明2:此处I2C总线共挂载两个设备——PCF8574和AT24C04,从机地址0x50为board configure,从机地址0x57为AT24C04。 寄存器内容导出

    通过i2cdump指令可导出I2C设备中的所有寄存器内容,例如输入i2cdump -y 2 0x50,可获得以下内容:

ubuntu@tegra-ubuntu:/proc/device-tree$ sudo i2cdump -y 2 0x50
No size specified (using byte-data access)
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 01 00 0d 00 84 08 e8 03 04 4a 00 00 00 00 00 00    ?.?.?????J......
10: 00 00 35 02 36 39 39 2d 38 32 31 38 30 2d 31 30    ..5?699-82180-10
20: 30 30 2d 34 31 30 20 4a 2e 30 ff ff ff ff ff ff    00-410 J.0......
30: ff ff 35 2d 66 4b 04 00 36 2d 66 4b 04 00 00 00    ..5-fK?.6-fK?...
40: 00 00 00 00 37 2d 66 4b 04 00 30 33 32 33 32 31    ....7-fK?.032321
50: 36 31 33 30 35 36 35 ff ff ff ff ff ff ff ff ff    6130565.........
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff 4e 56 43 42 1c 00 4d 31 00 00    ......NVCB?.M1..
a0: 35 2d 66 4b 04 00 36 2d 66 4b 04 00 37 2d 66 4b    5-fK?.6-fK?.7-fK
b0: 04 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ?...............
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 96    ...............?
    i2cdump -y 2 0x50指令中,     -y        代表取消用户交互过程,直接执行指令;     2         代表I2C总线编号;     0x50    代表I2C设备从机地址,此处选择配置芯片的高256字节内容。 寄存器内容写入     如果向I2C设备中写入某字节,可输入指令i2cset -y 2 0x50 0x00 0x13     -y        代表曲线用户交互过程,直接执行指令     2         代表I2C总线编号     0x50    代表I2C设备地址,此处选择AT24C04的低256字节内容     0x00    代表存储器地址     0x13    代表存储器地址中的具体内容 寄存器内容读出
[plain] view plain copy
  1. pi@raspberrypi:~$ i2cget -y 2 0x50 0x00
  2. 0x13
    如果从I2C从设备中读出某字节,可输入执行i2cget -y 2 0x50 0x00,可得到以下反馈结果       -y        代表曲线用户交互过程,直接执行指令     2         代表I2C总线编号     0x50    代表I2C设备地址,此处选择AT24C04的低256字节内容     0x00    代表存储器地址

原文来自:http://blog.chinaunix.net/uid-17188120-id-5767220.html

本文地址: https://www.linuxprobe.com/linux-comes-with-i2c-tools.html编辑:郑帅,审核员:逄增宝

本文原创地址:https://www.linuxprobe.com/linux-comes-with-i2c-tools.html

标签:00,i2c,--,总线,ff,linux,自带,I2C
From: https://www.cnblogs.com/linuxpro/p/17673618.html

相关文章

  • 如何扩容Linux文件系统?看这里↓↓↓
    一、在虚拟机中添加一块新磁盘注意:如果是未关机的状态下,添加完新的虚拟磁盘需要重启才能生效查看当前系统内的磁盘数量,确认我们新添加的磁盘能正常显示了fdisk-l二、为新添加的磁盘创建分区fdisk/dev/sdb命令(输入m获取帮助):n #输入n创建分区分区类型p主分区(0......
  • Linux中进程相关的API
    在Linux中,进程控制相关的API非常多。以下是一些常用的进程控制相关的系统调用(syscalls)和库函数:创建和终止进程:fork():创建一个新进程,这是创建新进程的最常用方法。vfork():类似于fork(),但有一些差异,主要用于exec调用之前。exec():系列函数(如execl(),execp(),execle()......
  • Linux安装fail2ban
    1、环境:centos7 2、安装fail2banyum-yinstallepel-release#epel库里就有fail2ban直接安装epel库就可以使用yum-yinstallfail2ban#安装fail2ban3、配置fail2ban贴上官方文档:http://www.fail2ban.org/wiki/index.php/MANUAL_0_......
  • Linux系统之jq工具的基本使用
    (Linux系统之jq工具的基本使用)一、jq工具介绍1.jq工具简介jq是一款轻量级的命令行json处理工具,可以帮助用户轻松处理json格式的数据。它可以从标准输入读取json数据,也可以从文件中读取。同时,它支持各种查询和过滤操作,例如选择、过滤、转换、排序和格式化等。2.jq工具的特......
  • linux shell脚本:创建数据库、数据库同名用户及赋权
    调用脚本如果mysql中已经有了一个mydb0831,会先drop掉,再创建一个空的mydb0831库,同时创建一个名为mydb0831的用户,对这个mydb0831库拥有所有权限。如果机器里未安装mysql,脚本执行会报错。可以从其他相同操作系统安装了mysql的机器里/usr/bin/下复制mysql过来,赋予可执行权限,即可。./cr......
  • Linux文件系统及存储
                   ......
  • 在linux上部署lavavel项目提示log目录没权限的问题
    Thestreamorfile"/data/www/laravel/storage/logs/laravel.log"couldnotbeopened:failedtoopenstream:PermissiondenieWeb服务器用户和组依赖于你的Web服务器和操作系统。找出你的Web服务器用户和组使用以下命令的内容。对于nginx使用: ......
  • Linux less 命令
    less与more类似,less可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。语法less[参数]文件参数说明:-b<缓冲区大小>设置缓冲区的大小-e当文件显示结束后,自动离开-f强迫打开特殊文件,例如外围设备代号、目录和二进制文件-g只标志最后搜索的关键词-i忽略搜......
  • Rocky_linux9网卡启动失败问题记录
    一、故障场景之前虚拟机一直是可以上网的,昨天正常关机后第二天开机网卡始终启动不了。开始排查问题查看网卡信息,发现获取不到IP地址查看网卡状态时发现处于未连接状态nmclicshow二、尝试启动网卡1)直接启用网卡nmclicupens37启动失败出现报错信息,连接激活失败,找不到适合此连接......
  • linux yum源配置
    一、配置本地光盘镜像源1、挂载光盘镜像mount/dev/sr0/mnt/cdrom2、修改yum源配置文件[root@yum~]#vim/etc/yum.repos.d/CentOS7.9.repo[base-local]本源的名称name名称baseurl源路径enabled是否启用1-开启0-不开启gpgcheck是否安全检测1-开启0-不开启gp......