【树莓派5 测评】 + 17.I2C测试-LM75A(zmj) 
 
 
树莓派的GPIO接口功能十分丰富,支持I2C/UART/SPI等接口。此处测试I2C接口,测试目标为温度芯片LM75A。 
 
- //------树莓派手册
 
 - https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
 
 - //------LM75A连接I2C1
 
 - 3V3 power        ------  VCC
 
 - GPIO 2(SDA)        ------  SDA数据
 
 - GPIO 3(SCL) ------  SCL时钟
 
 - Ground      ------  GND
 
  复制代码 //------GPIO(40-Pin)状态 
 
 
1.        I2C简介   
1.1        I2C总线简介I2C总线(Inter IC bus)是由Philips公司开发的一种通用数据总线。 两根通信线:SCL(Serial Clock串行时钟线)、SDA(Seriak Data串行数据线)。 工作模式为同步、半双工,带数据应答。 同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信)通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。  1.2        I2C工具i2c-tools工具用来测试I2C总线十分便捷。 - //------安装I2C工具
 
 - sudo apt-get install -y python-smbus
 
 - sudo apt-get install -y i2c-tools
 
  复制代码 1.2        I2C总线检测通过“i2cdetect -l”可以扫描I2C总线,然后依次读取每个I2C总线设备列表,完成I2C总线检测。 //------检测脚本:check_i2c.sh - zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ cat check_i2c.sh
 
 - #!/bin/bash
 
  
- echo "//------************************************************"
 
 - # ------
 
 - echo "//------There are 4 i2c devices"
 
 - echo "//---cmd: ls /dev/i2c/*"
 
 - echo "//---result:"
 
 - ls /dev/ | grep "i2c"
 
 - #       i2c-1
 
 - #       i2c-11
 
 - #       i2c-12
 
 - ls /dev/i2c*
 
 - # ------
 
 - echo "//------You'll detect 2 i2c adapter"
 
 - echo "//---cmd: i2cdetect -l"
 
 - echo "//---result:"
 
 - i2cdetect -l
 
 - #       i2c-1    i2c             Renesas RIIC adapter                    I2C adapter
 
 - #       i2c-11   i2c             Renesas RIIC adapter                    I2C adapter
 
 - #       i2c-12   i2c             Renesas RIIC adapter                    I2C adapter
 
 - # ------
 
 - echo "//------Now Test spidev2.0...."
 
 - echo "//---cmd: i2cdetect -r -y 1/11/12"
 
 - echo "//---result:"
 
 - echo "//--- i2c-1"
 
 - i2cdetect -r -y 1
 
 - echo "//--- i2c-11"
 
 - i2cdetect -r -y 11
 
 - echo "//--- i2c-12"
 
 - i2cdetect -r -y 12
 
 - echo "//------************************************************"
 
  
- zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ source ./check_i2c.sh
 
 - //------************************************************
 
 - //------There are 4 i2c devices
 
 - //---cmd: ls /dev/i2c/*
 
 - //---result:
 
 - i2c-1
 
 - i2c-11
 
 - i2c-12
 
 - /dev/i2c-1  /dev/i2c-11  /dev/i2c-12
 
 - //------You'll detect 2 i2c adapter
 
 - //---cmd: i2cdetect -l
 
 - //---result:
 
 - i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
 
 - i2c-11  i2c             107d508200.i2c                          I2C adapter
 
 - i2c-12  i2c             107d508280.i2c                          I2C adapter
 
 - //------Now Test spidev2.0....
 
 - //---cmd: i2cdetect -r -y 1/11/12
 
 - //---result:
 
 - //--- i2c-1
 
 -      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 
 - 00:                         -- -- -- -- -- -- -- --
 
 - 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
 
 - 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 70: -- -- -- -- -- -- -- --
 
 - //--- i2c-11
 
 -      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 
 - 00:                         -- -- -- -- -- -- -- --
 
 - 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- -- --
 
 - 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 70: -- -- -- -- -- -- -- --
 
 - //--- i2c-12
 
 -      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 
 - 00:                         -- -- -- -- -- -- -- --
 
 - 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
 - 70: -- -- -- -- -- -- -- --
 
 - //------************************************************
 
 - zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$
 
  复制代码 2.        I2C读取温度传感器LM75  
2.1         LM75简介LM75A/LM75B是一个高速I2C接口的温度传感器,可以在-55℃~+125℃的温度范围内将温度直接转换为数字信号,并可实现0.125℃的精度。MCU可以通过I2C总线直接读取其内部寄存器中是数据。LM75有三个可选的逻辑地址引脚,使得同一总线上课同时连接8个器件而不发生地址冲突。   - //------LM75
 
 - a.接口:I2C
 
 - b.器件地址:7bit从机地址,1001xxx
 
 - c.默认地址:0x48
 
  复制代码 2.2        测试I2C总线扫描设备节点使用i2cdetec指令,I2C总线设备读取使用的是i2cget指令,i2cdump可以批量获取I2C总线上的设备数值。 - a.扫描I2C总线/列出所有I2C设备节点:i2cdetect -l
 
 - i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
 
 - i2c-11  i2c             107d508200.i2c                          I2C adapter
 
 - i2c-12  i2c             107d508280.i2c                          I2C adapter
 
 - b.扫描I2C-1总线设备:i2cdetect -y 1
 
 - c.读取I2C-1总线的0x48设备:i2cget -f -y 0x1 0x48
 
 - |---0x1a(换算成十进制是26摄氏度)
 
 - d.将数值读取与格式转换通过shell脚本完成lm75.sh,代码如下:
 
 - #!/bin/sh
 
 - # ------
 
 - getTEMP()
 
 - { 
 
 - i2cget -f -y 0x1 0x48 0x00
 
 - } #
 
 - ------
 
 - temp='getTEMP' ;
 
 - Value=$($temp) ;
 
 - Result=$(printf "%d" "$Value") ;
 
 - # ------
 
 - echo "//------------------------------------------------"
 
 - date
 
 - echo ""
 
 - echo "Temperature read from LM75 @ i2c-1_0x48 : $Result ."
 
 - echo ""
 
 - read -n1 -p "Press any key to exit!"
 
 - echo ""
 
 - # ------
 
 - e.使用i2cdump工具获取i2c-3总线的LM75(0x48)所有寄存器值,即多次温度值。
 
 - zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ cat lm75.sh
 
 - #!/bin/sh
 
  
- # ------
 
 - getTEMP()
 
 - {
 
 - i2cget -f -y 0x1 0x48 0x00
 
 - }
 
  
- # ------
 
 - temp='getTEMP' ;
 
 - Value=$($temp) ;
 
 - Result=$(printf "%d" "$Value") ;
 
  
- # ------
 
 - echo "//------------------------------------------------"
 
 - date
 
 - echo ""
 
 - echo "Temperature read from LM75 @ i2c-1_0x48 : $Result ."
 
 - echo ""
 
 - read -n1 -p "Press any key to exit!"
 
 - echo ""
 
  
- # ------
 
 - zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ source ./lm75.sh
 
 - //------------------------------------------------
 
 - Tue 30 Apr 01:23:34 CST 2024
 
  
- Temperature read from LM75 @ i2c-1_0x48 : 22 .
 
  
- Press any key to exit!
 
 - zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ i2cdump -f -y 1 0x48
 
 - No size specified (using byte-data access)
 
 -      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
 
 - 00: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 10: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 20: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 30: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 40: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 50: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 60: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 70: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 80: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - 90: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - a0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - b0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - c0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - d0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - e0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - f0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
 
 - zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$
 
  复制代码//------SHELL脚本测试结果: //------end  
  
 |