티스토리 뷰

반응형

오늘은 디바이스 개발 할 때 중요한 분야인 파워세이브 관련한 내용에 대해서 이야기하도록 하겠습니다. 양산 과정에서 가장 중요한 부분이 이러한 전력관리 부분인데요. 특히 배터리로 동작하는 디바이스의 경우 반드시 필요한 부분이기도 하니 사용하려는 칩인 노르딕 칩에서는 어떻게 전력관리를 할 수 있는지 살펴보도록 하겠습니다.

https://infocenter.nordicsemi.com/pdf/nRF52810_PS_v1.0.pdf

Sleep 모드

슬립모드는 크게 2가지 단계를 지원하고 있습니다. System On Sleep 과 System Off Sleep 인데요. 쉽게 말해 기본 슬립모드와, 딥 슬립모드로 대기모드에서 전력이 사용되는 비중의 차이가 큽니다. 블루투스 이어폰의 예를 들면 일정시간 도앙ㄴ 사용하지 않고 움직임이 없으면 자동으로 슬립모드가 들어가고 귀에 착용을 하면 바로 켜지는 것을 느낄 수 가 있는데, 그렇게에 배터리 제품임에도 오래동안 사용할 수 있는 것입니다. 워낙 작은 디바이스라 배터리가 크지 않지만 이러한 전력관리 솔루션이 들어가 있지 않다면 배터리를 충전을 자주해야 할 수 있습니다. 양산품의 퀄리는 차이는 기능을 많이 구현했냐 안했냐의 여부도 있겠지만 이러한 디테일한 부분들이 잘 되어 있는지 아닌지에 따라 고객들은 느낄 수 있을 것입니다.

System On Sleep



데이터 시트에서 System On 모드에 대해서 위와같이 설명하고 있습니다. 일정부분 전력 사용을 줄여준다고는 하나, 어느정도 줄일 수 있는지 스펙적으로 추가 확인이 필요합니다.

언뜻봐서는 마이크로 범위라서 큰 차이가 안날것 같지만, 3.3과 0.3은 10배 이상차이가 나기때문에 그리고 전력소비는 여러 부가적인 것들이 수반되기 때문에 이러한 미세한 전력의 누수는 대기모드가 얼마나 길게 갈 수 있는지 결정하는 큰 요소가 될 수 있습니다.

System Off Sleep

System Off 모드 상태에서 깨어날 수 있는 방법은 GPIO 시그널이나 리셋으로 이야기되어 지고 있습니다. 강력한 슬립이다 보니 깨우는 방법이 한정적이고, 깨우게 되면 리셋동작처럼 동작하는 것이 특징이죠. 그 많큼 아주 미세하게 살아있는 상태라서 최소한의 전력으로 살아 있을 수 있게 됩니다. 저의 경우는 가속도 센서를 살려두고, 움직임이 감지되면 GPIO 인터럽트를 뜩 해서 슬립에서 깨도록 할 예정입니다.

코드상에서 구분하기 위해서는 아래 API 두가지만 경우에 따라 적용하면 되는데 저는 SoftDevice 스택을 필수로 넣어서 이용할 예정임으로 아래같이 사용하고, System On Sleep의 경우는 매인 코드에서 불러주고 System Off Sleep의 경우는 본인이 만든 코드 안에 특정 케이스 적용될 수 있도록 삽입해주는게 좋습니다.

System On Sleep

nrf_pwr_mgmt_run();

System Off Sleep

sd_power_system_off();

아무래도 System Off Sleep을 하고 깨어날 경우 리셋될때랑 동일 하게 동작하므로 저장해놨던 램 상의 메모리들은 다 날라가기때문에 주의해야합니다. 이를 테면 DB를 생성해서 System Off Sleep 전에 DB에 저장했다가 깨어날때 읽는다던지 하는 프로시져를 두는 것이죠. 물론 노르딕 칩의 경우 비휘발성 메모리의 경우 Flash를 사용하므로 횟수에 제한이 있어서 Sleep에 들어갈때마다 저장하는 것은 좋지는 않겠죠? 우선 최소화 하는 것이 좋겠고 필요하더라도 리셋시 기억할 수 있는 다른 방법을 리서치 해보는 것도 좋겠습니다. 이 카테고리를 지속해서 보시다 보면 제가 구현하라고 하는 시나리오에서도 리셋후에도 기억해야하는 케이스가 있기 때문에 retained register를 활용해서 이를 저장하고 읽어들이는데 이 내용도 다음에 다루도록 하겠습니다.

반응형
댓글