Difference between revisions of "Matrix - RTC"

From FriendlyELEC WiKi
Jump to: navigation, search
(Created page with "查看中文")
 
(Features)
 
(19 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
[[Matrix - RTC/zh|查看中文]]
 
[[Matrix - RTC/zh|查看中文]]
 +
 +
==Introduction==
 +
[[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==
 +
* 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|]]
 +
 +
* Pin Description:
 +
{| class="wikitable"
 +
|-
 +
|Pin  || Description
 +
|-
 +
|SDA    || I2C SDA
 +
|-
 +
|SCL    || I2C SCL
 +
|-
 +
|5V    || Supply Voltage 5V
 +
|-
 +
|GND    || Ground
 +
|}
 +
 +
==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==
 +
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>
 +
* The nanopi branch contains the matrix modules' code samples for the NanoPi
 +
* the tiny4412 branch contains the matrix modules' code samples for the Tiny4412
 +
* the raspberrypi branch contains the matrix modules' code samples for the RaspberryPi
 +
 +
Please follow the steps below to get the source code:<br>
 +
Install the git utility on a PC running Ubuntu14.04
 +
<syntaxhighlight lang="bash">
 +
$ sudo apt-get install git
 +
</syntaxhighlight>
 +
 +
Clone the matrix code from GitHub
 +
<syntaxhighlight lang="bash">
 +
$ git clone https://github.com/friendlyarm/matrix.git
 +
</syntaxhighlight>
 +
If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples.
 +
 +
==Connect to NanoPi==
 +
===Preparations===
 +
Please install a Debian on a NanoPi and an appropriate cross compiler on a PC. Please refer to wiki:[[NanoPi/zh|NanoPi]] <br>
 +
Compile a NanoPi kernel. Note: please use the kernel's source code from the nanopi-v4.1.y-matrix branch.<br>
 +
<syntaxhighlight lang="bash">
 +
$ git clone https://github.com/friendlyarm/linux-4.x.y.git
 +
$ cd linux-4.x.y
 +
$ git checkout nanopi-v4.1.y-matrix
 +
$ make nanopi_defconfig
 +
$ touch .scmversion
 +
$ make
 +
</syntaxhighlight>
 +
 +
===Hardware Connection===
 +
Please refer to the following connection diagram to connect the Matrix-RTC to the NanoPi <br>
 +
[[File:Matrix-RTC_nanopi.jpg|frameless|600px|Matrix-RTC_nanopi]]
 +
 +
连接说明:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-RTC_nanopi || NanoPi
 +
|-
 +
|SDA    || Pin3
 +
|-
 +
|SCL    || Pin5
 +
|-
 +
|5V      || Pin4
 +
|-
 +
|GND    || Pin6
 +
|}
 +
 +
===Compile Test Program===
 +
Please login the matrix hub and enter the nanopi branch
 +
<syntaxhighlight lang="bash">
 +
$ cd matrix
 +
$ git checkout nanopi
 +
</syntaxhighlight>
 +
 +
Compile the matrix code
 +
<syntaxhighlight lang="bash">
 +
$ make CROSS_COMPILE=arm-linux- clean
 +
$ make CROSS_COMPILE=arm-linux-
 +
$ make CROSS_COMPILE=arm-linux- install
 +
</syntaxhighlight>
 +
Note: please make sure to install the cross compiler "arm-linux-gcc-4.4.3" on your PC, which is used to compile files for the NanoPi-Debian.<br>
 +
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". <br>
 +
 +
===Run Test Program===
 +
Please copy the library files and test program to the NanoPi
 +
<syntaxhighlight lang="bash">
 +
$ cp install/usr/bin/* nanopi_rootfs/usr/bin/
 +
$ cp install/lib/* nanopi_rootfs/lib/ -d
 +
</syntaxhighlight>
 +
 +
Power on the NanoPi and run the following command in Debian's terminal to load the driver
 +
<syntaxhighlight lang="bash">
 +
$ modprobe rtc-ds1307
 +
</syntaxhighlight>
 +
 +
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 NanoPi.
 +
<syntaxhighlight lang="bash">
 +
$ matrix-rtc
 +
</syntaxhighlight>
 +
 +
===Code Sample===
 +
<syntaxhighlight lang="c">
 +
static const char default_rtc[] = "/dev/rtc0";
 +
static const char default_date_time[] = "2015 9 15 1 1 1";
 +
int main(int argc, char **argv)
 +
{
 +
    int fd, retval;
 +
    struct rtc_time rtc_tm;
 +
    const char *rtc = default_rtc;
 +
    const char *date_time = default_date_time;
 +
 +
    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;
 +
    }
 +
 +
    fd = open(rtc, O_RDONLY);
 +
 +
    if (fd ==  -1) {
 +
        perror(rtc);
 +
        exit(errno);
 +
    }
 +
    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");
 +
        exit(errno);
 +
    }
 +
   
 +
    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");
 +
        exit(errno);
 +
    }
 +
 +
    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);
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
 +
==Connect to Tiny4412==
 +
===Preparations===
 +
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>
 +
Note: only the Tiny4412SDK-1506 carrier board can work with this module.
 +
 +
===Hardware Connection===
 +
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]]
 +
 +
Connection Details:
 +
{| class="wikitable"
 +
|-
 +
|Matrix-RTC || Tiny4412
 +
|-
 +
|SDA    || CON18 SDA
 +
|-
 +
|SCL    || CON18 SCL
 +
|-
 +
|5V      || CON18 5V
 +
|-
 +
|GND    || CON18 GND
 +
|}
 +
 +
===Compile Test Program===
 +
Please login the Matrix hub and enter the matrix-tiny4412 branch
 +
<syntaxhighlight lang="bash">
 +
$ cd matrix
 +
$ git checkout tiny4412
 +
</syntaxhighlight>
 +
 +
Compile the Matrix code
 +
<syntaxhighlight lang="bash">
 +
$ make CROSS_COMPILE=arm-linux-gnueabihf- clean
 +
$ make CROSS_COMPILE=arm-linux-gnueabihf-
 +
$ make CROSS_COMPILE=arm-linux-gnueabihf- install
 +
</syntaxhighlight>
 +
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>
 +
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===
 +
Please copy the library files and test program to the Tiny4412
 +
<syntaxhighlight lang="bash">
 +
$ cp install/usr/bin/* tiny4412_rootfs/usr/bin/
 +
$ cp install/lib/* tiny4412_rootfs/lib/ -d
 +
</syntaxhighlight>
 +
 +
Power on the Tiny4412 and run the following command in UbuntuCore's terminal to load the driver.
 +
<syntaxhighlight lang="bash">
 +
$ modprobe bmp085-i2c
 +
</syntaxhighlight>
 +
 +
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">
 +
$ matrix-rtc
 +
</syntaxhighlight>
 +
 +
===Code Sample===
 +
<syntaxhighlight lang="c">
 +
static const char default_rtc[] = "/dev/rtc0";
 +
static const char default_date_time[] = "2015 9 15 1 1 1";
 +
int main(int argc, char **argv)
 +
{
 +
    int fd, retval;
 +
    struct rtc_time rtc_tm;
 +
    const char *rtc = default_rtc;
 +
    const char *date_time = default_date_time;
 +
 +
    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;
 +
    }
 +
 +
    fd = open(rtc, O_RDONLY);
 +
 +
    if (fd ==  -1) {
 +
        perror(rtc);
 +
        exit(errno);
 +
    }
 +
    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");
 +
        exit(errno);
 +
    }
 +
   
 +
    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");
 +
        exit(errno);
 +
    }
 +
 +
    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);
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
 +
==Connect to RaspberryPi==
 +
 +
==Connect to Arduino==
 +
--->
 +
==Resources==
 +
[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