当前位置: 首页 > 科技观察

Linux自带i2c工具使用

时间:2023-03-12 16:33:44 科技观察

I2C总线被全球50多家公司的1000+款IC所采用,已经成为世界标准。此外,I2C总线兼容多种不同的控制总线,如SMBus(系统管理总线)、PMBus(电源管理总线)、IPMI(智能平台管理总线)、DDC(显示数据通道)和ATCA(高级电信架构).如果我没记错的话,Linux中的I2C框架是完全支持SMBus的。想要全面了解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、面向应用的电路:如广播和视频系统、温度传感器和智能卡的数字调谐和信号处理电路。为了使这些共性对系统设计者和设备制造商都有用。为了最大限度地提高硬件的有效性和电路的简单性,飞利浦半导体开发了一种简单的双向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的管脚会更少,面积PCB会更小,成本也会降低。2.完整I2C总线协议不需要地址译码器或其他逻辑电路。这些只是一些好处。另外,符合I2C总线的IC会增加系统设计的灵活性。IC升级方便,如需要更大的ROM,只需要选择ROM更大的单片机即可。对IC设计人员的好处:微控制器设计人员通常必须考虑输出引脚。I2C协议允许连接各种外设。另外,I2C接口的微控制器在市场上比较流行,因为有很多外设可供选择。I2c扫描可以通过i2cdetect-l命令检查TX1上的I2C总线,返回结果来看TX1有7个I2C总线ubuntu@tegra-ubuntu:/proc/device-tree$i2cdetect-li2c-0unknownTegraI2CadapterN/Ai2c-1unknownTegraI2CadapterN/Ai2c-2unknownTegraI2CadapterN/Ai2c-3unknownTegraI2CadapterN/Ai2c-4unknownTegraI2CadapterN/Ai2c-5unknownTegraI2CadapterN/Ai2c-6unknownTegraI2CadapterN/AI2CDeviceQuery如果有I2Cslave设备挂载在总线上,可以通过idetect来扫描I2C总线上的所有设备可以通过控制台输入i2cdetect-y2,结果如下。ubuntu@tegra-ubuntu:/proc/device-tree$sudoi2cdetect-y20123456789abcdef00:------------------------10:--------------------------------20:-------------------------------30:--------------------------------40:-------------------------------50:50------------57-----------------60:--------------------------------70:----------------注1:-y为可选参数,如果有-y参数,会有一个用户交互过程,表示希望用户停止使用I2C总线。如果写了这个参数,就没有这个交互过程,一般在脚本中使用这个参数。注2:这里I2C总线上挂载了两个设备PCF8574和AT24C04,slave地址0x50为boardconfigure,slave地址0x57为AT24C04。寄存器内容导出i2cdump命令可以导出I2C设备中所有的寄存器内容。例如输入i2cdump-y20x50得到如下内容:ubuntu@tegra-ubuntu:/proc/device-tree$sudoi2cdump-y20x50Nosizespecified(usingbyte-dataaccess)0123456789abcdef0123456789abcdef00:01000d008408e803044a00000000?.0?.0?.0.....10:000035023639392d38323138302d3130..5?699-82180-1020:30302d343130204a2e30ffffffffffff00-410J.0......30:ffff352d664b0400362d664b04000000..5-fK?.6-fK?...40:00000000372d664b0400303332333231....7-fK?.03232150:36313330353635ffffffffffffffffff6130565...60:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffK?.6-fK?......70:ffffffffffffffffffffffffffffffff...80:ffffffffffffffffffffffffffffffffffffffffffff4e5643421c004d310000...NVCB?.M1..a0:352d664b0400362d664b0400372d664b5-fK?.6-fK?.7-fKb0:0400ffffffffffffffffffffffffffffff?...c0:ffffffffffffffffffffffffffffffffffffffffffffffffffff.....d0:ffffffffffffffffffffffffffffffffffff...e0:ffffffffffffffffffffffffffffffffff...f0:ffffffffffffffffffffffffffffffff96.......?i2cdump-y20x50说明,-y表示取消用户交互过程,直接执行命令;2表示I2C总线编号;0x50表示I2C设备的从机地址,这里选择写入配置芯片的高256字节内容寄存器内容。如果向I2C设备写入某个字节,可以输入命令i2cset-y20x500x000x13-y表示曲线的用户交互过程,直接执行命令2表示I2C总线号0x50表示I2C设备的地址。这里选择AT24C04的低256字节。0x00代表内存地址。0x13代表内存地址中的具体内容。读取寄存器内容[plain]查看plaincopypi@raspberrypi:~$i2cget-y20x500x000x13如果从I2C从设备读取某个字节,可以输入执行i2cget-y20x500x00,你可以得到如下反馈结果-y代表曲线的用户交互过程,直接执行命令2代表I2C总线号0x50代表I2CDevice地址,这里选择AT24C04的低256字节0x00代表内存地址