回答

收藏

[评测分享] 【ELF 2学习板】08.I2C接口编程及测试(1)

#板卡评测 #板卡评测 1568 人阅读 | 0 人回复 | 2025-01-19

本帖最后由 stm1024 于 2025-1-19 22:45 编辑

OK,今日抽空测试了一下I2C接口的功能。
关于I2C接口,或者有时候被IIC接口,其通讯原理的硬件及协议的时序等,这里就不再重复了,相信很多单片机爱好者或者行业大佬在各种类型的MCU入门阶段就已经了然于胸了,这里直接切入正题。
1. 基本硬件环境
首先是可以使用i2c-tools查看咱们这个ELF2-RK3588开发板的I2C接口,i2c-tools这个工具包中提供了好几个工具,用于探测I2C总线,以及RK3588作为主控制器,向总线上的其他从设备之间交换数据。关于这个工具包的具体使用方法,我在前面RK3568、ELF-1等的评测中也有介绍到,这里不再重复凑字数,这里是传送门:I2C通讯测试:/forum/forum.php?mod=viewthread&tid=231513
I2C测试:/forum/forum.php?mod=viewthread&tid=229700
这里先试用i2cdetect检测一下有哪些I2C总线:

可以看到有很多路I2C总线,包括了i2c-0、 i2c-1、 i2c-2、 i2c-3、 i2c-4、 i2c-5、 i2c-7、 i2c-9、 i2c-10这9路(没有6和8)。
根据手册,RTC挂在I2C-5总线上,因此,我们看看第5路的总线上的设备:

可以看到0x32处具有UU的标识,也就是RTC的地址,表明此地址上既有设备也有驱动,如果只有数字,则表示检测到了设备但是没有对应驱动,出现--当然是表示没检测到设备或者驱动。
然后看看这个RTC设备的寄存器内容:

我们可以通过i2c-set或者i2c-get来修改寄存器的地址,不过之前都演示过,这里就不再重复了。

2. C语言编程
参考ELF提供的手册《系统应用编程》中的相关章节,以及所提供I2C驱动代码,我整理了一个C语言程序:
这个程序只是单纯的将设备的寄存器地址0x20中写入一个命令行传递的数据,然后回读。为什么是0x20呢?因为通过手册我们可以发现,这段地址是用户数据区域:
所以可以放心使用。
然后接着使用开发板的自带的gcc,编译,并运行看看:

因为十进制170就是十六进制的0xaa,因此认为显示数据写入及回读成功,我们使用i2cdump再看一下:

可以看到这个地址中的数据已经被得到了更新。

OK,今日测试到此为止,下次我把一些I2C的传感器翻出来以后,再整一两篇应用的测评。



分享到:
回复

使用道具 举报

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

本版积分规则

关闭

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