OpenHarmony开源社区
直播中

卿小小_9e6

7年用户 2184经验值
擅长:可编程逻辑
私信 关注
[经验]

【触觉智能 Purple Pi开发板试用】+02.I2C测试(zmj)

【触觉智能 Purple Pi开发板试用】+02.I2C测试(zmj)

Purple Pi开发板通过J12排针提供了丰富的GPIO接口,包括UART、SPI、I2C、GPIO等(还包括DC5V、DC3.3V、GND)。

本节主要测试Purple Pi开发板的对外I2C接口。

1. I2C接口

1.1 I2C接口简介

//------I2C总线简介

I2C总线(Inter IC bus)是由Philips公司开发的一种通用数据总线。

两根通信线:SCL(Serial Clock串行时钟线)、SDA(Seriak Data串行数据线)。

工作模式为同步、半双工,带数据应答。

同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信)

通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。

1.2 Purple_Pi开发板的I2C接口

Purple Pi开发板提供了两组I2C接口,此处主要测试第一组HW-I2C。

  • 第一组HW I2C对应pad是PAD_TTL1/ PAD_TTL2,对应节点是/dev/i2c-0;
  • 第二组HW I2C对应pad是PAD_HDMITX_SCL/PAD_HDMITX_SDA,对应节点是/dev/i2c-1。
序号 I2C序号 时钟SCL 数据SDA 设备号dev
1 HW I2C group0 PAD_TTL1 PAD_TTL2 /dev/i2c-0
2 HW I2C group1 PAD_HDMITX_SCL PAD_HDMITX_SDA /dev/i2c-1

2. I2C读写存储模块AT24C02

2.1 AT24C02简介

AT24C02作为一种non-volatile(非易失性存储器),可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息。它的内存存取空间容量是2048bit (2kbit/256Bytes),由每页8Bytes/64bit、共计32页组成。它具有两线I2C接口,提供双向通信协议。通过把WP引脚接地,可以格式化存储器。此处测试一款已经焊接好AT24C02的EEPROM存储模块。

//------AT24C02
a.接口:I2C
b.器件地址:7bit从机地址,1010xxx
c.默认地址:0x50

image-20221004144501033.png

//------AT24C02结构简介
X DEC-译码器,左边是地址线,输入译码器又回来。
SERIAL MUX-串行数据选择端,借助Y DEC(Y译码器)通过D(out)/ACK LOGIC一位一位的输出出去;
DATA WORD ADDR/COUNTER-用来设置地址,内部设有存储地址的寄存器,每写入或读出一个地址,这个寄存器会自动加一,如果读出不指定地址的话,它默认把寄存器的数据拿出来。

image-20221004154209431.png

2.2 测试

I2C总线扫描设备节点使用i2cdetec指令,I2C总线设备写入使用的是i2cset指令,读取使用的是i2cget指令。

//------测试流程
a.扫描I2C总线/列出所有I2C设备节点:i2cdetect -l
|---i2c-1   i2c    Sstar I2C adapter 1    I2C adapter
|---i2c-0   i2c    Sstar I2C adapter 0    I2C adapter
b.扫描I2C-0总线设备:i2cdetect -y 0
c.读取I2C-0总线的0x50设备:地址0x10,数值0xff
i2cget -f -y 0x0 0x50
|---0xff
d.写入I2C-0总线的0x50设备:地址0x10,数值0x5a:
i2cset -f -y 0x0 0x50 0x10 0x5a b
e.重新读取,发现已经变成了0x5a。
i2cget -f -y 0x0 0x50
|---0x5a
//------关于i2cdump
i2cdump可以批量获取I2C总线上的设备数值。

image-20221004154912545.png

3. I2C读取温度传感器LM75

3.1 LM75简介

LM75A/LM75B是一个高速I2C接口的温度传感器,可以在-55℃~+125℃的温度范围内将温度直接转换为数字信号,并可实现0.125℃的精度。MCU可以通过I2C总线直接读取其内部寄存器中是数据。LM75有三个可选的逻辑地址引脚,使得同一总线上课同时连接8个器件而不发生地址冲突。

//------LM75
a.接口:I2C
b.器件地址:7bit从机地址,1001xxx
c.默认地址:0x48

image-20221004154256363.png

3.2** **测试

I2C总线扫描设备节点使用i2cdetec指令,I2C总线设备读取使用的是i2cget指令。

a.扫描I2C总线/列出所有I2C设备节点:i2cdetect -l
|---i2c-1   i2c    Sstar I2C adapter 1    I2C adapter
|---i2c-0   i2c    Sstar I2C adapter 0    I2C adapter
b.扫描I2C-0总线设备:i2cdetect -y 0
c.读取I2C-0总线的0x48设备:i2cget -f -y 0x0 0x48
|---0x1a(换算成十进制是26摄氏度)
d.将数值读取与格式转换通过shell脚本完成lm75.sh
#!/bin/sh# ------
getTEMP()
{
i2cget -f -y 0x0 0x48 0x00
}
​
# ------
temp='getTEMP' ;
Value=$($temp) ;
Result=$(printf "%d" "$Value") ;
​
# ------
echo "//------------------------------------------------"
date
echo ""
echo "Temperature read from LM75 @ i2c-0_0x48 : $Result ."
echo ""
read -n1 -p "Press any key to exit!"
echo ""
# ------

image-20221004135355296.png

//------END

更多回帖

发帖
×
20
完善资料,
赚取积分