回答

收藏

[评测分享] 【米尔-MYD-LR3568-GK开发板--试用评测】5——I2C通讯测试

#板卡评测 #板卡评测 1142 人阅读 | 0 人回复 | 2024-11-13

本帖最后由 stm1024 于 2024-11-13 23:10 编辑

今日测试一下I2C接口,I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线,多用于主机和从机在数据量不大且传输距离短的场合下的主从通信,特别是芯片之间的通讯,这也符合其名字Inter-Integrated Circuit(集成电路总线)的描述。本次测试并不是简单的对着手册操作一下,也根据自己的理解,去扩展使用该开发板的功能。

1.  环境准备
i2c-tools 是一个专门调试 I2C 接口的开源工具, 可以获取挂载的设备及设备地址, 具有在对应的设备上读取和设置寄存器值等功能,可以使用交叉编译方式,将从网站下载的源码,在Ubuntu上通过交叉编译的方式获取其ARM环境下的工具,当然开发板已经帮我们移植好了,所以这里就跳过了编译的步骤,直接使用就可以了。
i2c-tools下面有好几个工具,其中:
i2cdetect用于检测总线;
i2cdump用于导出数据;
i2cget/i2cset用于获取/设置单个寄存器的值。
如果是自己编译的话,还有一个工具是i2ctransfer,这个是按照i2c的读写时序操作的。
通过使用i2cdetect -l查看总线信息:

可以选择其中的一个I2C通道,列举其总线上挂着的设备,例如以I2C7为例:

这里需要说明一下返回的字符说明:
1.--表示这个地址被检测到,但是没有芯片应答;
2. UU表示这个地址被内核驱动使用;
3. 数字表示这个地址被芯片使用并应答。

注意:有UU表示该地址被内核驱动占用,但并不意味着一定有设备响应。具体有没有设备不一定,不是所有的i2c设备都能探测到,有些16位寄存器i2c设备无法探测到,可以尝试使用i2ctransfer去尝试读写来判断当前地址是否存在设备。

2. 硬线连接
通过查阅硬件手册,可知在J13上有I2C_5可供使用:

可以使用J13上的2,3,5,6号针脚,与AT24C02进行连接。我这里选择I2C器件是经典的AT24C02,七位I2C地址是0x50。接线情况如下:

具体而言是红色接VCC5,绿色接GND,**色接的SDA,橙色接的SCL。

3. 通讯测试
通过i2cdump可以查看器件中的数据,先看看这个命令怎么使用:
那么可以构造命令如下:
  1. i2cdump -f -y -r 0x00-0x1f -a 5 0x50
复制代码
用于读取器件的前16个寄存器中的数据,结果如下:
写数据可以使用i2cset,同样试试看这个命令如何使用:
如果需要设置0x10地址中的值为0xaa,可以构造命令如下:
  1. root@myd-lr3568x:~# i2cset -f -y 5 0x50 0x10 0xaa
  2. root@myd-lr3568x:~# i2cdump -f -y 5 0x50 # display
复制代码

运行效果如下:


读取一个数据还可以简单使用i2cget:


使用i2cset还可以批量设置数据:

今日测试先到这里。


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条