펌웨어와 임베디드

2015. 5. 29. 14:51 from MCU/AVR

펌웨어란


특히 정보통신 관련 기기들의 경우, 하루가 다르게 기술이 변화, 발전하는 통에 늘 최신 제품을 보유하고 있기란 쉽지 않은 것이 현실입니다. 그렇다고 업그레이드된 새 제품을 매번 구입할 수도 없는 노릇이고요. ‘펌웨어 업그레이드’는, 바로 이런 불편함을 해소시켜주는 서비스입니다.


‘펌웨어’는 ‘펌 소프트웨어’의 줄임말로, 쉽게 소프트웨어와 하드웨어의 중간 형태로 생각할 수 있습니다. 일반 소프트웨어는 사용자가 직접 컴퓨터의 하드디스크에 설치했다가 지우는 방식인데 반해, 펌웨어는 마치 하드웨어처럼 공장에서 나올 때부터 제품의 일부로 포함되어 있습니다. 그래서 부드럽다는 뜻의 soft도 아니고, 딱딱한 hard도 아닌 그 중간 개념의 단단한 ‘firm’이란 용어를 쓰고 있습니다. 즉, ‘펌웨어 업그레이드’란, 새로운 버전의 펌웨어를 다운로드 받아, 기존제품을 업그레이드 하는 겁니다. 




임베디드와 펌웨어의 차이점



임베디드나 펌웨어 궁극적으로는 둘다 작은 시스템 내에 하드웨어 제어를 위해 eeprom 등에 기록 되는 일종의 프로그램입니다. 거의 같다라고 봐도 무방하겠죠..


하지만 근래 들어서 시스템의 복잡화로 인해 기존의 펌웨어를 제작할 때 사용되는 프로그래밍 방식 '슈퍼루프 방식'은 프로그래머의 체계적인 프로그램 설계와 짜임세 있는 구성이 프로그래머를 피곤하게 할 만큼 복잡하게 되었습니다.

이에 대한 대안으로서 나온것이 RTOS라는 것인데.. 롬에 기록되는 펌웨어 중에서도 특히 이런 RTOS를 이용한 것을 임베디드(내장형 시스템)라 칭하는 경우가 많습니다. RTOS를 사용하게 되면 롬에 기록되어야 할 펌웨어의 크기가 커지고, 시스템 오버해드라 하여 불필요한 부하를 가져다 주게 됩니다. 하지만, 펌웨어 개발의 융통성과, 안정성, 정확성을 고려할 때 펌웨어의 크기나 시스템 오버해드는 충분이 무시할 수 있는 요소가 됩니다.

RTOS를 이용한 임베디드 시스템은 꼭 ARM같이 거대한 프로세서에만 사용되는 것은 아닙니다. 상당히 유명한 uCOS-II경우 구식 8051부터 인텔32비트까지 다양한 플랫폼을 지원합니다. 8051계열에도 얼마든지 임베디드 시스템을 펌웨어로 올릴 수 있지요... 

============================================================================================

펌웨어는 일반적으로 롬(ROM)에 저장된 하드웨어를 제어하는 마이크로 프로그램을 의미한다. 프로그램이라는 관점에서는 소프트웨어와 동일하지만 하드웨어와 밀접한 관계를 가지고 있다는 점에서 일반 응용소프트웨어와 구분되어 펌웨어는 소프트웨어와 하드웨어의 특성을 모두 가지고 있다고 할 수 있다.


예를 들어 어떤 기능을 발휘하는 하드웨어를 만든다고 할 때, 그것을 제어하는 모든 회로를 하드웨어로만 만들면, 그 구조도 대단히 복잡해지고 심지어는 논리적인 표현을 하기가 어려운 부분도 발생한다. 

이런 경우 상당부분을 소프트웨어로 대체하되 그 소프트웨어가 저장된 기억장치를 하드웨어의 제어 회로중의 중심부분으로 구성하면, 매우 간단하면서도 적은 비용으로 문제를 해결할 수 있게 된다. 이렇게 만든 하드웨어적인 소프트웨어를 펌웨어라 한다.


이렇게 할 경우 하드웨어의 입장에서는 별도의 논리회로를 가진 것이 아니기 때문에 소프트웨어적인 특성을 가지고 있지만, 소프트웨어 입장에서는 마이크로 프로그램이 하드웨어를 제어하기 때문에 하드웨어적인 특성을 가진다고 설명할 수 있다.


소프트웨어의 기능을 펌웨어로 변경할 수 있으면 속도가 현저하게 증대되어 고속 처리가 필요한 프로그램은 펌웨어로 만들어 사용하기도 한다. 또한 하드웨어의 기능을 펌웨어로 변경하면 속도는 느려지지만, 그 기능을 위한 논리 회로를 설계하여 사용하는 것 보다 저렴하고, 편리하게 구현하여 사용할 수 있는 장점을 가지기도 한다. 




출처 : http://haeggongs.tistory.com/69

'MCU > AVR' 카테고리의 다른 글

SPI 통신  (0) 2016.04.21
내부 풀업 저항 (I/O 포트)  (0) 2016.04.19
인터럽트 한개로 다수의 RC 서보 제어  (0) 2013.12.17
[AVR] 데이터 손실  (0) 2013.12.12
[AVR] 카운트 계산법. TCNTn  (0) 2013.12.12
Posted by 나무길 :