• Post author:
  • Reading time:4 mins read
  • Post category:Tutorials

DS3231 Module is a Real-Time Clock with 32Kbit EEPROM and a built-in 10-bit temperature sensor of resolution 0.25C.

The DS3231 Real-Time Clock is a low-cost and extremely accurate I2C Module. It has an integrated temperature-compensated crystal oscillator (TCXO) and crystal. The device incorporates a battery input and maintains accurate timekeeping even when the main power to the device is interrupted.

Fig. DS3231

Main Features:

  • Two Time-of-Day Alarms.
  • Digital Temperature Sensor Output.
  • Register for Aging Trim.
  • Real-Time Clock Counts Seconds, Minutes, Hours, Date of the Month, Month, Day of the Week, and Year, with Leap-Year Compensation Valid Up to 2100.
  • Programmable Square-Wave Output Signal.
  • Battery-Backup Input for Continuous Timekeeping.
  • Low Power Operation Extends Battery-Backup Run Time.
Fig. DS3231


Here, I2C protocol is used.

Step 1: Requirements

  • Arty7 35t/100t board with either pinaka, parashu or vajra programmed
  • DS3231 Module
  • Micro USB Cable.
  • Jumper Wires.
  • shakti-sdk and shakti-tools installed or Platform IO installed and ready

Step 2: The Circuit

Connection of DS3231 to Arty7 board,

  • VCC to +3V to +5V
  • GND to GND
  • SCL to SCL
  • SDA to SDA
Fig, Circuit diagram of DS3231 with SHAKTI

Here we use Arty100t for instance. Also, the connections are the same in Arty35t boards. For better clarity, Check the device pin mapping for pinaka, parashu and vajra.

Step 3: Code

Please click here to have a look at the code of DS3231.

Code can be compiled and run using the following ways,

Step 4.1: Manual Method

4.1.1 Compile and build

  • Move to shakti-sdk
cd shakti-sdk
  • Compile using make software PROGRAM=? TARGET=?. Type make list_applns to list all the applications available in the SDK. Target can be either parashu, pinaka or vajra.

For instance, Use target as parashu,

make software PROGRAM=ds3231 TARGET=parashu

4.1.2 Execution:

Once the application is built, the executable is generated in the output folder. The executable is in ELF file format and they have the extension .shakti. Now, open three terminals, one for each of the following,

  • One terminal for UART terminal display (miniterm)
  • Another for GDB server
  • And the last one for OpenOCD.

Terminal 1: Firstly Connect to serial output by using miniterm or gtkterm with the baud rate of 19200.

For instance,

$ sudo miniterm.py /dev/ttyUSB1 19200


  • “/dev/ttyUSB1” – ttyUSB means “USB serial port adapter”
  • The “1” (“0” or “1” or “2”“here means the USB device number on your system. The FPGA board is connected to that USB device number.

Terminal 2: After that, Connect to the FPGA board by using the OpenOCD provided by shakti-tools and its respective configuration file.  (Read how OpenOCD and RISC-V GDB work together to establish a connection between our PC and the Microprocessor)

For instance, if we use parashu,

$ cd shakti-sdk
$ cd ./bsp/third_party/parashu
$ sudo $(which openocd) -f ftdi.cfg

For pinaka and vajra, Goto cd ./bsp/third_party/<pinaka or vajra>

Terminal 3: Now, open either 32-bit or 64-bit RISC-V GDB based on your architecture i.e riscv32-unknown-elf-gdb or riscv64-unknown-elf-gdb respectively from shakti-tools. Load up the .shakti file by following the below steps,

$ riscv64-unknown-elf-gdb
(gdb) set remotetimeout unlimited
(gdb) target remote localhost:3333
(gdb) file path/to/executable
(gdb) load
(gdb) c

4.1.3 Upload to flash

Steps to generate standalone user application:

The SHAKTI-SDK has a uploader tool that is used to load a content (such as ELF) to flash, after building the image.

  • Goto the right directory.
    cd shakti-sdk
  • The make upload command is used to build and upload the application to the flash automatically.
make upload PROGRAM=ds3231 TARGET=parashu

PROGRAM is the new bare metal user application that is created. Type make list_applns to list all the applications available in the SDK.

Step 4.2: Using Platform IO

We can use IDE’s like Platform IO to compile, build, run, upload and debug. Please read the article on Platform IO on SHAKTI to understand the steps.

Miniterm Output

Miniterm Output (Upload):

  • Now press Reset Button on board

Leave a Reply