查看: 1411|回复: 0

[评测分享] 【米尔电子MYC-YG2LX开发板测评】+06.I2C功能测试(zmj)

[复制链接]
  • TA的每日心情
    奋斗
    前天 10:11
  • 签到天数: 250 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2023-7-1 15:38:21 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 赵美京₁₉⁸⁸⁸ 于 2023-7-1 16:43 编辑

    【米尔电子MYC-YG2LX开发板测评】+06.I2C功能测试(zmj)

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

    本章节主要测试J20排针的I2C-3接口,以及RTC对应的I2C-1接口。


    1.        I2C接口1.1        I2C接口简介

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

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

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

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

    同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信)通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。  

    1.2        MYD-YG2LX开发板的I2C接口

    按照官方资料,MYD-YG2LX开发板提供了一共四组I2C接口;实测其中三组I2C接口(I2C-0/I2C-1/I2C-3)功能正常,I2C-2接口异常。

    此处主要测试第四组的I2C-3。

    image-20230701130308364.png

    image-20230701130444223.png


    1.3        I2C总线检测

    通过“i2cdetect -l”可以扫描I2C总线,然后依次读取每个I2C总线设备列表,完成I2C总线检测。


    //------检测脚本

    1. root@myir-yg2lx:~/zmj_ws/2_base_function/i2c_dev# cat a_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-0
    10. #       i2c-1
    11. #       i2c-2
    12. #       i2c-3
    13. ls /dev/i2c*
    14. # ------
    15. echo "//------You'll detect 4 i2c adapter"
    16. echo "//---cmd: i2cdetect -l"
    17. echo "//---result:"
    18. i2cdetect -l
    19. #       i2c-3   i2c             Renesas RIIC adapter                    I2C adapter
    20. #       i2c-1   i2c             Renesas RIIC adapter                    I2C adapter
    21. #       i2c-2   i2c             Renesas RIIC adapter                    I2C adapter
    22. #       i2c-0   i2c             Renesas RIIC adapter                    I2C adapter
    23. # ------
    24. echo "//------Now Test spidev2.0...."
    25. echo "//---cmd: i2cdetect -r -y 0~3"
    26. echo "//---result:"
    27. echo "//--- i2c-0"
    28. i2cdetect -r -y 0
    29. echo "//--- i2c-1"
    30. i2cdetect -r -y 1
    31. echo "//--- i2c-2"
    32. i2cdetect -r -y 2
    33. echo "//--- i2c-3"
    34. i2cdetect -r -y 3
    35. echo "//------************************************************"
    36. root@myir-yg2lx:~/zmj_ws/2_base_function/i2c_dev#
    复制代码

    //------I2C总线检测结果(I2C-2异常)

    1. root@myir-yg2lx:~/zmj_ws/2_base_function/i2c_dev# source ./a_check_i2c.sh
    2. //------************************************************
    3. //------There are 4 i2c devices
    4. //---cmd: ls /dev/i2c/*
    5. //---result:
    6. i2c-0
    7. i2c-1
    8. i2c-3
    9. /dev/i2c-0  /dev/i2c-1  /dev/i2c-3
    10. //------You'll detect 4 i2c adapter
    11. //---cmd: i2cdetect -l
    12. //---result:
    13. i2c-3   i2c             Renesas RIIC adapter                    I2C adapter
    14. i2c-1   i2c             Renesas RIIC adapter                    I2C adapter
    15. i2c-0   i2c             Renesas RIIC adapter                    I2C adapter
    16. //------Now Test spidev2.0....
    17. //---cmd: i2cdetect -r -y 0~3
    18. //---result:
    19. //--- i2c-0
    20.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    21. 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    22. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    23. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    24. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- --
    25. 40: -- -- -- -- -- -- -- -- UU UU UU 4b -- -- -- --
    26. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    27. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    28. 70: -- -- -- -- -- -- -- --
    29. //--- i2c-1
    30.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    31. 00:          -- -- -- -- -- -- -- UU -- -- -- -- --
    32. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    33. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    34. 30: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- --
    35. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    36. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    37. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    38. 70: -- -- -- -- -- -- -- --
    39. //--- i2c-2
    40. Error: Could not open file `/dev/i2c-2' or `/dev/i2c/2': No such file or directory
    41. //--- i2c-3
    42.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    43. 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    44. 10: -- -- 12 -- -- -- -- -- -- -- -- -- -- -- -- --
    45. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    46. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    47. 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
    48. 50: UU -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
    49. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 6f
    50. 70: -- -- -- -- -- -- -- --
    51. //------************************************************
    52. root@myir-yg2lx:~/zmj_ws/2_base_function/i2c_dev#
    复制代码


    image-20230701133055948.png


    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 Sstar I2C adapter 1 I2C adapter
    3. |---i2c-0 i2c Sstar I2C adapter 0 I2C adapter
    4. b.扫描I2C-0总线设备:i2cdetect -y 3
    5. c.读取I2C-0总线的0x48设备:i2cget -f -y 0x3 0x48
    6. |---0x1a(换算成十进制是26摄氏度)
    7. d.将数值读取与格式转换通过shell脚本完成lm75.sh
    8. #!/bin/sh
    9. # ------
    10. getTEMP()
    11. {
    12. i2cget -f -y 0x3 0x48 0x00
    13. } #
    14. ------
    15. temp='getTEMP' ;
    16. Value=$($temp) ;
    17. Result=$(printf "%d" "$Value") ;
    18. # ------
    19. echo "//------------------------------------------------"
    20. date
    21. echo ""
    22. echo "Temperature read from LM75 @ i2c-3_0x48 : $Result ."
    23. echo ""
    24. read -n1 -p "Press any key to exit!"
    25. echo ""
    26. # ------
    27. e.使用i2cdump工具获取i2c-3总线的LM75(0x48)所有寄存器值,即多次温度值。
    28. root@myir-yg2lx:~/zmj_ws/2_base_function/i2c_dev# i2cdump -f -y 3 0x48
    29. No size specified (using byte-data access)
    30.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    31. 00: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    32. 10: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    33. 20: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    34. 30: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    35. 40: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    36. 50: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    37. 60: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    38. 70: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    39. 80: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    40. 90: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    41. a0: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    42. b0: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    43. c0: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    44. d0: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    45. e0: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    46. f0: 1a 00 4b 50 ff ff ff ff 1a 00 4b 50 ff ff ff ff    ?.KP....?.KP....
    47. root@myir-yg2lx:~/zmj_ws/2_base_function/i2c_dev#
    复制代码


    image-20230701133756597.png


    3.        RTC

    RTC(Real-Time-Clock,实时时钟)功能是日常生活中应用最为广泛的消费类电子产品功能之一。它为人们提供精确的实时时间,或者为电子系统提供精确的时间基准。实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。有些时钟芯片为了在主电源掉电时还可以工作,需要外加电池供电。


    MYD-YG2LX开发板采用的外部 RTC(RX8025J)连接至I2C-1,RTC 的测试通常采用 Linux 系统常用的 hwclock 和 date 命令配合进行,下面测试将系统时间写入 RTC,读取 RTC 时间并设置为系统时间并进行时间掉电保持的测试,测试前需要把纽扣电池连接到开发板的 J21接口。  

    image-20230701150354493.png


    通常RTC时钟的使用方式为:  

    1. //------RTC时钟的使用方式之一
    2. a.当系统启动时,系统通过访问RTC获取硬件时间,然后更新为系统时间。
    3. b.当针对系统时间做出修改时,通过写入RTC保存时间,以便下次启动时使用新的系统时间。
    4. //------互联网授时
    5. 当前系统暂时缺少互联网授时功能,故不做展开测试。
    复制代码


    初始系统启动时,系统通过访问RTC获取硬件时间,然后更新为系统时间。


    当针对系统时间做出修改时,通过写入RTC保存时间,以便下次启动时使用新的系统时间。  

    1. //------RTC测试流程
    2. a.查看RTC设备
    3. ls -la /dev/rtc*
    4. b.查看CPU内部集成的RTC时钟(硬件时间)
    5. hwclock
    6. 或者
    7. hwclock -r
    8. c.查看系统时间(软件时间):与RTC时钟一致
    9. date
    10. d.修改系统时间(修改为2023年10月1日20点)
    11. date -s '2023.10.01-20:00:00'
    12. e.RTC时间修改为系统时间
    13. hwclock -w
    14. f.重新查看RTC时间,发现已经变为修改后的时间
    15. hwclock -r
    复制代码


    image-20230701152401397.png


    //------end










    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 11:44 , Processed in 0.120771 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.