요술고양이의 Digital Life


자작 MP3에 대한 2번째 포스트입니다.
느긋하고 여유롭게 가벼운 마음으로? 포스트 작성을 하려고 했는데..

첫 포스트가 다음 블로거뉴스 IT부분에 1위로 올라가면서.. 부담감을 잔뜩 앉고 시작하게 되었습니다.

가볍게 읽어주시기를 바라면서..
전문적인 용어나 내용은 용어정리 카테고리에서 풀도록 하겠습니다.

그리고 틀린부분이나 수정요청은 언제나 환영 입니다 :-)

1. 자작 MP3 나는 과연 도전할 수 있을까?
 
 전자라는 분야는 공돌이 분야 아니랄까봐 전공자가 아니면 접근하기 어려운 먼 영역입니다. 이미 도전을 한다는 것 자체가 어려운 분야입니다. 그런데 MP3 플레이어기 때문에 하드웨어 뿐만 아니라 소프트웨어 지식 요구를 합니다.

그러나 노력하는 자에겐! 축복이~

참고로 C언어 좀 만질 줄 아는 공대분이라면 이쪽에 관심을 갖고 접근하기 비교적 쉬우나..
제가 운영하는 카페에는 치과의사인 분도 취미 전자를 하시니.. (이분은 엄친아로 예외 처리해야하나?)
전혀 전자와 공대에 관련없던 분도 희망을? 갖기를 바랍니다.

당신도 엄친아가 될 수 있어요!

하지만 이제 막 시작하시는 분들께서는 아무래도 갑자기 시작하는건 어려움이 따르니 요 포스트는 재미로 읽어주시고..
차후 올라올 전자기초 강좌나 microPIC 카테고리에 올라올 강좌를 읽어주세요~

2. MP3 플레이어의 기본 구조 파헤치기

 MP3 플레이어를 제작하기에 앞서 우리는 MP3 플레이어 또는 전자제품은 어떤 구조로 구성되어 있는가?를 한번 생각해 볼 필요가 있습니다. 이건 case by case라서 특정 레퍼런스 구조를 당당히! 제시할 수는 없지만..

최소한 자작되고 있는 MP3 플레이어의 구조는 대부분 다음과 같은 구성을 하고 있습니다.



[그림 1] MP3 플레이어 기본 구조

[그림 1]은 간단하게 그려본 블럭다이어그램으로서 현재 자작되고 있는 MP3 플레이어가 대부분 위와 같은 구조를 하고 있습니다. (워낙 단순한 구조라서 위 구조를 피해갈 수 없을 듯 ㅎㅎ)

정말 단순하지요? 참고로 그림 센스에 대해서는 태클하지 말아주세요 ;ㅁ;

그럼 [그림 1]의 구조에 대해서 간단한 설명을 덧붙여 보자면..

가운데 MCU(Micro Controller Unit)을 중심으로 4개의 블럭이 존재합니다.
먼저 좌측의 MP3 파일이 저장되어 있을 메모리 카드 블럭, 하단의 사용자 입력과 관련된 UI(User Interface) 블럭, 보통 똑딱이 버튼이겠지요? 그리고 상단의 간단한 정보를 출력해줄 수 있는 디스플레이 블럭 그리고 마지막으로 우측의 메모리 카드의 MP3 음악을 분해?해서 스피커에 흘려줄 디코더 블럭으로 나누어 볼 수 있습니다.

여기서 1~2개의 블럭 등은 생략가능한데요.. 먼저 디스플레이는 Ipod Shuffle 처럼 디스플레이가 없는 MP3를 자작할 때 생략가능한 부분입니다. 그리고 디코더 부분은 MCU에서 처리능력이 월등하다면, 소프트웨어로 처리가 가능한 부분입니다. 또는 MCU 내부에 하드웨어 디코더를 내장한 경우 별도의 디코더가 필요가 없습니다. 하지만 자작에 사용되는 프로세서는 대부분 그 능력이 낮거나 디코더를 포함한 MCU가 드물기 때문에 대부분은 일반 MCU + 하드웨어 디코더 구성을 따릅니다.

그럼 각 블럭별로 주로 사용되는 실제 부품을 살펴 보도록 하겠습니다.

(1) MCU

  

[그림 2] MCU
이미지 출처: www.futurlec.com/, http://www.flylogic.net/
 
 통상 MCU로 불리우는 소형 마이크로프로세서 입니다. 요즘 MCU의 대부분은 RISC타입 프로세서로 첫 번째 사진은 국내에서 학생과 중소기업에서 엄청난 각광을 받고 있는 Atmel社의 ATmega128이구요.. 두 번째 사진은 굴지의 8비트 프로세서 업체인 Microchip社의 dsPIC(16비트 MCU입니다 ^^)입니다. 요둘은 각각 생긴지 얼마 안되었지만 8비트계 프로세서 시장에서 알아주는 기업이구요.. 서로 라이벌 관계입니다.

요 녀석들은 모든 연산 및 제어를 담당하게 되어있습니다.
그리고 대부분의 MCU는 내부에 ROM, RAM을 탑재하고 있기 때문에..
펌웨어를 별도의 메모리에 저장하지 않고 요 MCU 내부 ROM에 기입하게 됩니다.
일단 간단하게 MCU에서는 여기까지 설명하기로 하구요..

MCU 대해 겉핥기로 소개를 드렸습니다만 위의 MCU는 소수의 일례일 뿐이고, 실제적으로 MP3 만들 때 정해진 MCU는 없습니다. 만약 자작을 한다면 어느 MCU라도 상관없겠지만.. 만약 상용제품으로서 제작을 한다면 MCU 내부에 MP3 디코더를 내장한 MCU가 유리합니다. (부피 및 비용면에서..)

참고로 MCU라고 불리는 주요한 이유를 말씀드리자면.. MCU 내부에는 ROM, RAM 그리고 각종 외부 인터페이스 컨트롤러를 칩하나에 탑재하고 있기 때문입니다. 즉, 컨트롤용이라는 말이지요.. 일반 CPU는 MPU(Micro Processor Unit)에 가깝다고 볼 수 있습니다. 즉, 온리 연산용이지요..

(2) 디스플레이

자, 이번엔 우리에게 정보를 보여주고 시각화를 시켜줄 디바이스들입니다. 주로 사용하는 녀석을은 다음과 같습니다


[그림 3] CLCD 및 GLCD

그림 출처: http://cafe.naver.com/micropic의 너굴팬더님(http://azumanga.pe.kr/)

 먼저 일반적인 디스플레이인 CLCD(Character LCD)와 GLCD(Graphic LCD)입니다. 각각 이름이 말해주고 있듯이 CLCD는 간단한 아스키 문자 출력이 가능하고 GLCD는 점을 일일히 찍어서 흑백 이미지 출력이 가능합니다. 이 두 모듈은 간단하게 사용할 수 있고 가장 보편적인 디스플레이로서 쉽고 간단하게 사용할 수 있는 장점이 있습니다.


[그림 4] TFT-LCD

 다음은 TFT-LCD입니다. 한때는 개인이 구하기 어려웠고, 반드시 대량 구매로만 습득이 가능한 물건이었는데 요즘 몇몇 분들이 직접나서서 공구를 진행하셔서 커뮤니티에 약간 물건이 풀렸던 LCD입니다. 위의 두 LCD와는 달리 8비트, 16비트, 24비트 칼라 출력이 가능하고(보통 핸드폰에 들어가는 LCD와 동일합니다.) 대부분 해상도는 QVGA(320x240)급을 주로 사용합니다. 대신 빠른 처리속도가 요구되는 녀석입니다. 구하기도 사용하기도 쉽지 않은 부품이지요..

(3) 메모리 카드



[그림 5] 다양한 메모리 카드

 메모리카드는 그 종류가 많은데 일반적으로 가장 많이 사용되는 것은 SDCARD 입니다. 이와 사촌격은 MMC도 많이 사용되지만 현재는 압도적으로 SDCARD를 많이 사용합니다. 그 이유로는 SDCARD에서는 SPI 통신 모드를 지원하는데 이 통신모드가 우리가 사용하는 MCU에 대부분 지원하는 통신방식이기 때문입니다. CF도 간간히 쓰이긴 합니다만.. 패러럴 통신 방식으로 신호선을 많이 사용하기 때문에 부피나 제어의 불편함으로 잘 사용하지 않습니다.

(4) 디코더

 마지막으로 디코더 부분입니다. 디코더는 압도적으로!


[그림 6] VLSI社의 디코더 VS10xx 시리즈

 VLSI사의 VS10xx 시리즈가 많이 쓰입니다. 디코더야 종류별로 많이 존재하긴 하지만 위 디코더가 많이 쓰이는 이유는 MP3, WMA, OGG, WAVE, MIDI 등 수많은 음원디코딩 능력을 갖고 있기 때문입니다. 물론 위 제품도 처음부터 입수가 쉬웠던 것은 아니지만.. 최근 MP3 자작 바람에 힘입어 인터넷 전자 부품사이트에서 판매가 되기 시작되었습니다.

3. 정리

 간단하게 하드웨어 구조를 살펴보았습니다.
부족한 부분이나 전문적인 용어는 위에서 밝혔듯이 용어정리 카테고리와 기초 강좌에서 다루기로 하구요..
질문사항이 있으시다면 가급적이면 블로그보다는 제가 운영하는 카페에 들러주시길 바라겠습니다. ^^

참고로 카페는 Micro PIC 사용자 커뮤니티 입니다. http://cafe.naver.com/micropic


참고자료
[1] Micro PIC 사용자 커뮤니티, http://cafe.naver.com/micropic




Comment +12

  • 코바 2009.01.02 00:26 신고

    광장한 달인이시군요.. MP3계의 달인!!
    하드웨어&소프트웨어를 동시에 습득하기 힘든데 대단하십니다.
    한국은 아직 일본이나 미국에 비해서 DIY분야가 뒤떨어지는 상황인데..
    님과 같은 분들이 많으면 더욱 빨리 선진국의 진입에 도달하지 않을까요?
    계속 즐겁게 블러깅을 하겠습니다. 새해복 많이 받으세요^^

    • 어이쿠 재미삼아 시작한 블로그가 카페 창설을 하게 하였고.. 새로 시작한 블로그가 큰 사명감을 안겨주세요~ 부흥에 보답하는 사람이되도록 하겠습니다. 관심있으시면 가끔들러서 강좌나 정보를 얻으시길 바랍니다 ^^

  • 알고리즘 2009.01.02 00:31 신고

    대박이군....공대생의 한명으로서 존경합니다...ㅋㅋ
    재가 졸작으로 나름 자부심을 갖고 만들었던 디지털저금통이랑 차원이 틀리군요...ㅡㅡ;;
    이런 좋은 정보 감사합니다....앞으로 자주 들려서 많은 정보 습득해야겠군요...ㅎ
    좋은 블로그 감사합니다..
    새해복 많이 받으세요...ㅎ

  • 선비 2009.01.02 00:34 신고

    KIT 로 만들어 봤을때도 힘들었는데...직접 만들어 보셨다니 대단하시네요.
    저도 님처럼 KIT 제품에 의존하지 말고 제작해볼까 하는 의욕이 생깁니다^^
    새해 복 많이 받으세요

  • 이군 2009.01.02 02:05 신고

    잘 읽고 갑니다. ㅎㅎ 좋은 정보 감사해요!@~
    근데 부피를 획기적으로 줄이거나 (현원 모비블루 큐브정도?) 헤드셋내 엠피기능 탑재도 가능하십니까?
    (헤드셋내(귀쪽) 탑재하여 단순 재생 기능에만 초점을 맞춘 그런 제품)
    전 문과생이였고 이런 분야를 전혀 모릅니다만 엠피를 사랑하는 마음에 질문 하나 남기고 갑니다. ^^;;
    수고하시고 앞으로도 좋은 정보 쭈~욱 부탁드립니다.

    • 아직 본격적으로 부피를 줄이는 작업을 해본적은 없습니다. 최근에 도전하려고 하는 것은 MP3 플레이어에 USB 기능을 탑재하는 것 입니다 ^^;

  • 1편에 이어 또다시 대단하다고 느껴지는 글이군요.
    추천해주신 카페는 모조리 가입을 했습니다.
    (어디서부터 시작해야할지 몰라서..일단은 눈팅 중입니다)

    더 많은 정보 올려주시면 감사하겠습니다.
    다음 포스팅을 기대할께요~

  • 솔모리 2009.01.02 12:37 신고

    모비블루 큐브 크기가 어느 정도인지 모르겠습니다만,
    크기를 헤드셋 안에 넣을 정도까지 줄이려면,
    MPGIO 에서 만든 USB 메모리 스틱 크기 정도도 가능합니다.
    단, 원칩 제품을 써야한다는 게 문제 -.-;;;

    • 부피를 극도로 줄일수 있기는 합니다만..
      아마 만들다가 노이로제 걸릴지도 ^^;
      차후에 아트웍에 익숙해지면 도전해보도록
      하겠습니다.


티스토리에서 새해에 시작하는 첫 주제는..
바로 자작 MP3 플레이어 입니다.

실은 운영하는 카페에 회로도를 제외한 소스 및 원리까지 공개된 강좌가 있긴 합니다만..
그게 해당 전공자 아니면 보기 어려운 면이 있어서..

그것들을 다시 정리하는 겸해서.. 누구든? 부담없이 볼 수 있는 자료로 남기려고 합니다.

물론 누구나 보기 쉽게 쓰자하면.. 밑도 끝도 없이 길어 질 것 같고..
어렵게 쓰자하면.. 보는이로 하여금.. 흥미 감소와 함께 스트레스로 작용할 수 있는 바~
쉽게 이해할 수 있는 내용과 전문적인 내용을 잘 비비고 섞어서 작성하려고 합니다.

어쨌든 제가 현역에서 활동하는 전문가도 아니고 뜬 구름 강좌이기 때문에 너무 고수준을 바라진 마시구요 ^^;

그럼 시작하도록 하겠습니다.

그리고 혹시 틀린내용이나 수정할 내용이 보이시면 언제든 말씀해주세요~
정당한 비판과 요구는 모두 반영하여 수정하겠습니다 ^^

1. 국내 MP3 자작 현황


 아시는 분만 아는 이야기겠지만 최근 국내 커뮤니티에서도 자작 MP3 플레이어에 대한 관심 증폭과 더불어 작품이 많이 제작되었습니다.(이런 부분이야 전자쪽 커뮤니티에서만 돌고도는 이야기라 모르는 분이 많으시겠지요?) 하지만 대부분은 3~4년전 해외사이트에서 공개된 MP3의 클론(복제, 답습)이었습니다.

많은 사람들이 해외사이트를 참고한 MP3를 제작 및 공개하기에 이르렀고, 저도 그 중에 한 사람이었습니다~

대부분은 마이크로프로세서 스터디 또는 단순 흥미의 일환으로 시작한 자작이었기에 실용성이나 디자인을 강조한 자작 MP3 플레이어는 거의 없었구요 그렇기 때문에 완성도가 우수한 작품도 드물었던 것 같습니다.

하지만 나름 노하우가 쌓이자, 나름 기술적으로 훌륭한 MP3 플레이어가 제작되기 시작하였고..
디자인과 부피 부분만 제외하고는 훌륭한 작품들이 속속들이 공개가 되었습니다.

한때 저는 실용성을 강조한 MP3 플레이어를 제작해보고자 마음 먹었는데..
디자인 및 부피를 자작으로 감당할 수 없기에 일단 잠정 중단을 하였습니다. 그래서 최근에는 MP3 플레이어 제작에 열을 올리는 것은 아니지만.. MP3 플레이어 제작은 하드웨어, 소프트웨어 양 분야로 많은 공부가 되고 있기에 스터디 명목으로 MP3 플레이어의 완성도를 높이는 측면으로 접근을 하려고 하고 있습니다.
 
쓰다 보니 개인적 이야기가 너무 길어져 버렸네요.. 그럼 넘어가도록 하겠습니다. 

일단 알려진 해외 자작 MP3 플레이어가 꽤 많지만..
제가 아는 작품중 대단한 작품을 하나 꼽자면 다음과 같습니다.



[그림 1] 일본의 한 개인이 만든 Timpy MP3 모음


출처 : http://www.chiaki.cc/
네이버 번역 : http://j2k.naver.com/j2k_frame.php/korean/www.chiaki.cc/

이름은 Timpy라고 하구요.. 개인이 만든  세상에 하나밖에 없는 MP3 입니다.
사진으로 봐서는 잘 모르겠지만 단순 자작을 뛰어 넘어서.. 디자인, 실용성 어느것 하나 뒤지지 않습니다.

참고로 사진 순서는 버젼업 단계 별로 나열 한 것인데.. 처음에는 소형 MP3에서 시작하여, 점점 부피를 줄여 헤드폰에 실장을 하였고, 차후에는 TFT-LCD를 채용하여 시각화를 시도 그리고 SD카드를 MP3 자체에서 읽고 쓰기위해 USB를 추가하는 등.. 기능상 발전을 거듭한 작품입니다.

이 개인작품에 대해 정말 대단하다고 밖에 할 수 없지만  
그중 가장 인상깊은 것은 회로도, 소스, PCB 거버파일까지 모두 공개하고 있다는 점 입니다.
(우리나라에서는 눈을 씻고도 찾아보기 힘든 부분입니다..)

여튼 해외에는 이런 대단한 사람들이 많이 있는데.. 특히 일본과 유럽에 많이 분포?해 있습니다.

그럼 이번엔 국내쪽으로 눈을 돌려보도록 하겠습니다.
(여기서 부터는 개인적으로 느낀 부분이라 오류가 많을 수 있습니다. 양해바라고 변경할 사항이 있다면 수정을 요청바랍니다.)

국내에서 자작 MP3 플레이어는 MP3 자체보다는 다양한 멀티미디어 기능 확장쪽으로 발전을 거듭하였습니다.

초창기에는 당근이의 AVR 갖구 놀기(http://cafe.naver.com/carroty) 라는(이하 당근이 카페) 거대한 전자 커뮤니티에서 많은 정보공유가 이루어 졌습니다.

처음에는 기본적인 정보 공유 이루어졌었는데..
어느날  당근이 카페에서 kkamcneko 아이디를 쓰시는 분이 해당 소스와 회로도를 공개하면서..

1차적으로 MP3 자작에 많은 사람들이 자극을 받았습니다.

물론 kkamcneko님의 작품은 순수 창작품이 아닌 이미 해외 자작 사이트를 참고하여 만든 작품이라고 밝히고 있지만..
최소한 해당 자료를 공개한 것만으로 많은 이들에게 도움이 되었음은 분명했습니다.



[그림 2] kkamcneko님 자작 MP3 플레이어 


동작화면은 http://cafe.naver.com/carroty/6217에서 볼 수있습니다. (아마 회원 가입 필요?)

이후 kkamcneko님 작품을 참고하여 네이버 유리한(yurikhan)님이 작품을 제작하셨는데.. 
유리한님 또한 소스와 회로도 및 FAT 관련 기초 강좌 글을 게시하셨습니다.
가 MP3 제작을 결심한 것은 유리한님이 소스와 회로도를 공개한 당시였는데.. 기본 베이스는 일본사이트 등을 돌아다니면서 습득을 했고.. 파일시스템 관련하여 유리한님의 강좌와 소스에 많은 도움을 받았습니다.

개인적으론 이 때 부터 자작 MP3에 관련하여 많은 정보가 오고 가면서..
자작 열풍이 크게 불었던 시기가 아닌가 합니다.

아직도 해당 커뮤니티를 찾아가면 유리한님의 소스에 대한 질문이 넘쳐나고 있는데..  
일례로 유리한님 7초 코드라는 말이 생겨났습니다~ ( 이 이야기는 나중에.. ) 




[그림 3] 유리한님의 자작 MP3 플레이어



kkamcneko, 유리한님 및 많은 분들의 정보 공유로 인해 당근이 카페를 중심으로 지금은 많은 작품들이 나오게 되었고..
성능도 뛰어난 작품이 많이 나오게 되었습니다.



[그림 4] 유리한님의 최근 마지막으로 공개한 자작 MP3 플레이어


그래서 현재는 MP3 구현자체는 성숙기에 이르렀고, 현재 추세는 인터넷 커뮤니티 및 전자 쇼핑몰에 소형 TFT-LCD가 풀리면서(개인이 구하기 어려운 물건입니다.) TFT-LCD 및 터치스크린 기반 MP3 및 멀티미디어(동영상은 불가.. 이유는 뒤에..) 플레이어 제작이 일반화 되고 있습니다.

다양한 작품은 당근이 카페의 작품 게시판에서 MP3로 검색하시면 확인하실 수 있습니다.

참고!
 위의 작품을 보시다시피.. 위의 작품은 일반적으로 알고 있는 arm, mips 보드에 linux 및 windows ce 기반의 보드를 사용한 것이 아닙니다. 위의 작품들은 회로부품 선정 및 회로 설계, 펌웨어, 드라이버와 같은 소프트웨어 모두 개인 또는 다수가 작업한 결과물 입니다. 그리고 메인으로 사용된 마이크로프로세서는 8비트 ~ 32비트(현재 컴퓨터나 임베디드 보드는 최소 32비트 급 이상이지요?)에 4k ~ 30k 바이트라는 극악한? 환경에서 제작된 작품입니다. 그러니 현재 소위 말하는 arm 보드랑 비교에는 무리가 있습니다. 요 참고글은 가끔 밑도 끝도없이 모르고 의심하시는 분이 생길까봐 노파심에 적은 글이니까.. 너무 신경쓰지 않으셔도 됩니다 ^^;



2. 요술고양이의 MP3 플레이어 자작기

 제가 MP3를 제작하기로 한 것은 졸업작품을 위해서였습니다. 그래서 저도 8비트 MCU(Micro Controller Unit: 그냥 요 세계에서 소형 마이크로프로세서를 부르는 통칭정도로 일단 이해해주세요.. 자세한 설명은 나중에 드리겠습니다.)를 기반으로 제작을 하기로 마음을 먹었지요..

그 당시(2007년 여름)는 워낙 지식도 얇팍했고(지금은 지식이 두껍다는 말은 아닙니다.) 솔직히 말해서..
당장 제작할 능력은 안되고.. 스터디를 하면서 시작해야 할 시절이었는데..

나름 졸업전에 도전을 해보자 맘으로 시작을 했습니다.

그래서 단순 음악 플레이를 목표로 해서 스터디를 시작했습니다.
MCU + 디코더 + CLCD(Character LCD: 영문자만 출력가능한 기초적인 LCD 입니다.)의 구성을 가진 Olny 음악 플레이 목적만 갖는 간단한 MP3 플레이어였지요..

그래서 일단 일본사이트를 중심으로 투어를 시작했습니다.
가장 큰 이유는 사이트 번역기로 번역!이 되어서 자료 습득이 용이했기 때문입니다.
그리고 우리나라와 달리 일본에선 전자공작에 사용하는 프로세서가 PIC를 많이 사용하고 있었기 때문입니다.
즉, 국내 학생들이 AVR MCU를 활용하고 있을 때 저는 PIC MCU를 한참 사용하고 있었습니다.
(PIC와 AVR을 모르시는 분은 그냥 쉽게 인텔용 프로세서냐 VIA 프로세서냐 정도로 이해해주세요.. 요것도 자세한 설명은 나중에 기회가 되면 설명드리겠습니다.) 

여튼.. 자료를 입수해서.. 스터디를 시작했습니다.
그런데 그 당시.. PIC 생산업체인 Microchip에서 16비트 MCU가 나오더군요.. 이전에 작업하려던 MCU보다 속도는 2.5배나 더 빠르고 16비트 연산에 ROM과 RAM이 월등히? 큰 녀석이었습니다.

그리고 거기에다가 TFT-LCD를 어느 한 커뮤니티에서 공구를 하기 시작했습니다.
그래서 기왕 목표를 갖는것을 더 크게 갖기로 마음먹고
단순 음악플레이기기에서 간단한 이미지 출력이 가능한 멀티미디어 기기 구현에 목표를 갖게 되었습니다.

그래서 약 3개월간 스터디와 시행착오를 거쳐서.. 1차 버젼을 완성했습니다.
나름 심혈을 기울여 만들었기 때문에 그 당시까진 저의 최대 역작(?)이었습니다.
(자잘한 버그도 참 많았습니다.)

그 당시 읽고 스터디 한 영문문서 및 기술노트가 상당했구요 인터넷에 나름대로 강좌 글을 게시했습니다.

개인적으로 가장 애를 먹인 부분이 있다고한다면..
FAT32 드라이버를 내 입맛에 맞게 수정하고 직접 구현해본다고 도전 한 것이 가장 오래 디버깅을 하게 만드는 요인이었습니다. (실은 외국에 공개된 것도 많았지만.. 도전하고 싶었어요~)

사진은 아쉽지만 생략?하기로 하구요..

저는 새 버젼을 제작하기로 마음먹었습니다.
대학원을 진학하면서 삼성소프트웨어 멤버십을 한번 지원해보기로 했거든요..

그래서.. 리비전을 거쳐..
자취방에서 3일간 땜질하고 펌웨어 수정 및 안정화 그리고..
블루투스로 음악전송 및 PS2 패드를 장착한 -_-; 테트리스를 추가하여

제 인생? 최대 역작이 탄생합니다.
그 이름은 Magic Cat Player이며, 차후 제가 운영하는 카페에서 진행하는 mPIC3 Player 프로젝트의 베이스가 되었습니다.

그리고 요 녀석 덕분에 삼성소프트웨어 멤버십 18기가 되었습니다.
최근에는 이렇게 불태우며 작업을 못해서.. 몸이 근질근질 합니다.
사진은 전에 사용하던 네이버 블로그에서 가져왔습니다.



[사진 5] Magic Cat Player 1.0


마지막으로 플레이 동영상입니다.


 


[동영상 1] Magic Cat Player 1.0 시연 영상

# 위 화면에 나오는 해당 텍스트 파일(txt)은 이래저래 웹에서 돌아다니는 소설? 텍스트인데..
아무래도 이래저래 위법성?이 있어 테스트용으로 확인 후 삭제하였습니다. :-)


 


[동영상 2] 블루투스 시연 영상


이번 포스트는 여기까지 하고.. 다음 포스트 부터는 MP3 자작에 관련된 이런저런 썰을 본격적으로 풀어보도록 하겠습니다.


3. 부록
참고할만한 MP3 제작 사이트
http://www.project-hf.net/ehobby/Projects/Mp3_Jukebox/jukebox_main.htm
http://www.pjrc.com/tech/8051/ide/fat32.html
http://www.pjrc.com/tech/mp3/sta013.html
http://hubbard.engr.scu.edu/embedded/procyonmp3/index.html
http://www.chiaki.cc/
http://www.mars.dti.ne.jp/~m7030/

참고자료
[1] http://www.chiaki.cc/
[2] 당근이의 AVR 갖구 놀기 네이버 카페, http://cafe.naver.com/carroty
[3] Microchip PIC 사용자 커뮤니티 네이버 카페, http://cafe.naver.com/micropic



 

Comment +38

  • 이전 댓글 더보기
  • 홍홍 2009.01.01 20:46 신고

    대단하시군요. 현재 mp3 회사에서 펌웨어 업무를 맡고 있습니다. 3개월에 하드웨어, 펌웨어까지 다 하셨다니 놀랍습니다. 펌웨어작업에 보통 6개월은 걸리는데 개인이 이정도의 실력을 가지고 있다면 님의 앞길이 밝아 보입니다.
    한국 IT를 이끌어가는 훌륭한 개발자 분이 되실길 빕니다. 새해 복 많이 받으세요.

    • 과찬의 말씀이십니다. 주변의 여러분들과 많은 분들의 도움이 없이는 가능하지 못했을 것입니다. 좋은 말씀 해주셔서 너무 감사합니다.

  • 대학다닐 때 디지털클락 만든 적이 있었는데, 뭐 워낙 단순해서 키보드에 lcd창으로 되어있는 시계였습니다. 처음에는 단순 시계만 하다가 달력이다가 알람까지... 처음 할때는 정말 재미있었는데 프로그램 짠답시고 밤도 세고 그랬죠. 지금생각해보면 아무것도 아니지만 그 때는 정말 했다는 성취감도 굉장했습니다. 사실 전자공학을 해도 이런 것을 경험 해보지 못하고 졸업하는 사람도 많습니다.

    지금은 어떻게 직접적으로 개발하는 일은 하고 있지는 않지만... 대학 때 많은 것을 해보면 사회에서는 분명 도움이 많이 됩니다. 새해 복많이 받으세요.

    • 네 맞습니다. 성취감 없이 이런일을 하는게 쉽지 않은 것 같습니다. 계속해서 이런일을 할 수 있을지 모르겠지만.. 아직까진 재미가 있네요^^

  • 전 이런쪽엔 정말로 정말로 정말로 문외한입니다.

    이런것 하시는분들 보면 그저 부럽기 짝이 없습니다..^^

    • 관심있으니까 다 하게됩니다.
      제가 운영하는 카페에는 치과의사분께서 전자를 취미로 하시는 분이 계십니다. 소위 엄치아!(엄마 친구 아들)이시죠 -_-;

  • 으아 대단하시네요. 오픈프레임의 mp3버전인가요. 글 잘보고 갑니다.

  • 이정도면 2009.01.01 21:15 신고

    아무리 여러면에서 생각해봐도 사는게...

  • 이다님 2009.01.01 22:02 신고

    역시 저는 이런쪽으로는 꽝이라 봐도 잘 모르겠네요...
    하지만 정말 대단하신거 같습니다.
    대충 눈으로 보면서 MP3의 구조가 약간 이해되기도 한듯한 느낌...
    수고하셨습니다.

  • 전자공학도 2009.01.01 22:07 신고

    전자공학 전공중인 학생입니다. 완성 후 느끼셨을 성취감을 생각하니 제가 다 뿌듯하네요~ 설계부터 제작까지 혼자서~!^^ 그리고 위에 '이정도면'님..당연히 아무리 생각해도 제품을 사는것이 훠~~~~얼씬 남는것이지여^^ 하지만 이런 분들이 입사하고 계발에 참여하여 신제품이 나오고 그 물건을 접할수 있는것이 아닐까요? ^^

  • 우와 2009.01.01 22:30 신고

    새해에 좋은 글 보고 갑니다. 계측공학이란 과목 들을 때 몇가지 센서를 이용한 계수기 만든 적이 있었는데 그것도 4일 내내 힘들었었거든요. 성공하긴 했지만 기계과라 전자는 처음이라 고생했다는.. ㅜㅜ 도대체 저 정도를 만드려면.. 우와.. 당신 같은 분이 있어 한국 IT산업의 미래가 밝아보입니다. 새해 복 많이 받으세요 ㅋㅋ

  • 초코푸딩 2009.01.01 22:47 신고

    예전에 같이 운동하던 외국인중에 한분이 mp3를 실비아(시큼한맛의 가루 군것질거리) 플라스틱 케이스에 만들었더라구요. 신기하다고 생각했는데, 여긴 더 대단한 자작mp3가 많네요ㅎㅎ

  • 한울 2009.01.01 23:48 신고

    훌륭하십니다. 앞으로도 계속 좋은 글 올려 주세요. 지켜 보겠습니다.

  • 90년대 초반에 같이 자취하던 전파공학과 다니던 친구가 있었는데..
    삐삐 하나 만들어 달했더니..
    "만들수는 있는데 등에 지고다닐수 있냐?" 하는 겁니다. ㅎㅎㅎ
    님도 파이팅~ 입니다.~!!!!

  • 컴전공학생 2009.01.02 01:33 신고

    안녕하세요. 저는 생각만 해보고 접근도 못해봤는데 많은 감명을 받았고 느낀점도 많습니다. 저같은경우는 전자전공이아니고 컴퓨터전공이라서 전자쪽 지식이 많이 취약해요. 보드 이런거에 ㅠㅠ 저도 고양이님처럼 직접 자작한번 해보는게 소원입니다. 앞으로 자주 들를게요. 가급적 전자쪽 기초내용도 쉽게 쉽게 설명해 주세요ㅠㅠ 나중에 궁금한것좀 여쭤봐도 될까 모르겠네요. 안녕히 계세요.

  • 멋지군요. 저도 이쪽으로 관심이 많은데..
    열심히 해봐야겠군요.
    꼭 MP3가 아닌..
    디스플레이+프로그래밍 에 관심이 많아서요..^^;;

    좋은자료 감사합니다.

    P.S.
    처음 이런 자료를 접하는 사람에게
    어디서부터 시작할지 조언좀 부탁드립니다.
    (완전 초보라고 생각하셔도 되요.)

    • 이런자료는 인터넷 커뮤니티(카페, 동호회)를 이용하시는게 가장 빠를 듯 합니다. 추천카페로는 네이버 카페 검색에서 지니의 LCD 라고 검색해보시던가 또는 너굴팬더의 마이크로하우스 카페를 찾아보세요~

  • 삼성소프트웨어 멤버십분이셨군요. 18기(.2 아니고)시면 OT때 스쳐지나갔을 수도 있겠네요~ 혹은 함께 이야기했을 수도~? ㅎㅎ
    훌륭한 글 잘 보다 갑니다^^

  • 천하장사 2009.01.02 07:23 신고

    재미있을 것 같네요. 한동안 일이 바빠서 이런 일들을 할 틈이 없었네요. 지금 junk box에서 잠자고 있는 Weller soldering station을 꺼내서 한번 해봐야 겠습니다. 좋은 정보 감사합니다.

  • 아이비의 꽃 브라운대 2009.01.02 08:23 신고

    예전에 도전했었는데 상당히 어렵더라고요,,,
    뭐,, 기능면은 아이팟을 그냥이용했더니 쓸만은 하던데,,,
    전 플라스틱을 이용해서 커버했더니 가벼워서 좋더라고요??
    지금은 떨어뜨려서 망가지긴했지만요,,
    좋은정보 ㄳ요

  • 조성철 2009.01.02 09:06 신고

    우와.... 멋져요 멋져.

    어쩌면..........아이팟을 넘나드는 셰계적인 기업을 차리실 수도...ㅎㄷㄷㄷ

    어쨋든.. 근데 궁금한데요.. 보통 아이팟 터치같은건 인터넷도 되잖아요.. 그런것도 연결할 수 있나요??

  • 지금도 파는지는 모르겠는데, 예전에 펀샵에서 DIY mp3를 팔았었는데, 하지만 용량에 비해 가격에 GG를 치고 말았다는...

    그놈의 가격을 보니 나의 선택은 그냥 하나 사는 것이 낳다는 생각?

  • 우와~ 엠피3도 직접 만들 수 있는 거로군요!!
    대단하십니다. ^^

  • 흙흙 ㅠㅜ 내 닉네임도 유리한인데;; 당근이 카페측의 유리한(yurikhan) 님과는 다른 사람입니다;;
    그래서 당근이에서는 활동을 거의 못했죠. 사람들이 헷갈려들하셔서..
    kkamcneko 소스 활용해서는 2006년 말경에 만들어보기는 했는데
    그때 소스는 거의 그대로 사용.. 땜질한 기억밖에 없네요.


내 손으로 만드는 MP3 네 번째 포스트입니다.
포스트 작성 시간이 상당히 많이 소요되고 나름 내용 검증도 하느니라~
빠른 업데이트는 사실상 조금 어렵습니다.

차후 시간을 쪼개서 직접 제작하는 사진도 올리고.. 제작도 새로해야하는데.. 여건이 만만치는 않네요~

그 대신 포스트 업데이트 간격이 길어지더라도 끝까지 완성할 수 있도록 노력해보겠습니다~

이번 포스트는 앞에 간단하게 자작 MP3 관련 이야기를 해보았으니..
이제는 슬슬 설계에 대한 이야기를 조금씩 해보는 시간을 갖겠습니다.

1. 요구사항 확립

모든 과정중 설계는 중요한 위치를 차지합니다. 일종의 기반공사이기 때문에 제대로 된 설계를 하지 않으면 나중에 큰 불상사가 발생할 수 있습니다. 그래서 비록 우리는 취미로서 자작 MP3를 제작하지만 개발에 앞서 기본 설계를 위한 요구사항을 확립할 필요가 있습니다.

 요구사항이라는 것은 말 그대로 요구되는 항목으로서, 해당 기능 및 서비스 구현을 위해서 필수 또는 선택적으로 필요한 사항을 수립하는 것입니다. 조금은 귀찮은 이러한 과정을 거치는 이유는 요구사항을 정의하여 해당 기능에 맞추어 하드웨어 및 펌웨어를 설계하고 개발하게 된다면 원하는 니즈에 맞게 개발을 할 수 있도록 도와주기 때문입니다. 

 하지만 업체도 아니고서야 현실적으로는 요구사항에 하드웨어나 소프트웨어를 맞추기보다는 자신이 다룰 수 있는 하드웨어나 MCU에 기능이나 요구사항을 맞추게 되는 상황이 더 많이 연출되기도 합니다.

 그래서 자신이 구현가능한 범위내에서 기능상 요구사항을 수립해보고, 해당 요구사항에 맞추어 하드웨어 및 소프트웨어를 설계해보겠습니다.

그럼 먼저 예제로 하드웨어 적인 요구사항과 소프트웨어적인 요구사항 그리고 해당 요구사항을 필수와 선택적 요구사항으로 나누어서 요구사항을 확립해보겠습니다.

예제)

(1) 하드웨어

< 필수 요구사항 >
- MP3 음악을 플레이 할 수 있어야 한다.
- 문자 또는 그래픽 인터페이스를 제공해야 한다.
- SDCARD를 이용해야 한다.

< 선택 요구사항 >
- 320k MP3 음악을 플레이 할 수 있다.
- OGG 또는 WMA 등 다른 음악파일을 플레이 할 수 있다.
- SDHC를 지원할 수 있다.
- 칼라 그래픽을 출력할 수 있다.
- USB를 사용할 수 있다.
- 블루투스를 사용할 수 있다.
- 배터리를 이용하여 휴대할 수 있어야 한다.
- 버튼 또는 터치스크린을 사용해야 한다.

(2) 소프트웨어

< 필수 요구사항 >
- FAT16 및 FAT32 파일 시스템을 사용해야 한다.
- 반복 및 랜덤 음악 플레이를 지원해야 한다.
- 문자 또는 그래픽 인터페이스를 제공해야 한다. 

< 선택 요구사항 >
- TXT 또는 BMP 등을 볼 수 있다.
- Resume을 지원한다.
- 플레이 리스트를 지원한다.

 실제적으로는 많은 기능적, 기술적 요구사항이 존재할 수 있지만 간단하게 나마 위와 같이 기능상 위주의 요구사항을 정의해보았습니다. 필수 요구사항으로는 반드시 필요한 기능을 지칭하고 있으며, 선택사항은 되도 그만 안되도 그만한 내용을 정의하였습니다. 만약에 선택 요구사항이라도 꼭 필요하다고 여겨지면 필수 요구사항으로 변경 할 수 있고, 필수 요구사항이라고 하더라도 없어도 크게 문제가 안된다면 선택 요구사항으로 변경하면 되겠습니다.

그럼 위와 같이 간단하게 나마 기능상 요구사항을 정의해보았으니..
필수 요구사항만 자세히 살펴보겠습니다.

# MP3 음악을 플레이 할 수 있어야 한다.

 당연한 이야기겠지만 MP3 플레이어에서 MP3가 플레이가 안되면 문제가 되겠지요? 기본적인 요구사항입니다. 하지만 선택사항으로 320kbps와 같은 고음질 MP3 플레이를 원한다면, 일단 디코더를 해당 bps를 지원하는 하드웨어이어야 하고 MCU 또한 해당 음원을 전송할 수 있는 대역폭을 제공할 수 있도록 되도록 고 클럭의 MCU가 필요함을 예상할 수 있습니다.

# 문자 또는 그래픽 인터페이스를 제공해야한다.

 이 요구사항은 UI(User Interface)와 관련된 부분입니다. 소프트웨어 요구사항에도 포함되는 부분으로서, 간단하게 아스키 및 일본어 정도의 문자만 출력한다면 CLCD(Character LCD)로 충분하나 긴 문자나 그래픽적 요소를 구현하기 위해서는 GLCD(Graphic LCD)나 TFT-LCD 등이 필요합니다. 그리고 자연스레 TFT-LCD를 사용한다고 한다면 MCU의 성능 또한 TFT-LCD를 제어하기에 적당한 속도를 갖고 있어야 합니다.

# SD 카드를 이용해야 한다.

 실제 상용 MP3 플레이어의 경우 플래시 메모리을 이용하여 MP3 플레이어가 제작됩니다. 하지만 플래시 메모리을 제어하고 사용하는게 쉽지는 않는지라 비교적 제어가 쉬운 SD카드를 이용해야 한다고 명시해보았습니다.

# FAT16 및 FAT32 파일 시스템을 사용해야 한다.

 대부분 플래시 메모리 및 SD 카드가 위의 파일시스템을 사용하기에 필수적인 기능으로 명시해보았습니다.

# 반복 및 랜덤 음악 플레이를 지원해야 한다.

 이 요구사항은 대부분 MP3 플레이어가 갖고 있는 기능으로 소프트웨어로 구현할 부분입니다. 이전 포스트에서 작성했던 4계층에서 응용으로 작성해야 하는 부분이 되겠습니다.

# 문자 또는 그래픽 인터페이스를 제공해야 한다. 

 이 부분은 하드웨어 요구사항에 이은 소프트웨어 요구사항도 해당하는 부분입니다. 만약 TFT-LCD를 사용하기로 하였다면, TFT-LCD에 대한 기본적인 드라이버 외에 문자 출력을 위한 폰트 드라이버 그리고 그래픽 출력을 위한 그래픽 드라이버를 작성해야할 것 입니다.


간단하게 나마 필수 요구사항을 살펴본 결과..
어느정도 급 하드웨어가 필요한지 또는 어떤 부품이 필요한지 어느정도 아웃라인이 그려지게 됩니다.
그럼 다음 장에서는 위에서 나열한 모든 요구사항에 따라 MP3의 아웃라인을 설계해보겠습니다.

2. 하드웨어 설계

위 요구사항을 모두 만족한다고 가정하고 다음과 같이 예제 하드웨어 블럭 그려보았습니다. 참고로 그림 실력은 -. -; 그냥 그려려니 봐주시고 블럭간 계층이 있는 구조는 아니니 그냥 그림 자체는 평면적인 구조로 이해하시길 바랍니다.



[그림 1] 하드웨어 블럭도 예제

 [그림 1]은 앞서 나열하였던 요구사항을 만족는 MP3 시스템의 하드웨어를 블럭도입니다. 일부 블럭에는 실제로 입수가 가능한 전자부품 이름을 명시하였습니다.

 먼저 요구사항에 따라 MCU를 선정 시에 USB 모듈이 포함되어 있고, TFT-LCD의 원할한 제어를 위하여 비교적 빠른 처리 속도를 갖는 PIC32MX를 메인 MCU로 선정해보았습니다. 메모리는 요구사항에 맞추어 SD카드를 사용하였고, 디코더는 MP3 외에 OGG, WMA 와 같은 음악 파일 재생을 위하여 여러 음원을 지원하는 VS10xx 시리즈 디코더를 사용합니다. 또한 블루투스 음악을 전송하기 위해서 블루투스로 스테레오 음악 전송이 가능한 FB560BC 모듈를 채용하였고, 디스플레이 표시 및 기기 제어를 위해서 터치스크린이 포함된 TFT-LCD를 사용합니다.

 마지막으로 배터리 구동을 위한 요구사항을 만족하기 위해서 리튬 폴리머를 사용하고 충전을 위한 IC를 사용하여 USB 전원을 통하여 충전을 할 수 있도록 하였습니다. 그리고 그림에는 표시하지 않았지만, Regulator LM1117-3.3은 MCU를 포함한, 디코더, SD카드, 블루투스, 디스플레이 등 모든 부품의 입력 전압에 맞는 안정적인 전원을 공급하는 역할을 합니다.

 이와 같이 명확한 요구사항이 있으면 해당 요구사항에 맞게 설계가 가능합니다. 예를 들어 만약 여기서 부피나 기타 전원 관련에 대한 요구사항이 증가했다고 한다면, 부품 패키지의 크기가 적어지거나 또는 저전력 위주의 전자 부품 선정되지 않았을까 합니다.

다음으로는 요구사항에 맞추어 펌웨어를 설계해보겠습니다.

3. 펌웨어 설계



[그림 2] 펌웨어 블럭도 예제

 [그림 2]는 요구사항을 만족하기 위한 펌웨어의 구성입니다. 이번에는 하드웨어와 달리 계층을 나누어 그려보았습니다만 저의 그림 실력 한계상으로 의존적인 부분을 모두 명확하게 표시 하지 못하였기 때문에 대충 위와 같은 정도로 구성된다 라고만 참고하시면 되겠습니다.

먼저 요구사항으로 인해 사용되는 하드웨어 제어를 위한 기본적인 드라이버와 응용에서 요구하는 기능이 필요합니다.

그럼 각 계층을 살펴보겠습니다.

 가장 최하단에는 PIC32 설정을 위한 다양한 설정이 존재합니다. 예를 들어 USB를 사용하거나 또는 SPI 통신을 사용하기 위한 기본적인 설정 그리고 딜레이나 기타 시간 관련 부분을 제어하기 위한 내부 타이머 설정, 그리고 외부의 버튼이나 입력에 반응하기 위한 인터럽트, 주변 기기 제어를 위한 포트 입출력 설정, 빠른 데이터 접근을 위한 DMA 설정 등등 MCU의 기본적인 기능을 위한 계층이 되겠습니다.

그리고 두 번째 계층에서는 SPI 통신을 통하여 터치스크린이나 SD카드, 디코더의 설정 및 값을 읽고 쓸 수 있는 드라이버가 필요하고 포트 제어를 통하여 LCD, 블루투스 모듈 등을 제어할 수 있는 드라이버가 필요합니다. 첫 번째 계층이 PIC32를 위한 일종의 드라이버라고 한다면, 두 번째 계층은 외부의 터치스크린, SD카드, 디코더 등등 각각의 외부 하드웨어 제어 및 설정을 위한 드라이버가 되겠습니다.

세 번째 계층에서는 시스템 드라이버나 응용을 위한 미들웨어가 포함됩니다. SD카드 내의 파일을 읽고 쓸 수 있는 FAT16/32 파일 시스템 드라이버, LCD에 그림이나 문자를 출력할 수 있는 그래픽 및 폰트 드라이버, 그리고 FAT기반에서 특정 파일의 포맷을 읽고 분석할 수 있는 미들웨어가 이에 포함됩니다.

마지막으로 최상위에는 하위단의 드라이버나 미들웨어를 이용하여 최종적으로 MP3 플레이나 TXT 또는 BMP를 출력할 수 있는 플레이어 용용을 구성합니다

이와 같이 펌웨어도 마찬가지로 요구사항에 따라 어느정도 소프트웨어 및 드라이버가 구성됩니다. 예를 들어 위의 구성에서 추가로 TXT에 대한 유니코드 지원 요구사항이 발생한다면 폰트 드라이버 위에 유니코드를 위한 미들웨어가 포함될 것 입니다.

3. 정리

이번 포스트에서는 평소 저도 잘 안하는 요구사항 정의와 하드웨어 및 펌웨어 설계를 해보았습니다.
원래는 이런 포스트 기획도 안했는데.. 한번쯤은 하고 넘어가야 하지 않을까? 싶어서 부랴부랴 작성했습니다. 
그렇다 보니 내용이 많이 부실하군요~ -. -;;

어차피 뜬구름 강좌니까 많은 걸 기대하지 마세요!
라고 하기엔... 먼길을 돌아왔군요 흑흑!

여튼 개발을 하거나 문서 작성 등과 같은 작업 시작에 앞서서 요구사항을 정의하는 것은 명확한 목표를 설정하는데 많은 도움을 줍니다.

일전에는 하드웨어 제작 시에는 이러한 요구사항 정의가 없이 작업하다보니..

중간에 필요한 기능이 생기면..
중간에 하드웨어나 펌웨어를 뜯어고치는 일이 빈번히 발생하곤 했습니다.
가뜩이나 하드웨어는 수정이 쉬운 것이 아니기 때문에..
부품 구성이 엉망이 되고 나중에는 누더기가 되더군요.. (지저분~)

그리고 펌웨어를 거의 다 작성해놓고 이런일이 발생하면 
그와 연관된 모든 소스 코드를 고쳐야하는 불상사도 발생하곤 했습니다.

그러니 조금은 귀찮더라도 이것도 일련의 과정이다라고 여기시고 명확한 요구사항과 목표를 설정하셔서 개발에 차질이 생기지 않도록 주의하시면 좋겠네요!



P.S. 그럼 다음 포스트는 무슨 내용으로 쓸까요? -. -;;


Comment +5

  • 이야기 2009.01.14 11:40 신고

    상당한 기능의 MP3가 되네요. 이런 저런 기능이 포함되다보니 부품비도 만만치 않을 것 같네요.ㅎㅎ 블로그 잘보고 있습니다. 다음 편도 기대하겠습니다.

  • 2009.01.16 14:23

    비밀댓글입니다

  • BlogIcon MP3 2009.03.22 21:19 신고

    다음은 MP3를 어떻게 만드는지 보여주세요 이제~ㅜㅜ
    어떻게 만드나요?(너무 성급한가요? ㅜㅜ)


새해부터 지독한 감기로 몸살을 앓고 있습니다.
방바닥에 하루종일 눕다 지쳐.. 몸이 축쳐지는지라...

상태는 좋지 않지만.. 조금이라도 활동을 하는게 나을까 싶어서
포스트를 작성하기로 했습니다.

이번 포스트는 자작 MP3의 내부 소프트웨어(이하 펌웨어)의 구성을 살펴보는 시간을 갖겠습니다.

1. 개요

 우리는 자작 MP3 플레이어를 제작할 때 하드웨어 구성은 물론 MP3 플레이를 위한 일종의 소프트웨어 코드 또한 작성을 해야합니다. 일단 MP3 제작의 목적이 아니더라도 MCU나 주변 회로를 제어할 수 있는 코드는 반드시 필요한데, 이러한 코드를 펌웨어라고 합니다. 앞서 서술한 것 처럼 펌웨어의 가장 큰 역할은 하드웨어를 제어하는 것입니다. 

 즉, MCU 자체를 제어할 수도 있고 MCU의 인터페이스나 포트를 통하여 외부의 주변기기를 제어할 수도 있습니다. 하지만 펌웨어는 특정 하드웨어 의존적인 코드이긴 하지만 일종의 소프트웨어이기 때문에 하 단순 하드웨어 제어를 넘어서 다양한 기능을 수행할 수도 있습니다.

 다만, MCU용 펌웨어는 코드는 운영체제에 기반한 코드가 아니므로.. 고수준의 기능을 수행하기 위해서는 저수준적인 방법으로 접근을 해야합니다.

 그 외 이것저것 할이야기는 많지만 서론 부터 어려운 말로 도배하면..  골치가 아프니 심도있는 이야기는 후로 미루고,  자작 MP3 플레이어를 구성하는 펌웨어의 전체적인 구성을 살펴보겠습니다.

참고!
펌웨어에 대한 제 개인적인 설명은 제일 하단 참고자료를 봐주세요..


2. MP3 Player 펌웨어의 기본 구성

유의!
 본론으로 들어가기전에 유의사항 전달하겠습니다. [내 손으로 만드는 MP3 강좌]는 당연하게도 어떤 MP3에도 적용할 수 있는 레퍼런스 구조가 아닙니다. 첫 번째 포스트에서 제가 제작했던 자작 MP3(Magic Cat Player)의 기준으로 구성된 그림입니다. 앞으로는 자작 MP3라고 한다면 제가 제작했던 작품을 기준으로 두고 있음을 염두해주시길 바랍니다.



[그림 1] 펌웨어 기본 구성

 [그림 1]은 자작 MP3 플레이어의 기본적인 펌웨어스택(? 스택이라고 부를 수 있을런지)이 되겠습니다. 일단 위 처럼 계층을 4단계로 나누었는데, 사실상 위 그림처럼 반듯하게 구분을 짓기도 애매해고 겹치는 부분이 상당 수 존재합니다. 다만 기능상으로 나누어서 위와 같이 4계층으로 나누어 봤습니다.

 그림을 보시면 알겠지만.. 일단 운영체제는 없습니다. 실제로는 일부 RTOS(Real-Time Operating System)을 포팅해서 사용이 가능하나 여기서는 RTOS는 없는 상황을 기준으로 합니다.(실제로는 RTOS가 없어도 무방하며 저 또한 운영체제를 사용하지 않았습니다.)

그럼 각 층마다 간략한 설명을 드려보도록 하지요..

(1) MCU 제어코드

 PC도 켜자마자 바로 윈도우가 뜨지 않고 바이오스 화면이 뜨는 것 처럼.. MCU 또한 처음 전원이 들어가고 전원 안정화가 이루어진 이후 부터는 MCU 내부 설정 및 컨트롤러 초기화가 필요합니다. 이러한 절차는 MCU가 정해진 동작을 수행하기 이전에 준비를 하는 과정으로 외부 하드웨어와 인터페이스나 제어를 위해서 필요한 필수적인 절차입니다. 이러한 절차중에서 간단하게는 클럭을 위한 세팅을 할 수도 있고, 타이머 주기를 조절하거나 인터럽트 설정을 끄고 켜거나, 통신 인터페이스 사용을 위한 초기 설정 등이 모두 포함될 수 있습니다.

즉, MCU 제어코드는 MCU가 동작을 하기 위한 가장 기본적이고 중요한 코드라고 할 수 있습니다.

(2) 외부 하드웨어 드라이버



[그림 2] MP3 플레이어 기본 구조 (2. 자작 MP3 Player 들여다보기 _ 기본 하드웨어 구성편)

 이전 포스트의 기본 하드웨어 구성인 [그림 2]를 다시한번 살펴보면 MCU 주변에 다양한 회로나 모듈이 구성 됨을 볼 수 있습니다. 이러한 모듈을 제어하기 위해서는 기본적으로 MCU 제어 코드에서 통신 인터페이스 설정 뿐만 아니라 외부 하드웨어를 위한 일종의 드라이버가 필요하게 됩니다.

 [그림 2]를 기준으로 필요한 드라이버를 언급해본다면.. 디코더를 제어할 수 있는 디코더 제어 드라이버, LCD 초기화 및 출력을 위한 LCD 드라이버, 메모리 카드를 읽을 수 있는 메모리 카드 드라이버 마지막으로 사용자 입력을 받을 수 있도록 터치스크린을 채용한다면 터치스크린 드라이버, 일반 버튼을 사용한다면 각종 방식에 따른 드라이버 등등이 필요합니다.

(3) 시스템 드라이버

 시스템 드라이버는 하위 레벨의 하드웨어 드라이버와 달리 상위 레벨에서 부가적인 기능을 제공하거나 또는 최상위층의 응용을 작성하기에 앞서 도움을 주거나 반드시 필요한 드라이버라고 할 수 있습니다. 

 디스플레이의 경우 GLCD나 TFT-LCD를 이용한다고 가정 시 특정 모양의 문자를 출력한다거나 한글을 완성형, 조합형, 유니코드 등으로 분석하여 출력을 할 수 있는 폰트 드라이버가 있을 수 있고,  원, 직선, 사각틀을 그리게 하는 드로우 드라이버나 이미지 파일 등을 출력할 수 있게 해주는 BMP, JPEG 드라이버가 있을 수 있습니다.
메모리 카드의 경우에는 SD카드에서 음악 파일을 찾고 읽어오기 위해서 FAT32 파일 시스템 드라이버가 필요하게 됩니다.

(4) MP3 응용

 마지막으로 최상위의 응용입니다. 응용이라고 불러도 될지 조금 조심스럽지만 일단 MP3 플레이를 위한 프로그램이 되겠습니다. 하위 층에 자리잡은 드라이버를 바탕으로 제작된 코드입니다. 간단하게는 LCD에 문자나 이미지를 출력하고, 사용자 입력을 받아 MP3 파일을 불러와서 리스트를 작성하고 음악을 재생, 멈춤, 다음곡, 이전곡과 같은 동작을 수행하는 프로그램이 되겠습니다.


[그림 3] 응용 펌웨어 예제

 [그림 3]은 제가 제작한 작품의 주요 이미지 입니다. 그냥 참고정도 하시면 어떨까 싶습니다.
참고로 펌웨어 기반 응용은 우리가 일반적으로 생각하는 PC 프로그래밍과 달리 엄청난 노가다와 머리회전(?)이 필요합니다.

 예를 들어.. 한줄의 코드로 인해서 이전에는 멀쩡하게 플레이되던 고음질 음악이 끊길 수도 있습니다. 단순히 성능이 느린거 아냐?라고 하고 그냥 넘어갈일이 아니라 쓸모없는 동작이나 한줄의 코드의 위치가 얼마나 중요한가를 느낄 수 있습니다. 기본적으로는 응용 내부의 수많은 프로세스를 머릿속에서 정리하면서 프로그래밍을 해야합니다.

하지만 RTOS를 쓴다면 이러한 부분은 많이 해소할 수 있습니다. 단, RTOS로 인해서 MCU의 많은 ROM과 RAM을 요구할 수도 있기 때문에.. 하드웨어 특성에 맞는 선택사항입니다.

3. 정리

 이전 포스트의 간단한 하드웨어 구조에 이어서 이번에도 간단하게 펌웨어 구조에 대하여 살펴보았습니다.
펌웨어라는 개념이 쉽게 와닿을수 있는 개념은 아니기에 많은 분들이 헷갈리고 혼란이 많으실꺼라 생각되는데..
여기서의 펌웨어는 MCU의 ROM에 기입되는 코드라고 쉽게 생각하시면 어떨까? 싶습니다.

다음 시간부터는.. 실제 MP3 제작 예를 살펴보고 주변 하드웨어에 대해 하나하나 살펴보도록 합니다. 


참고자료
[1] 펌웨어란?, http://openhardware.tistory.com/trackback/8


P.S 
 평균 포스트 작성 시간이 몇일 나누어서 몇시간은 훨씬 넘는 것 같습니다. 역시 글쓰는일은 쉬운일이 아니네요~ 게다가 덜컥 너무 큰 주제를 잡아놓은게 아닌가 걱정 중입니다 -_-; 실제로 간단한 MP3 다시 제작해보려고 하고 있기 때문에.. 다음 포스트는 하드웨어가 어느정도 완성된 상태에서나 가능하지 않을까? 싶습니다.
 
그리고 [내 손으로 만드는 MP3 강좌]는 만드는 제작 원리 등을 소개하는 강좌입니다. 자세한 소스코드나 회로도 전문적인 내용은 차후에 별도에 따로 소개하도록 합니다.



Comment +4

  • 기계과 2009.01.07 22:27 신고

    좋은 내용 잘보고 갑니다~ ^^~

  • 이야기 2009.01.09 15:21 신고

    소프트웨어에 대해서 문외한이다 보니 하드웨어처럼 술술넘어가지 않네요.. 하지만 왠지 욕심이 생깁니다. 올해의 목표도 생겼고..ㅋㅋㅋ 이후 내용들도 기다리겠습니다.ㅎㅎ

  • 컴전공학생 2009.01.11 02:48 신고

    다음 글 기다릴게요 ㅠ ㅠ 최대한 빨리요 ; ㅋ

  • 전기전자에 입문한 초보입니다. 아트웍 검색어로 우연히 요술고양이님 블로그에 방문하게 되었네요. 앞으로의 포스팅이 기대되는군요.^^