rtc 에는 사용자가 임의의 값을 쓰고 지울 수 있는 sram 공간이 있습니다.

ic 별로 다를 수 있지만, 56byte 정도의 공간을 지원 합니다.

(물론 이런 공간을 제공 하지 않는 rtc chip 도 있습니다.)

이 공간을 nvram 이라고 하는데요.

이 nvram 을 리눅스에서 접근 하는 방법을 알아 보겠습니다.


rtc 를 보드에 실장했다면 당연히 시간 값을 유지하기위해 배터리를 장착 했을테고,

이 배터리를 이용해 sram 도 계속해서 전원이 공급되므로 사용자는 지워지지 않는 값을 저장 하는

공간으로 사용할 수 있습니다.

반 영구적으로 쓰고 지울 수 있다는 점에서 flash 메모리보다 좋습니다.


별도의 드라이버를 만들어 사용 할 수도 있겠지만 커널의 rtc 드라이버를 그대로 사용 하곡자 한다면,

/sys/class/rtc/rtc0/device/nvram 에 접근 하면 됩니다.


이 nvram 을 파일처럼 열어 쓰고 지우면 됩니다.


예를 들면.


///////////////////////////////////////////////////////////////////////////////////////////////////////

struct rtc_data_t{

unsigned long data1;

unsigned long data2;

};


//------------------------------------------------------------------------------

// rtc_write

//------------------------------------------------------------------------------

void rtc_usr_write(struct rtc_data_t *rtc_data)

{

int    fd;

if ( 0 < ( fd = open( "/sys/class/rtc/rtc0/device/nvram", O_WRONLY)))

{

write( fd, rtc_data, sizeof(struct rtc_data_t));

close( fd);

}

else

{

printf( "파일 열기에 실패했습니다.\n");

}

}


//------------------------------------------------------------------------------

// rtc_read

//------------------------------------------------------------------------------

void rtc_usr_read(struct rtc_data_t *rtc_data)

{

int    fd;

if ( 0 < ( fd = open( "/sys/class/rtc/rtc0/device/nvram", O_RDONLY)))

{

read( fd, rtc_data, sizeof(struct rtc_data_t));

close( fd);

}

else

{

printf( "파일 열기에 실패했습니다.\n");

}

}


///////////////////////////////////////////////////////////////////////////////////////////////////////

위와 같이 쉽게 쓰고 읽을 수 있습니다.