DS1307 Zugriff auf das NVRAM

      Keine Kommentare zu DS1307 Zugriff auf das NVRAM

Die RTC DS1307 bietet 56 Bytes NVRAM auf die man wie folgt zugreifen kann:

  1. Inbetriebnahme der RTC: Anleitung
  2. Compilieren der beigefügten Programme
  3. Test

Der Treiber rtc-ds1307 bietet einen NVRAM Zugriff über die Folgende Datei:
/sys/class/i2c-adapter/i2c-1/1-0068/nvram
Im folgenden Beispiel soll ein String gelesen und geschrieben werden.

gcc read-nvram.c -o read-nvram -Wall
/* 
gcc read-nvram.c -o read-nvram -Wall
sudo ./read-nvram
*/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>

#define DS1307_NVRAM_FILE    "/sys/class/i2c-adapter/i2c-1/1-0068/nvram"
#define BUF_SIZE    56+1

int main (int argc, char *argv[])
{
  int fd, ret;
  char buffer[BUF_SIZE];
  memset (&buffer, 0x00, sizeof(buffer));

  if ((fd = open(DS1307_NVRAM_FILE, O_RDWR)) < 0)
  {
    printf("Could not open file %s\n", DS1307_NVRAM_FILE);
    return 1;
  }

  ret = read (fd, &buffer, BUF_SIZE-1);
  if (ret >= 0)
  {
    printf("%s\n", buffer);
  }

  close(fd);
  return 0;
}
gcc write-nvram.c -o write-nvram -Wall
/* 
gcc write-nvram.c -o write-nvram -Wall
sudo ./write-nvram "hello world"
*/

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>

#define DS1307_NVRAM_FILE    "/sys/class/i2c-adapter/i2c-1/1-0068/nvram"
#define BUF_SIZE    56

int main (int argc, char *argv[])
{
  int fd, ret, len;
  char * pStr;  

  if(argc != 2)
  {
    printf ("Usage: %s \"text content\"\n", argv[0]);
    return 1;
  }

  pStr = argv[1];
  
  len = strlen(pStr);
  if (len > BUF_SIZE -1)
  {
    printf ("String length is too long.\n");
    return 2;
  }  

  if ((fd = open(DS1307_NVRAM_FILE, O_RDWR)) < 0)
  {
    printf("Could not open file %s\n", DS1307_NVRAM_FILE);
    return 3;
  }

  ret = write (fd, pStr, len+1);
  if (ret <= 0)
  {
    printf("write failed: %s\n", pStr);
    close(fd);
    return 4;
  }
  
  close(fd);
  return 0;
}
pi@raspberrypi ~ $ sudo ./read-nvram 
das ist ein test
pi@raspberrypi ~ $ sudo ./write-nvram "hallo welt"
pi@raspberrypi ~ $ sudo ./read-nvram 
hallo welt
pi@raspberrypi ~ $