查看: 1424|回复: 1

[评测分享] 【树莓派5 测评】 + 17.I2C测试-LM75A(zmj)

[复制链接]
  • TA的每日心情
    奋斗
    前天 14:03
  • 签到天数: 249 天

    连续签到: 2 天

    [LV.8]以坛为家I

    发表于 2024-4-30 17:00:37 | 显示全部楼层 |阅读模式
    分享到:
    【树莓派5 测评】 + 17.I2C测试-LM75A(zmj)


    树莓派的GPIO接口功能十分丰富,支持I2C/UART/SPI等接口。此处测试I2C接口,测试目标为温度芯片LM75A。

    1. //------树莓派手册
    2. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
    3. //------LM75A连接I2C1
    4. 3V3 power        ------  VCC
    5. GPIO 2(SDA)        ------  SDA数据
    6. GPIO 3(SCL) ------  SCL时钟
    7. Ground      ------  GND
    复制代码
    //------GPIO(40-Pin)状态
    image-20240430011208313.png

    1.        I2C简介  
    1.1        I2C总线简介
    I2C总线(Inter IC bus)是由Philips公司开发的一种通用数据总线。
    两根通信线:SCL(Serial Clock串行时钟线)、SDA(Seriak Data串行数据线)。
    工作模式为同步、半双工,带数据应答。
    同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信)通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。
    image-20240429210739706.png
    1.2        I2C工具
    i2c-tools工具用来测试I2C总线十分便捷。
    1. //------安装I2C工具
    2. sudo apt-get install -y python-smbus
    3. sudo apt-get install -y i2c-tools
    复制代码
    1.2        I2C总线检测
    通过“i2cdetect -l”可以扫描I2C总线,然后依次读取每个I2C总线设备列表,完成I2C总线检测。
    //------检测脚本:check_i2c.sh
    1. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ cat check_i2c.sh
    2. #!/bin/bash

    3. echo "//------************************************************"
    4. # ------
    5. echo "//------There are 4 i2c devices"
    6. echo "//---cmd: ls /dev/i2c/*"
    7. echo "//---result:"
    8. ls /dev/ | grep "i2c"
    9. #       i2c-1
    10. #       i2c-11
    11. #       i2c-12
    12. ls /dev/i2c*
    13. # ------
    14. echo "//------You'll detect 2 i2c adapter"
    15. echo "//---cmd: i2cdetect -l"
    16. echo "//---result:"
    17. i2cdetect -l
    18. #       i2c-1    i2c             Renesas RIIC adapter                    I2C adapter
    19. #       i2c-11   i2c             Renesas RIIC adapter                    I2C adapter
    20. #       i2c-12   i2c             Renesas RIIC adapter                    I2C adapter
    21. # ------
    22. echo "//------Now Test spidev2.0...."
    23. echo "//---cmd: i2cdetect -r -y 1/11/12"
    24. echo "//---result:"
    25. echo "//--- i2c-1"
    26. i2cdetect -r -y 1
    27. echo "//--- i2c-11"
    28. i2cdetect -r -y 11
    29. echo "//--- i2c-12"
    30. i2cdetect -r -y 12
    31. echo "//------************************************************"

    32. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ source ./check_i2c.sh
    33. //------************************************************
    34. //------There are 4 i2c devices
    35. //---cmd: ls /dev/i2c/*
    36. //---result:
    37. i2c-1
    38. i2c-11
    39. i2c-12
    40. /dev/i2c-1  /dev/i2c-11  /dev/i2c-12
    41. //------You'll detect 2 i2c adapter
    42. //---cmd: i2cdetect -l
    43. //---result:
    44. i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
    45. i2c-11  i2c             107d508200.i2c                          I2C adapter
    46. i2c-12  i2c             107d508280.i2c                          I2C adapter
    47. //------Now Test spidev2.0....
    48. //---cmd: i2cdetect -r -y 1/11/12
    49. //---result:
    50. //--- i2c-1
    51.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    52. 00:                         -- -- -- -- -- -- -- --
    53. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    54. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    55. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    56. 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
    57. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    58. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    59. 70: -- -- -- -- -- -- -- --
    60. //--- i2c-11
    61.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    62. 00:                         -- -- -- -- -- -- -- --
    63. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    64. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    65. 30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- -- --
    66. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    67. 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    68. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    69. 70: -- -- -- -- -- -- -- --
    70. //--- i2c-12
    71.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    72. 00:                         -- -- -- -- -- -- -- --
    73. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    74. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    75. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    76. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    77. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    78. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    79. 70: -- -- -- -- -- -- -- --
    80. //------************************************************
    81. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$
    复制代码
    2.        I2C读取温度传感器LM75
    2.1         LM75简介
    LM75A/LM75B是一个高速I2C接口的温度传感器,可以在-55℃~+125℃的温度范围内将温度直接转换为数字信号,并可实现0.125℃的精度。MCU可以通过I2C总线直接读取其内部寄存器中是数据。LM75有三个可选的逻辑地址引脚,使得同一总线上课同时连接8个器件而不发生地址冲突。  
    1. //------LM75
    2. a.接口:I2C
    3. b.器件地址:7bit从机地址,1001xxx
    4. c.默认地址:0x48
    复制代码
    2.2        测试
    I2C总线扫描设备节点使用i2cdetec指令,I2C总线设备读取使用的是i2cget指令,i2cdump可以批量获取I2C总线上的设备数值。
    1. a.扫描I2C总线/列出所有I2C设备节点:i2cdetect -l
    2. i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
    3. i2c-11  i2c             107d508200.i2c                          I2C adapter
    4. i2c-12  i2c             107d508280.i2c                          I2C adapter
    5. b.扫描I2C-1总线设备:i2cdetect -y 1
    6. c.读取I2C-1总线的0x48设备:i2cget -f -y 0x1 0x48
    7. |---0x1a(换算成十进制是26摄氏度)
    8. d.将数值读取与格式转换通过shell脚本完成lm75.sh,代码如下:
    9. #!/bin/sh
    10. # ------
    11. getTEMP()
    12. {
    13. i2cget -f -y 0x1 0x48 0x00
    14. } #
    15. ------
    16. temp='getTEMP' ;
    17. Value=$($temp) ;
    18. Result=$(printf "%d" "$Value") ;
    19. # ------
    20. echo "//------------------------------------------------"
    21. date
    22. echo ""
    23. echo "Temperature read from LM75 @ i2c-1_0x48 : $Result ."
    24. echo ""
    25. read -n1 -p "Press any key to exit!"
    26. echo ""
    27. # ------
    28. e.使用i2cdump工具获取i2c-3总线的LM75(0x48)所有寄存器值,即多次温度值。
    29. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ cat lm75.sh
    30. #!/bin/sh

    31. # ------
    32. getTEMP()
    33. {
    34. i2cget -f -y 0x1 0x48 0x00
    35. }

    36. # ------
    37. temp='getTEMP' ;
    38. Value=$($temp) ;
    39. Result=$(printf "%d" "$Value") ;

    40. # ------
    41. echo "//------------------------------------------------"
    42. date
    43. echo ""
    44. echo "Temperature read from LM75 @ i2c-1_0x48 : $Result ."
    45. echo ""
    46. read -n1 -p "Press any key to exit!"
    47. echo ""

    48. # ------
    49. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ source ./lm75.sh
    50. //------------------------------------------------
    51. Tue 30 Apr 01:23:34 CST 2024

    52. Temperature read from LM75 @ i2c-1_0x48 : 22 .

    53. Press any key to exit!
    54. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$ i2cdump -f -y 1 0x48
    55. No size specified (using byte-data access)
    56.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    57. 00: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    58. 10: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    59. 20: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    60. 30: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    61. 40: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    62. 50: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    63. 60: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    64. 70: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    65. 80: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    66. 90: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    67. a0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    68. b0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    69. c0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    70. d0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    71. e0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    72. f0: 16 00 4b 50 ff ff ff ff 16 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    73. zhaomeijing@raspberrypi5:~/workspace/18_gpio/i2c$
    复制代码
    //------SHELL脚本测试结果:
    image-20240430012602500.png
    //------end


    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 14:03
  • 签到天数: 249 天

    连续签到: 2 天

    [LV.8]以坛为家I

     楼主| 发表于 2024-4-30 17:28:53 | 显示全部楼层
    补充一张LM75A连接图:

    image-20240430172712089.png

    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 21:35 , Processed in 0.140896 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.