[评测分享]
【更适合初学者的开发板ELF 1】04-I2C测试
#板卡评测
2269 人阅读
|
0 人回复
|
2023-11-25
TA的每日心情 | 慵懒 2025-8-6 21:07 |
|---|
签到天数: 313 天 连续签到: 1 天 [LV.8]以坛为家I
状元
- 积分
- 5300
|
本帖最后由 stm1024 于 2023-11-25 21:48 编辑
今日测试一下I2C接口,I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线,多用于主机和从机在数据量不大且传输距离短的场合下的主从通信,特别是芯片之间的通讯,这也符合其名字Inter-Integrated Circuit(集成电路总线)的描述。本次测试并不是简单的对着手册操作一下,也根据自己的理解,去扩展使用该开发板的功能。
1. 工具准备
i2c-tools 是一个专门调试 I2C 接口的开源工具, 可以获取挂载的设备及设备地址, 具有在对应的设备上读取和设置寄存器值等功能,可以使用交叉编译方式,将从网站下载的源码,在Ubuntu上通过交叉编译的方式获取其ARM环境下的工具,当然ELF-1已经帮我们移植好了,所以这里就跳过了编译的步骤,直接使用就可以了。
i2c-tools下面有好几个工具,其中:
i2cdetect用于检测总线;
i2cdump用于导出数据;
i2cget/i2cset用于获取/设置单个寄存器的值。
如果是自己编译的话,还有一个工具是i2ctransfer,这个是按照i2c的读写时序操作的。
2. 板载器件测试
首先,可以通过工具i2cdectct检测i2c总线:
i2cdetect -l
可见扫描到了两路I2C总线,分别是i2c-0和i2c-1,也就是0号和1号I2C总线。
分别看看两路i2c上有啥器件,命令为:
i2cdetect -y 0和
i2cdetect -y 1
结果如下图所示:
可以看到,在0号总线和1号总线有一个器件地址分别为0x38和0x1a的I2C从设备,注意这里I2C地址为7位地址,以0x38为例,其器件写地址为0x70,读地址为0x71,而且,通过查询硬件手册,可知I2C地址为0x38的是器件AHT20,0x1a是nau88c22,也就是音频芯片的:
音频这个比较复杂点儿,就用AHT20测试吧。
i2cdump 查看器件AHT20中寄存器范围在0x00-0x20之间寄存器的值:
i2cdump -f -y -r 0x00-0x20 0 0x38
3. 外挂器件测试
I2C是一个一主多从的总线,我们完全可以在I2C总线上挂上我们自己的I2C器件,例如最简单的I2C器件应该是EEPROM了,常见的AT24Cxx系列的,下面测试一下外接该模块,然后检测、读取,设置其中器件地址的值。
首先,通过提供的硬件手册,左边的40PIN有IIC2,可以知道12/14PIN分别对应的是SDA和SCL,然后前缀是IIC2,我推测这个应该是I2C1的总线(和CAN类似,PCB上的1和2分别对应了软件外设中的0和1):
找到以前的一个AT24C模块,然后接上去再说:
检测一下I2C-1总线,确实发现在0x50地址的器件,也就是咋们的AT24Cxx,这个模块下面的跳线帽还可以配置7位地址,
既然检测到了器件,那就先dump一下数据看看:
可以看到这个储存器中前16字节分别从0x00到0x0f。
我们也可以单独设置和读取某个地址的值,例如将存储空间0x20处的值修改为0x33:
命令分别如下:
i2cset -f -y 0x50 0x20 0x33 #设置地址0x20值为0x33
i2cdump -f -y 1 0x50 #导出数据
i2cget -f -y 1 0x50 0x20 #获取地址0x20的值
效果如下:
可见操作该器件功能正常。
OK,今日测试就到这里。
|
|
|
|
|
|
|
|
|