용어정리

[펌웨어] 펌웨어란 무엇인가?

개발의고수 2022. 8. 24. 17:37

잡설은 그만하고 펌웨어는 프로그램이다. 하지만 우리가 프로그램하면 떠오르는 그런 프로그램이면서도 좀 다르다. C, MFC, JAVA 이런거 다 프로그램인데 펌웨어는 이 프로그램으로 짜는 하드웨어 코딩이라고 보면 된다. 그러니까 펌웨어는 C로도 짤 수도 있고 C++로도 짤 수 있고, VB로도 할 수 있고, JAVA로도 할 수 있다. 물론 C로 짜는 펌웨어가 있고 JAVA로 짜는 프로그램이 있어 호환은 좀 다른 문제다. 

 

 여튼 실제적인 예를 들면 스마트폰 게임을 만들었다고 하면 이건 펌웨어가 아니다. 하지만.....오락실에서 망치로 두두려 잡는 두더지 게임을 프로그램하면 그건 펌웨어다. 뭐가 다른지 감이 오는가? 펌웨어는 주변 장치 또는 직접적으로 하드웨어를 제어해서 동작을 만들어내는 것이다. 

 

 개념이 애매하긴 한데 직접적인 하드웨어의 제어가 있으면 그것이 곧 펌웨어이다. 그러기에 펌웨어를 만들면 하드웨어의 동작이 변한다. 모터를 오른쪽으로 돌리는 펌웨어를 양쪽으로 돌리게 고칠는 것도 펌웨어를 수정해서 만들 수 있다. 

 이런 특성으로 펌웨어 엔지니어는 하드웨어까지 같이 다루게 된다. 이 펌웨어 프로그램에 따라 하드웨어가 변경이 될 수 있고 직접적으로 하드웨어를 제어해야 하기 때문에 하드웨어를 모르고서는 펌웨어 프로그램을 짤 수가 없다. 하지만 응용프로그램을 짜는 사람은 그 하드웨어에 대해 잘 몰라도 된다.

 

 예를 들어, 스마트폰에 모터를 1초에 한번 돌리는 프로그램을 짠다고 가정하자. 일단 펌웨어는 이 스마트폰에 있는 모터를 돌리기 위해 하드웨어를 직접 제어하여 모터를 구동하는 프로그램을 만든다. 모터의 제어선이 4개라고 하면 그 제어선 4개에 신호를 그에 맞게 제어해서 모터를 돌린다. 응용프로그램은 이 펌웨어를 이용하여 모터를 돌린다. 만들어진 펌웨어에 명령을 줘서 모터를 돌리라고 명령한다. 이게 펌웨어와 응용프로그램의 차이다. 즉, 펌웨어 프로그램을 만들려면 모터 제어선에 어떤 신호를 어떻게 넣어야 돌아가는지를 알아야하고 그에 맞게 그 신호 자체를 제어해야 한다. 응용프로그래머는 만들어진 명령이 있으면 그걸 활용해서 기능을 만든다. 즉 응용프로그래머는 모터의 동작 원리나 동작할 때 어떤 신호를 보내야 하는지 어떤 모터를 사용하는지 몰라도 된다.

 

 뭐 최근이라고 하기도 그렇지만 요새 거의 모든 전자제품에는 작든 크든 거의 대부분 펌웨어가 존재한다. 제어를 프로그램을 할 수 있는 제어 소자들(MCU,FPGA,DSP 등등)의 가격이 많이 저렴해졌기 때문에 요즘은 엄청난 저가가 아닌 이상에야 제어가 들어가기 때문에 펌웨어 프로그래머가 많이 필요한 실정이다.

 

 개인적으로 펌웨어 프로그램은 재미가 있다. 만드는 과정이 좀 힘들지만 그 과정에서 생성되는 결과물이 대부분 직관적이면서 내 프로그램으로 변화하는 걸 실험을 하면서 하다보니 첨에 설계는 힘들지만 설계가 끝나고 프로그램을 하는 과정은 재미있는 경우가 많다. 예전에 내가 가전제품에 제어보드를 만들었을 때 정수기나 인덕션, 고데기, 식품건조기 등등 많은 걸 해봤는데 내가 프로그램하는 것에 따라 동작이 변화하니 상당히 재미있게 작업했었다.

 

내 글이 좀 뻘글이긴 하지만 펌웨어 프로그램에 관심이 있는 초보들한테 그냥 약간의 도움이 되었으면 한다.

출처: https://electric-lab.tistory.com/331 [전자 쟁이의 이런 저런 지식 세상:티스토리]