Difference between revisions of "Matrix - RTC"

From FriendlyELEC WiKi
Jump to: navigation, search
(代码展示)
(Features)
 
(13 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
==Introduction==
 
==Introduction==
 
[[File:Matrix-RTC.png|thumb|]]
 
[[File:Matrix-RTC.png|thumb|]]
*
+
* The Matrix RTC module is a real time clock module. It uses the low power consumption chip DS1307 with valid up to 2100  56 byte nonvolatile RAM for data storage and 2-wire IIC serial interface
 +
* It counts seconds, minutes, hours, date of the month, month, day of the week, and year with leap year compensation.
 +
 
 
==Features==
 
==Features==
*
+
* I2C serial interface
 +
* 56-byte nonvolatile RAM
 +
* 8-Pin DIP and 8-Pin SO
 +
* Working temperature: -40 degree Celsius to 85 degree Celsius
 +
* PCB dimension(mm): 24 x 32
 
[[File:Matrix-RTC_PCB.png|frameless|400px|]]
 
[[File:Matrix-RTC_PCB.png|frameless|400px|]]
  
Line 23: Line 29:
  
 
==Basic Device Operation==
 
==Basic Device Operation==
 +
 +
==Applications==
 +
===Connect to NanoPi M1===
 +
Refer to the following connection diagram to connect the module to the NanoPi M1:<br>
 +
[[File:Matrix-RTC_nanopi_m1.jpg|frameless|600px|Matrix-RTC_nanopi_m1]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-RTC || NanoPi M1     
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Connect to NanoPi 2===
 +
Refer to the following connection diagram to connect the module to the NanoPi 2:<br>
 +
[[File:Matrix-RTC_nanopi_2.jpg|frameless|600px|Matrix-RTC_nanopi_2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-RTC || NanoPi 2
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Connect to NanoPi M2 / NanoPi 2 Fire===
 +
Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:<br>
 +
[[File:Matrix-RTC_nanopi_M2.jpg|frameless|600px|Matrix-RTC_nanopi_M2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
| || NanoPi M2     
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Connect to NanoPC-T2===
 +
Refer to the following connection diagram to connect the module to the NanoPC-T2:<br>
 +
[[File:Matrix-RTC_NanoPC-T2.jpg|frameless|600px|Matrix-RTC_NanoPC-T2]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-RTC || NanoPC-T2
 +
|-
 +
|SDA    || Pin6
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V    || Pin29
 +
|-
 +
|GND    || Pin30
 +
|}
 +
 +
==Compile & Run Test Program==
 +
Boot your ARM board with Debian and copy the matrix code:
 +
<syntaxhighlight lang="bash">
 +
$ apt-get update && apt-get install git
 +
$ git clone https://github.com/friendlyarm/matrix.git
 +
</syntaxhighlight>
 +
If your cloning is done successfully a "matrix" directory will be generated.
 +
 +
Compile and install Matrix:
 +
<syntaxhighlight lang="bash">
 +
$ cd matrix
 +
$ make && make install
 +
</syntaxhighlight>
 +
 +
Run test program:
 +
<syntaxhighlight lang="bash">
 +
$ matrix-rtc
 +
</syntaxhighlight>
 +
Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.<br>
 +
Here is what you should observe:<br>
 +
<syntaxhighlight lang="bash">
 +
RTC Driver Test Example.
 +
Set RTC date/time is 9-15-2015, 01:01:01.
 +
Read RTC date/time is 9-15-2015, 01:01:01.
 +
Test complete
 +
</syntaxhighlight>
 +
This program reads date/time from and writes date/time to the RTC module. If you want to set the date/time and save it in the RTC module under Debian you can try the following commands. For example if you want to set the date to "2016-11-17 17:26:01" and save it in the RTC module you can do it this way:
 +
<syntaxhighlight lang="bash">
 +
$ modprobe rtc-ds1307
 +
$ date -s "2016-11-17 17:26:01"
 +
$ hwclock -w -f /dev/rtc-ds1307
 +
</syntaxhighlight>
 +
Open the /etc/modprobe.d/matrix-blacklist.conf file and add a "#" in front of "blacklist rtc_ds1307" to comment this line. After you reboot your board the changed date/time will be effective<br>
 +
<syntaxhighlight lang="bash">
 +
$ hwclock -r -f /dev/rtc-ds1307
 +
2016 11 18 Friday 08:29:48  -0.492649 seconds
 +
</syntaxhighlight>
 +
 +
==Code Sample==
 +
This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-rtc". Here is its source code:
 +
<syntaxhighlight lang="c">
 +
int main(int argc, char **argv)
 +
{
 +
    int fd, retval, board;
 +
    struct rtc_time rtc_tm;
 +
    const char *rtc = default_rtc;
 +
    const char *date_time = default_date_time;
 +
 +
    if ((board = boardInit()) < 0) {
 +
        printf("Fail to init board\n");
 +
        return -1;
 +
    }
 +
   
 +
    switch (argc) {
 +
    case 3:
 +
        rtc = argv[1];
 +
        date_time = argv[2];
 +
        break;
 +
    case 1:
 +
        break;
 +
    default:
 +
        fprintf(stderr, "usage:  rtctest [rtcdev] [year mon day hour min sec]\n");
 +
        return 1;
 +
    }
 +
    system("modprobe "DRIVER_MODULE);
 +
    fd = open(rtc, O_RDONLY);
 +
    if (fd ==  -1) {
 +
        perror(rtc);
 +
        goto err;
 +
    }
 +
    fprintf(stderr, "RTC Driver Test Example.\n");
 +
 +
    sscanf(date_time, "%d %d %d %d %d %d",
 +
            &rtc_tm.tm_year,
 +
            &rtc_tm.tm_mon,
 +
            &rtc_tm.tm_mday,
 +
            &rtc_tm.tm_hour,
 +
            &rtc_tm.tm_min,
 +
            &rtc_tm.tm_sec);
 +
    rtc_tm.tm_year -= 1900;
 +
    rtc_tm.tm_mon -= 1;
 +
    retval = ioctl(fd, RTC_SET_TIME, &rtc_tm);
 +
    if (retval == -1) {
 +
        perror("RTC_SET_TIME ioctl");
 +
        goto err;
 +
    }
 +
 +
    fprintf(stderr, "Set RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
 +
            rtc_tm.tm_mon + 1, rtc_tm.tm_mday, rtc_tm.tm_year + 1900,
 +
            rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 +
 +
    /* Read the RTC time/date */
 +
    retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
 +
    if (retval == -1) {
 +
        perror("RTC_RD_TIME ioctl");
 +
        goto err;
 +
    }
 +
 +
    fprintf(stderr, "Read RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
 +
            rtc_tm.tm_mon + 1, rtc_tm.tm_mday, rtc_tm.tm_year + 1900,
 +
            rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 +
 +
    fprintf(stderr, "Test complete\n");
 +
    close(fd);
 +
err:
 +
    system("rmmod "DRIVER_MODULE);
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
For more details about this APIs called in this code sample refer to [[Matrix API reference manual]] <br>
 +
 +
<!---
 
==Download Matrix Source Code==
 
==Download Matrix Source Code==
All the matrix modules' code samples are open source. They are maintained on GitHub - git://github.com/friendlyarm/matrix.git <br>
+
All the matrix modules' code samples are open source. They are maintained on GitHub - https://github.com/friendlyarm/matrix.git <br>
 
Each branch in this hub contains the matrix modules' code samples for a board that the matrix modules can work with.<br>
 
Each branch in this hub contains the matrix modules' code samples for a board that the matrix modules can work with.<br>
 
* The nanopi branch contains the matrix modules' code samples for the NanoPi
 
* The nanopi branch contains the matrix modules' code samples for the NanoPi
Line 38: Line 230:
 
Clone the matrix code from GitHub
 
Clone the matrix code from GitHub
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ git clone git://github.com/friendlyarm/matrix.git
+
$ git clone https://github.com/friendlyarm/matrix.git
 
</syntaxhighlight>
 
</syntaxhighlight>
 
If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples.
 
If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples.
Line 174: Line 366:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==与Tiny4412连接使用==
+
==Connect to Tiny4412==
===准备工作===
+
===Preparations===
参考Tiny4412光盘里的《友善之臂Ubuntu使用手册》,在Tiny4412上运行UbuntuCore系统,然后在主机PC上安装并使用相应的编译器。<br>
+
Please refer to the Tiny4412's user's manual to install a UbuntuCore on the Tiny4412 and install an appropriate cross compiler on a PC.<br>
注意:只能使用Tiny4412SDK-1506的底板。
+
Note: only the Tiny4412SDK-1506 carrier board can work with this module.
  
===硬件连接===
+
===Hardware Connection===
参考下图连接模块Matrix-RTC和Tiny4412 <br>
+
Please refer to the following diagram to connect the Matrix-RTC to the Tiny4412 <br>
 
[[File:Matrix-RTC_tiny4412.jpg|frameless|600px|Matrix-RTC_tiny4412]]
 
[[File:Matrix-RTC_tiny4412.jpg|frameless|600px|Matrix-RTC_tiny4412]]
  
连接说明:
+
Connection Details:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 197: Line 389:
 
|}
 
|}
  
===编译测试程序===
+
===Compile Test Program===
进入Matrix代码仓库,切换到tiny4412分支
+
Please login the Matrix hub and enter the matrix-tiny4412 branch
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ cd matrix
 
$ cd matrix
Line 204: Line 396:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
编译Matrix配件代码
+
Compile the Matrix code
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ make CROSS_COMPILE=arm-linux-gnueabihf- clean
 
$ make CROSS_COMPILE=arm-linux-gnueabihf- clean
Line 210: Line 402:
 
$ make CROSS_COMPILE=arm-linux-gnueabihf- install
 
$ make CROSS_COMPILE=arm-linux-gnueabihf- install
 
</syntaxhighlight>
 
</syntaxhighlight>
注意:请确保你的主机PC当前使用的交叉编译器为Tiny4412-UbuntuCore配套的arm-linux-gnueabihf-gcc-4.7.3。<br>
+
Note: please make sure to install the cross compiler "arm-linux-gnueabihf-gcc-4.7.3" on your PC, which is used to compile files for the Tiny4412-UbuntuCore.<br>
编译出来的库文件位于install/lib目录下,而测试程序则位于install/usr/bin目录下,模块Matrix-RTC对应的测试程序为matrix-rtc。
+
Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-RTC" module is "matrix-rtc".
  
===运行测试程序===
+
===Run Test Program===
拷贝库文件和测试程序到Tiny4412的UbuntuCore的文件系统上
+
Please copy the library files and test program to the Tiny4412
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ cp install/usr/bin/* tiny4412_rootfs/usr/bin/
 
$ cp install/usr/bin/* tiny4412_rootfs/usr/bin/
Line 220: Line 412:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
然后启动Tiny4412,在UbuntuCore的shell终端中执行以下命令加载驱动
+
Power on the Tiny4412 and run the following command in UbuntuCore's terminal to load the driver.
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ modprobe bmp085-i2c
 
$ modprobe bmp085-i2c
 
</syntaxhighlight>
 
</syntaxhighlight>
  
运行模块Matrix-RTC的测试程序 <br>
+
Run the test program <br>
注意:此模块并不支持热插拔,启动系统前需要确保硬件正常连接。
+
Note: this module is not plug and play therefore before running the module please make sure it is connected to a Tiny4412.
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ matrix-rtc
 
$ matrix-rtc
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===代码展示===
+
===Code Sample===
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
static const char default_rtc[] = "/dev/rtc0";
 
static const char default_rtc[] = "/dev/rtc0";
Line 298: Line 490:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==与RaspberryPi连接使用==
+
==Connect to RaspberryPi==
  
==与Arduino连接使用==
+
==Connect to Arduino==
 
+
--->
==相关资料==
+
==Resources==
 
[http://datasheets.maximintegrated.com/en/ds/DS1307.pdf DS1307.pdf]
 
[http://datasheets.maximintegrated.com/en/ds/DS1307.pdf DS1307.pdf]
 +
 +
==Update Log==
 +
===June-24-2016===
 +
* Created English wiki

Latest revision as of 00:28, 24 June 2016

查看中文

1 Introduction

Matrix-RTC.png
  • The Matrix RTC module is a real time clock module. It uses the low power consumption chip DS1307 with valid up to 2100 56 byte nonvolatile RAM for data storage and 2-wire IIC serial interface
  • It counts seconds, minutes, hours, date of the month, month, day of the week, and year with leap year compensation.

2 Features

  • I2C serial interface
  • 56-byte nonvolatile RAM
  • 8-Pin DIP and 8-Pin SO
  • Working temperature: -40 degree Celsius to 85 degree Celsius
  • PCB dimension(mm): 24 x 32

Matrix-RTC PCB.png

  • Pin Description:
Pin Description
SDA I2C SDA
SCL I2C SCL
5V Supply Voltage 5V
GND Ground

3 Basic Device Operation

4 Applications

4.1 Connect to NanoPi M1

Refer to the following connection diagram to connect the module to the NanoPi M1:
Matrix-RTC_nanopi_m1

Connection Details:

Matrix-RTC NanoPi M1
SDA Pin3
SCL Pin5
5V Pin4
GND Pin6

4.2 Connect to NanoPi 2

Refer to the following connection diagram to connect the module to the NanoPi 2:
Matrix-RTC_nanopi_2

Connection Details:

Matrix-RTC NanoPi 2
SDA Pin3
SCL Pin5
5V Pin4
GND Pin6

4.3 Connect to NanoPi M2 / NanoPi 2 Fire

Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:
Matrix-RTC_nanopi_M2

Connection Details:

NanoPi M2
SDA Pin3
SCL Pin5
5V Pin4
GND Pin6

4.4 Connect to NanoPC-T2

Refer to the following connection diagram to connect the module to the NanoPC-T2:
Matrix-RTC_NanoPC-T2

Connection Details:

Matrix-RTC NanoPC-T2
SDA Pin6
SCL Pin5
5V Pin29
GND Pin30

5 Compile & Run Test Program

Boot your ARM board with Debian and copy the matrix code:

$ apt-get update && apt-get install git
$ git clone https://github.com/friendlyarm/matrix.git

If your cloning is done successfully a "matrix" directory will be generated.

Compile and install Matrix:

$ cd matrix
$ make && make install

Run test program:

$ matrix-rtc

Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.
Here is what you should observe:

RTC Driver Test Example.
Set RTC date/time is 9-15-2015, 01:01:01.
Read RTC date/time is 9-15-2015, 01:01:01.
Test complete

This program reads date/time from and writes date/time to the RTC module. If you want to set the date/time and save it in the RTC module under Debian you can try the following commands. For example if you want to set the date to "2016-11-17 17:26:01" and save it in the RTC module you can do it this way:

$ modprobe rtc-ds1307
$ date -s "2016-11-17 17:26:01"
$ hwclock -w -f /dev/rtc-ds1307

Open the /etc/modprobe.d/matrix-blacklist.conf file and add a "#" in front of "blacklist rtc_ds1307" to comment this line. After you reboot your board the changed date/time will be effective

$ hwclock -r -f /dev/rtc-ds1307
2016 11 18 Friday 08:29:48  -0.492649 seconds

6 Code Sample

This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-rtc". Here is its source code:

int main(int argc, char **argv)
{
    int fd, retval, board;
    struct rtc_time rtc_tm;
    const char *rtc = default_rtc;
    const char *date_time = default_date_time;
 
    if ((board = boardInit()) < 0) {
        printf("Fail to init board\n");
        return -1;
    }
 
    switch (argc) {
    case 3:
        rtc = argv[1];
        date_time = argv[2];
        break;
    case 1:
        break;
    default:
        fprintf(stderr, "usage:  rtctest [rtcdev] [year mon day hour min sec]\n");
        return 1;
    }
    system("modprobe "DRIVER_MODULE);
    fd = open(rtc, O_RDONLY);
    if (fd ==  -1) {
        perror(rtc);
        goto err;
    }
    fprintf(stderr, "RTC Driver Test Example.\n");
 
    sscanf(date_time, "%d %d %d %d %d %d",
            &rtc_tm.tm_year,
            &rtc_tm.tm_mon,
            &rtc_tm.tm_mday,
            &rtc_tm.tm_hour,
            &rtc_tm.tm_min,
            &rtc_tm.tm_sec); 
    rtc_tm.tm_year -= 1900;
    rtc_tm.tm_mon -= 1;
    retval = ioctl(fd, RTC_SET_TIME, &rtc_tm);
    if (retval == -1) {
        perror("RTC_SET_TIME ioctl");
        goto err;
    }
 
    fprintf(stderr, "Set RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
            rtc_tm.tm_mon + 1, rtc_tm.tm_mday, rtc_tm.tm_year + 1900,
            rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 
    /* Read the RTC time/date */
    retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
    if (retval == -1) {
        perror("RTC_RD_TIME ioctl");
        goto err;
    }
 
    fprintf(stderr, "Read RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
            rtc_tm.tm_mon + 1, rtc_tm.tm_mday, rtc_tm.tm_year + 1900,
            rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 
    fprintf(stderr, "Test complete\n");
    close(fd);
err:
    system("rmmod "DRIVER_MODULE);
    return 0;
}

For more details about this APIs called in this code sample refer to Matrix API reference manual

7 Resources

DS1307.pdf

8 Update Log

8.1 June-24-2016

  • Created English wiki