zoukankan      html  css  js  c++  java
  • 树莓派 -- i2c学习 续(1) DeviceTree Overlay实例化rtc


    上文中讨论了通过sysfs来实例化i2c设备 (rtc ds3231)
    https://blog.csdn.net/feiwatson/article/details/81048616

    本文继续看看如何通过 DeviceTree Overlays来实例化rtc ds3231

    write dts

    首先,写一个dts

    /dts-v1/;
    /plugin/;
    / {
           compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
    
           fragment@0 {
              target = <&i2c1>;
              __overlay__ {
                    #address-cells = <1>;
                    #size-cells = <0>;
                    rtc@68 {
                            compatible = "maxim,ds3231";
                            reg = <0x68>;
                            #address-cells = <2>;
                            #size-cells = <1>;
                    };      
              };
           };
        };
    

    注:
    1. compatible = “maxim,ds3231”, 源码 drivers tc tc-ds1307.c中定义
    2. i2c1在archarmootdtscm283x.dtsi中定义

    保存为文件rasp-rtc.dts

    compile

    copy dts到树莓派中并编译,

    dtc -I dts -O dtb -o /boot/overlays/rasp-rtc.dtbo rasp-rtc.dts

    生成的.dtbo到/boot/overlays

    update /boot/config.txt

    首先要确认i2c是使能的。如果没有使能,通过raspi-config命令来使能。
    使能后在config.txt可以看到

    dtparam=i2c_arm=on

    增加下面内容至config.txt

    # Uncomment this to enable the rtc ds3231 
    dtoverlay=rasp-rtc

    重启

    reboot后,查看/dev可以看到rtc

    pi@raspberrypi:/dev $ ls -la | grep rtc
    lrwxrwxrwx  1 root root           4 Jul 16 13:49 rtc -> rtc0
    crw-------  1 root root    253,   0 Jul 16 13:49 rtc0
    

    测试

    pi@raspberrypi:/dev $ sudo hwclock --debug
    hwclock from util-linux 2.29.2
    Using the /dev interface to the clock.
    Assuming hardware clock is kept in UTC time.
    Waiting for clock tick...
    /dev/rtc does not have interrupt functions. Waiting in loop for time from /dev/rtc to change
    ...got clock tick
    Time read from Hardware Clock: 2018/07/16 14:13:13
    Hw clock time : 2018/07/16 14:13:13 = 1531750393 seconds since 1969
    Time since last adjustment is 1531750393 seconds
    Calculated Hardware Clock drift is 0.000000 seconds
    2018-07-16 14:13:12.176793+0000

    rtc driver Code

    rtc-ds1307.c中定义compatible

    #ifdef CONFIG_OF
    static const struct of_device_id ds1307_of_match[] = {
        {
            .compatible = "dallas,ds1307",
            .data = (void *)ds_1307
        },
        {
            .compatible = "dallas,ds1308",
            .data = (void *)ds_1308
        },
        {
            .compatible = "dallas,ds1337",
            .data = (void *)ds_1337
        },
        {
            .compatible = "dallas,ds1338",
            .data = (void *)ds_1338
        },
        {
            .compatible = "dallas,ds1339",
            .data = (void *)ds_1339
        },
        {
            .compatible = "dallas,ds1388",
            .data = (void *)ds_1388
        },
        {
            .compatible = "dallas,ds1340",
            .data = (void *)ds_1340
        },
        {
            .compatible = "dallas,ds1341",
            .data = (void *)ds_1341
        },
        {
            .compatible = "maxim,ds3231",
            .data = (void *)ds_3231
        },
        {
            .compatible = "st,m41t0",
            .data = (void *)m41t00
        },
        {
            .compatible = "st,m41t00",
            .data = (void *)m41t00
        },
        {
            .compatible = "microchip,mcp7940x",
            .data = (void *)mcp794xx
        },
        {
            .compatible = "microchip,mcp7941x",
            .data = (void *)mcp794xx
        },
        {
            .compatible = "pericom,pt7c4338",
            .data = (void *)ds_1307
        },
        {
            .compatible = "epson,rx8025",
            .data = (void *)rx_8025
        },
        {
            .compatible = "isil,isl12057",
            .data = (void *)ds_1337
        },
        { }
    };
    MODULE_DEVICE_TABLE(of, ds1307_of_match);
    #endif
  • 相关阅读:
    H5测试
    【多线程】不懂什么是 Java 中的锁?看看这篇你就明白了!
    【spring】69道Spring面试题和答案
    【数据库】数据库面试知识点汇总
    【小技巧】老程序员总结的 40 个小技巧,长脸了~
    【springboot】集成swagger
    【springboot】集成Druid 作为数据库连接池
    【springboot】整合 MyBatis
    【权限管理】Spring Security 执行流程
    【权限管理】springboot集成security
  • 原文地址:https://www.cnblogs.com/feiwatson/p/9478205.html
Copyright © 2011-2022 走看看