강좌 & 팁
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");
}
}