요술고양이의 Digital Life



집에서 하드웨어는 전혀 안하다가 슬슬 개인 스터디도 하고 프로젝트도 해보려고 7년만에 개발 보드, 부품 상자를 봉인 해제 했습니다.

오랜만이라서 갖고 있는지조차 잊어버린 부품들이 많이 나오더라구요 
일단 PIC MCU도 12F, 16F, 18F, 24F, dsPIC, 32MX까지 시리즈 별로 다 있네요?

사진에는 모두 보이진 않지만 상용/자작 보드도 7 ~ 8개는 있는거 같고 이제는 어디 쓰기도 뭣한 ICD2에 PICkit3는 두 개씩이나 있고 C18 정품 CD, 그 외 LCD, 블루투스 모듈 등등 잡다하게 나오더랍니다.

하지만 막상 풍요속에 빈곤이라고 쓰고 싶은 부품은 없는 거 같고, 
PIC32는 chip만 가지고 있어서 몇가지 부품을 디지키에서 샀습니다. 대략 일주일정도 지나니깐 모듈이 도착했습니다.




맨 왼쪽은 RN4020이라는 BLE 모듈이고, 오른쪽 2개 보드는 PIC32MX 보드입니다. Fubarino라는 아두이노 호환(?)목적으로 만들어 진거 같은데 저는 그냥 ICSP로 밀어버리고 USB j통신 테스트만 했습니다.

7년만이라 개발환경도 완전 바뀌고 MPLAB X + 하모니를 쓰려니 복잡하고 난리도 아니네요
한참동안 삽질 + 멘붕을 겪고나서야 이제 대충 돌아가는 흐름?을 파악했습니다.

PIC32으로는 기본적인 동작 테스트도 했겠다 개발환경도 익숙해졌겠다 
개인 프로젝트에는 PIC32는 안써도 될 거 같아서 기껏 개발보드를 사놓고 PIC18F4550을 꺼냈습니다.

PIC18F4550이 마이크로칩내에서 USB가 지원되는 첫 MCU로 기억하는데 맞는지 모르겠네요

예전에 해당 칩으로 이것저것 많이 공부하고 썼었는데 오랜만에 쓰려니 configuration bits 부터 막히네요 
어떻게 코딩해야할지도 모르겠고 하모니 복잡하다고 혼잣말로 엄청 뭐라고 해놓고 없으니 이게 또 아쉽습니다.

이런저런 삽질을 한참하고 나서야 USB랑 UART 부터 뚫어서 겨우 테스트 완료 했습니다.





MCU에서 기본동작을 확인했으니 이제는 RN4020 제어를 하려고 데이터시트 놓고 잠도 안자고 신나게 드라이버를 짰습니다. 

어 그런데 계속 데이터시트를 보다뵈 간단하게 쓸거면 일일히 모든 기능에 대응 안해도 될 것 같단 생각이 드네요
디폴트로 이미 설정된게 많아서 일일히 해줄필요도 없군요!

개인 프로젝트 하는데 무슨 부귀영화를 누리겠다고.. 전 기능을 대응하는 드라이버를 짜냔..
그래서 일단 작업을 중단하고 백업을 해놨습니다.

그리고 UART로 모두 제어가 가능 모듈인지라 MCU가 필요없네요? 
(사실 개발용 랩탑에 BLE가 이미 있어서 이 모듈 자체도 필요없... 하지만 스터디를 위해서..)

USB to Serial만 써도 될 거 같네요. 이러면 별로 할게 없는거 같지만
근데 이미 벌여놓은거 그냥 18F를 CDC UART EMULATION으로 만들어 놓고 쓰기로 합니다.

참고로 BLE는 회사에서 CSR사의 CSR101x, Nordic사는 51822는 검토만, nRF8001는 직접 코딩 및 드라이버를 만들어 썼는데시 집에는 writing 장비도 없고 다시 그걸 또 할 마음이 없어서 RN4020로 선택해서 쓰는데 괜찮은거 같네요.

물론 다른 칩들도 모듈 형태로 편리하게 제공되긴 하지만 대부분 아닌 제 3의 업체가 만들어서 기능 제한적인 면이 있을거 같아서 마이크로칩에서 직접만든 모듈을 써보니 잘 만들어 놓은거 같습니다.
(물론 다른 모듈들이 2~3만원이나 할 때 $8 밖에 안하는 가격이 제일 컸습니다. 각 플랫폼 비교점을 좀 더 쓰고 싶지만 요건 나중에 따로 올리도록 하지요.)

여튼 오랜만에 하려니 삽질도 많이 하고 시간도 많이썼네요 진정 이제야 적응이 되는 거 같습니다.
(나중에 dsPIC 하면 또 삽질하겠지요?)

대신 간만에 알차게 시간을 보냈습니다. 이제 하드웨어는 대충 테스트되었으니 
어플리케이션 좀 짜보고 중간 결과물을 올려 봐야겠네요.
 







Comment +0


 과제가 통과되서 무사히 시작할 수 있게되었습니다!! 하지만 그전에 이미 작업은 조금씩 하고 있었지요..

1. TFT-LCD 테스트

  그전에 하드웨어를 설계하면서 간단하게 Universal PCB에 구성을 하고.. LCD를 테스트 및 터치 스크린 테스트를 했습니다.
LCD를 테스트 하는데.. 디스플레이 장치로 사용한 M280T1이 약간의 타이밍 문제가  발견되어 수정하는 그 타이밍을 보정하는데 시간이 많이 소요되었습니다.

조금 자세히 들여다 보면.. 보통 소형 TFT-LCD는 RGB 방식과 CPU(MPU)으로 나뉩니다.
RGB 방식은 기존의 아날로그 RGB와 비슷하게 Vsync와 Hsync에 맞추어..
픽셀의 값을 전달하는 것으로.. ARM9급 이상의 프로세서는 기본적으로 갖추고 있기도한 디스플레이 전용 인터페이스 입니다.

그 와 반대로 CPU 방식은 RGB와 같은 특수 인터페이스를 갖고 있지 않은 
보통 속도가 낮은 프로세서에서 사용할 수 있는 방법입니다.

제가 사용하는 PIC32MX 시리즈 또한 RGB 방식을 사용할 수 없고.. M280T1이 아예 CPU 방식으로 제어할 수 있도록 설계가 되어서.. CPU 방식을 사용합니다. CPU방식은 포트제어를 통한 소프트웨어 방식과 PMP 하드웨어 방식으로 제어할 수 있는데.. 대부분이 포트제어를 통하여 제어를 하지만 저는 PMP를 사용했습니다. (차후 가능하다면 DMA를 위해..)

일단 CPU 방식의 핀 구성을 살펴보면 CS, RS, RD, WR, Data[0..15], RESET 입니다.
이러한 핀은 타이밍을 맞춰주어야 통신을 해야 하는데..

타이밍을 살펴보면 다음과 같습니다.



 대부분 타이밍은 상단의 그림과 같으며, M280T1의 컨트롤러 데이터 시트가 대외비라고 써있어.. 부득이하게 직접 그렸습니다. -. -; 위의 타임 다이어 그램은 Graphic RAM에 쓰기를 할 경우 입니다. 

절차를 간단히 언급하면..
가장 먼저 CS(Chip Select)를 Low로 만들어 해당 컨트롤러를 사용하겠다고 알려줍니다.
그리고 커맨드를 쓸 것인지 또는 데이터를 쓸 것인지 결정을 하기 위해서 RS 핀을 Low 또는 High로 둡니다. Low의 경우에는 커맨드를 High의 경우에는 데이터를 씁니다.
그리고 RD(Read)와 WR(Write)를 Low, High로 클럭을 두어서..
통신 동기화 및 읽기, 쓰기 작업을 합니다.

바로 요런 타이밍만 지켜준다면 LCD에 초기화 과정을 거치고 무난하게 사용이 가능합니다.

그런데!
이 타이밍을 지켜줌에도 불구하고.. M280T1이 정상 출력되지 않았습니다.
단색이나 그레이 색 그라데이션은 상관이 없는데.. 칼라 16색을 그라데이션 출력 시 사선으로 출력되거나..
정상 출력되지 않는 경우가 발생했습니다.

정확한 원인을 찾아내기는 어려우나.. 꼼수로.. CS핀과 WR 핀을 변경하면.. 정상 출력 됩니다!! (두둥 -_-;)
허나 저는 PMP 모듈을 사용하기 때문에.. 이 핀을 바꾸기는 조금 어려운 상태이지요..

그 외 프로그래밍 최적화 옵션에 따라서도 출력되는 안정도가 다르고..
그리고 WR을 제어하는 핀의 출력 파형이 삼각파가 아니고 구형파로 나오는 것을 확인했음에도 불구하고..
데이터가 살짝 깨지거나 사선으로 출력 되는 것을 보면..

결론적으로 M280T1은 나름 WR 타이밍이 잘 맞지 않는다고 결론을 내렸습니다.

일단 일반 포트를 쓰면 PMP 보다는 훨씬 안정적이나..
일단 그라데이션 출력을 하지 않을 것이라고 생각되기 때문에.. PMP를 그대로 사용할 계획 입니다.

2. Touch Screen Test

 다음으로는 터치 스크린 컨트롤러 테스트를 했습니다. 이미 TSC2003 이나 ADS7846 등 실제로 많이 쓰이는 컨트롤러를 다 사용해보았기 때문에 별 걱정이 없이 회로룰 구성하고 테스트를 임했습니다.

그러나!
이런 작동이 안됩니다. I2C나 SPI 설정을 못한게 아닌가.. 뒤지고 또 뒤지고.. 처음에 TSC2003으로 하다가... 잘 안되서 ADS7843으로 변경해도.. 동작하기 않습니다. 그러기를 몇일.. 잠정적으로 컨트롤러 IC가 맛이 갔구나라고.. 결론을 내렬려는 찰나.. 동작합니다.

이유는 정말 사소? 한건지 모르겠는데..
지금 현재 사용하는 테스트 보드가 USB 전원을 사용합니다.

그런데 작업용으로 쓰는 PC 본체에서 연결하면 안되고..
노트북이나 다른 컴퓨터에서 연결하면 사용이 됩니다.

좀 이유치고는 황당하긴 했지만..
예상되는 원인으로는 USB 포트에서 충분히 전류를 공급하지 못해주어서가 아닌가? 라고 예상하고 있습니다.

USB는 스펙상으로는 5V, 500mA까지 제공해야하나..
이 스펙을 맞추지 못하는 USB 호스트도 상당 수 존재합니다.
(외장 하드디스크에 딸려나오는 케이블이 USB를 양쪽으로 꼽을 수 있게 한 것이 그 이유..)

특히, 노트북이 그러한데..
이번에는 그 반대군요.. 물론 전류 문제가 아닐 확률도 높습니다만 하여간..
원인을 발견했으니, 앞으로는 본체에 연결하지 못할 듯 싶습니다.

3. USB 테스트

 PIC32MX460F512L의 USB를 사용해야하는지라 간단히 테스트 해봤습니다. 이것도 처음엔 잘 안되서 각종 레퍼런스를 뒤져본 결과 USB ID 핀이 그라운드에 물려있어야 되더군요..

꽤나 삽질은 했지만.. 펌웨어만 올려주면 USB는 정상적으로 잘 붙습니다.

4. 결론

과제 시작 첫 째주에 필수적으로 필요한 기능의 테스트는 모두 끝났기 때문에.. (그 전에 미리 작업해둔 것이 좀 많긴합니다..)
이번주 부터는 USB 통신을 계속 테스트하고 관련 APP를 통하여 기본 펌웨어 구조를 제작해야 할 것 같습니다.

Comment +0

본 프로젝트 시작 세미나를 완료했습니다.
평가가 아직 나오지 않아 본 프로젝트가 정상 착수 여부가 결정되지 않았지만...

시작 세미나를 하면서.. 발표했던 내용을 정리하여 프로젝트의 목표 및 방향에 대해 다시 한번 리마인드~ 하려고 합니다.

1. 팀소개

팀명은 무려.. Gee 입니다 -_-; 설마 소녀시대의 그 Gee 냐고요?
네네 맞습니다 Gee 구요..

-_-; 참고로 제가 지은거 아닙니다.
프로젝트 서버에 Gee로 같이 프로젝트 하는 회원이 등록을 해버려서.. 그렇게 되었습니다.
제가 프로젝트 리더를 맡으면서 동시에 하드웨어 파트를 그리고 두 회원이 소프트웨어 파트를 나누어 맡고 있습니다.

2. 동기 및 목적

2.1 기존의 작품 재구성

 기존에 이미  LCD 보조 키패드라는 프로젝트를 진행했습니다. 기존 컨셉과 동일하게 사용자에게 편리한 인터페이스를 제공하는 것을 주 목적으로 삼았습니다. 하지만 그 당시의 프로젝트는 한달도 안되는 기간동안 진행된 프로젝트이었기 때문에 완성도나 기타 부분에서 부족한면이 많아 아이디어를 그대로 묻어두기는 아깝다고 생각을 했고, 해당 아이디어를 재활용하여 더욱 완성도 있는 작품을 만들기로 하였습니다.

2.2 편리한 User Interface 제공

 우리는 보통 PC상에서 다양한 어플리케이션을 사용하는데, 이러한 어플리케이션을 사용하는 방식은 각각 다르고 단축키나 기타 설정이 모두 다릅니다. 이러한 기능을 사용자는 모두 숙지를 하고 사용해야하는데, 기본적인 기능 외에는 잘 사용하지 않게 되거나 사용하는데 시간이 많이 걸리는 단점이 있습니다. 그리하여 해당 작품을 통하여 사용자에게 편리한 인터페이스를 제공하고, 이종의 Application 기능을 동일한 인터페이스로 수행 하도록 합니다. 그리고 복잡한 단축키 또는 기능 절차를 간소화하고 기존의 단 방향 인터페이스인 키보드를 보완하여 양방향 인터페이스 제공을 하여, 최종적으로는 각 Application마다 최적화 된 인터페이스 제공하는 것이 주 목적이 되겠습니다.

 마지막으로 USB, 32비트 프로세서 회로설계 및 제어, WPF 및 C# 스터디, OpenAPI 분야를 익히는 기회로 삼으려고 합니다.

3. 시스템 구성도

3.1 전체 시스템 구성도



[그림 1] 전체 시스템 구성도

 
 시스템의 전체적인 구성은 위 [그림 1] 같이 크게 어플리케이션 부분과 하드웨어 디바이스 부분으로 나눌 수 있습니다. 어플리케이션은 내가 사용할 App를 찾아내고, 관련 세팅을 하고 그에 맞는 이미지나 아이콘 데이터를 LCD로 전송하여 출력하고, 하드웨어 디바이스는 어플리케이션에서 보내준 데이터를 출력하고 터치스크린에서 수집된 좌표 값을 App에 넘기는 작업을 합니다.

3.2 어플리케이션 구성도


[그림 2] 어플리케이션 구성도

 
 [그림 2] 어플리케이션 구성입니다. 크게 User Assistant 모듈과 E-Picture Frame(전자앨범.. 표기가 맞는지 모르지만), Information Provider까지 3개의 모듈로 나뉩니다. 3개의 모듈에서 User Assistant는 앞서 설명했듯이 사용자에게 최적의 인터페이스 제공을 위한 App 모듈이고, 전자앨범은 말그대로 사진을 출력해주는 그리고 Information Provider는 메일알람이나 시계, 달력, OpenAPI를 통한 날씨 등등의 각종 정보를 출력해주는 모듈입니다.

 그리고 최하위층에 인터페이스 계층으로 외부 디바이스 또는 사이트에 통신을 하기위하여 USB와 TCT/IP를 사용합니다.

3.3 하드웨어 디바이스 구성도


[그림 3] 하드웨어 디바이스 구성도

 
[그림 3]은 하드웨어 디바이스의 구조로서 USB가 가능한 PIC32 MCU와 TFT-LCD 그리고 보조 저장매체로서 SD 카드로 구성되어 있습니다.


4. 세부 기능 및 특징

4.1 User Assistant
 User Assistant는 각 어플리케이션에 최적화된 인터페이스를 제공하기 위한 App 모듈로서, 제일 먼저 자신이 등록할 App를 선택하여 단축키를 지정하거나 키보드 및 마우스 설정을 하는 과정을 거칩니다.


[그림 4] App 등록 및 단축키 설정


 반복적으로 자신이 사용할 어플리케이션을 등록하는 과정을 거치면, 다음 부터는 프로세스 모니터링을 통하여 등록한 어플리케이션이 최상위에 떠있을 경우 즉, 사용자가 해당 어플리케이션을 사용하는 상황이 되는 경우 그에 맞는 아이콘 또는 사용자 지정한 이미지를 표현해줍니다.


[그림 5] 프로세스 모니터링을 통한 App 발견

 
그리고 해당 단축아이콘 또는 이미지와 매핑 된 기능 예를 들면, 단축키( Ctrl + A, Ctrl + Shift + C 등등)나 또는 마우스의 움직임, 클릭 등을 해당 App에서 실행되도록 해줍니다. 특히 매크로의 기능은 단축키나 단순 키보드 조작으로는 불가능한 기능을 가능하게 할 수 있습니다.

 또한 제스쳐 기능을 사용하면, 단순히 터치를 하는 수준의 동작을 뛰어넘어 확대, 축소, 스크롤 등이 가능하고 또한 3가지 모듈간 스위칭을 할 수도 있습니다.


[그림 6] 제스쳐 기능


4.2 E - Picture Frame
 말 그대로 전자액자로서 간단하게 이미지가 들어있는 폴더를 드래그하는 것 만으로 읽어올 이미지를 리스트화 하여 LCD에 출력하는 기능을 가진 모듈입니다. 최대한 간단하게 사용할 수 있도록 할 예정입니다.


 

[그림 7] E - Picture Frame 설정


4.3 Information Provider
 기타 사용자에게 필요한 정보 등을 제공해주는 App 모듈로서, 달력과 시간 그리고 새로운 메일 도착여부를 알려줍니다. 그리고 Open API 등을 사용하여 날씨나 주식, 뉴스 제목 등 필요한 정보를 얻어올 수 있습니다.


[그림 8] Information Provider


5. 기존 및 현재 시스템 비교사항


5.1 기존 LCD 키패드
(1) MCU
 - dsPIC33FJ256GP710
 - 100핀 디바이스
 - 16비트 데이터 처리
 - 속도: 80Mhz 클럭 최대 40MIPS
 - DSP코어 내장으로 음성 및 아날로그 데이터 처리 유리

(2) 인터페이스
 - UART
 - 속도가 느림, 단편적인 데이터 전송
 - 에러발생 시 복구 어려움, 소프트웨어적 처리는 가능(오버헤드 증가)

(3) 디스플레이
 - TFT-LCD & Touch Screen
 - 2.4', 400 x 240, 65K ~ 240K Color
 - 4-wire 저항막 방식
 - I2C 기반 터치 컨트롤러

(4) 어플리케이션
 # User Assistant
 - App 모니터링 및 수동 App 등록
 - 단축키 수동 설정
 - 적은 크기의 키코드 값 데이터 전송만 가능
 - LCD 디바이스에 이미지 데이터 전송 불가
 - 트레이 기능 없음

5.2 새로운 LCD 키패드 2.0
(1) MCU
 - PIC32MX460F512L
 - 100핀 디바이스
 - 32비트 데이터 처리
 - 속도:  80MHz, 1.54 DMIPS/MHz

(2) 인터페이스
 - USB 인터페이스
 - 에러 처리 및 데이터 신뢰성 보증
 - 에러 발생 시 자동 복구
 - 대용량 데이터 송수신 가능
 - USB 마우스, 키보드 등등 다양한 기능 추가 가능

(3) 디스플레이
 - TFT-LCD & Touch Screen
 - 2.8', 320 x 240, 65K ~ 240K Color
 - 4-wire 저항막 방식
 - SPI 또는 I2C기반 터치 컨트롤러

(4) 어플리케이션
# User Assistant
 - App 모니터링 및 App 등록(수동 및 자동)
 - 터치스크린 칼리브레이션
 - 단축키 수동 설정 및 자동 추출
 - 터치스크린 제스쳐 기능
 - 마우스 및 키보드 입력 녹화 매크로 기능
 - 이미지 합성 및 아이콘 합성하여 LCD로 전송
 - 트레이 기능

# 전자앨범 기능
 - 다양한 포맷의 이미지 변환

# Information Provider
 - 새 메일 도착 알림 기능
 - 세계 시간 또는 달력 등등 사용자가 원하는 정보 제공
 - Open API를 통한 날씨, 뉴스 등 정보 제공


6. 개발 환경

6.1 Application
 - OS: Windows XP
 - Language: C# .NET Framework
 - Tools: Visual Studio 2005

6.2 Device
 - OS: Windows XP & Vista
- Language: MPLAB C32 1.04(C Language)
- Tools: PICkit2, MPLAB IDE 8.20


7. 기대효과

 - USB 개념 확립 및 습득
 - 32비트급 PIC32 MCU 회로 설계  및 제어 기술 습득
 - 향후 USB 및 Pheriperal 관련 과제 연계 발판 마련 및 예정
 - Global Hooking, 웹 분야(POP3, OpenAPI) 등등 새로운 분야 학습
 - C#, WPF 프로젝트 적용 및 학습효과 증대

8. 결론 및 발표 후 소감

 제가 이해하고 있는 머릿속의 개념을 누군가에게 전달하는 일은 상당히 어려운 것 같습니다. 나름 충분한 설명을 하고자 그림도 많이 준비했었고, 필요한 자료에 대한 용어 설명도 해주었지만 정작 내가 생각하는 프로젝트의 모습과 세미나를 듣고 있는 사람들이 상상하는 프로젝트의 모습은 다른점이 많았습니다. 그리고 상대적으로 하드웨어 파트에 특별한게 없냐느니 또는 소프트웨어 부분에 특별한게 없냐느니.. 말들이 나오는데 너무 자신의 관점으로 보는 고정적인 시선으로 인해 이러한 차이는 더욱 크지 않았나 합니다. 해당 프로젝트를 무사히 시작하느냐 마느냐의 갈림길에 서 있지만 만약 시작하게 되다면 이러한 차이를 줄일 수 있도로 결과로써 보여줘야하지 않나 싶습니다.



Comment +0


자작 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년 말경에 만들어보기는 했는데
    그때 소스는 거의 그대로 사용.. 땜질한 기억밖에 없네요.


2009년을 맞이하여.. 처음 시작하는 프로젝트입니다.

 먼저 이 프로젝트는 삼성소프트멤버십 과제를 위하여 진행하는 것도 있지만 커뮤니티(네이버 카페)에 PIC32 관련 강좌를 위하여 제가 스터디 일환으로 시작하는 프로젝트로서 제가 계획하고 있는 올해의 3개 연계 프로젝트 중 첫 번째에 해당합니다.

나머지 2개의 프로젝트는 이 프로젝트가 끝나는대로 진행이 될 것이며.. 이 프로젝트는 2009년 2월부터 ~ 4월말까지 진행될 예정입니다.

1. 개요 및 개발 목적

 현재 우리는 운영체제상에서 많은 응용 프로그램을 쓰고 있습니다. 대표적으로 한글, 워드 같은 오피스 프로그램, 포토샵, 페인트 샵 같은 그래픽 프로그램, 인터넷 익스플로어, 사파리, 파이어폭스 같은 인터넷 브라우져 등등 많은 응용을 함께 사용하고 있습니다.

 그러나 이러한 프로그램을 여러개 혼용하여 사용하게 되면서, 겪는 불편함이 있습니다. 각각 프로그램의 UI가 모두 동일하지 않다는 것 입니다. 물론 메뉴 위치나 기타 아주 기본적인 UI는 운영체제의 기본적인 룰을 따르기 때문에 동일한 부분이 많습니다만 그 외의 부분은 상이한 점이 존재하기 마련입니다.

 대표적으로 단축키를 들 수 있는데요.. 같은 오피스 관련 프로그램인 한컴의 한글오피스와 마소의 오피스2007에서 한글의 새 문서는 Alt+N 이지만 워드의 새 문서는 Ctrl+N 입니다. 자세히 들여다 보면 한글은 Alt를 기반으로 워드는 Ctrl을 기반으로 단축키가 많이 배열되어 있음을 알 수 있습니다.

 이런 부분이야 솔직히 외우면 그만입니다. 하지만 이왕이면 생산(?)적인 측면에서 동일한 기능을 하나로 엮어주면 어떨까?하는 생각이구요.. 러시아에서 나온 LCD 키보드처럼은 아니지만  이왕이면 그래픽컬한 LCD를 사용하여 키보드 옆에 또는 키보드에 내장하여 키보드에서 하기 어려운 다양한 기능을 할 수 있는 보조 LCD가 하나 있으면 좋겠다는 생각을 하였습니다.



[그림 1] LCD 키패드의 개요도

 물론 이런 것은 있어도 그만 없어도 그만이라고 생각할 수도 있지만.. PC에 익숙치 못한 사람이라던가 또는 정말 다양한 프로그램을 쓰지만 마우스로 모든걸 해결하기 어려운 사람에게는 큰 도움이라도 되지 않을까합니다.

하지만 기능이 위의 기능으로만 한정되는 것은 아니기 때문에.. 기능에 따라서 호불호가 나뉠꺼라고 생각은 합니다.
그럼 자세한 기능은 나중에 보기로 하고 기본적인 구조를 살펴보겠습니다.

2. 기본적인 구조

(1) 하드웨어 구성

- Microchip PIC32MX460F512L
- TFT-LCD M280T1 320x240
- SDCARD
- 4-Wire Touch Screen


[그림 2] 하드웨어 구조

 가장 먼저 하드웨어 구성입니다. 중간에 MCU인 PIC32를 중심으로 디스플레이 및 입력을 위한 TFT-LCD와 4선 저항막 터치스크린 그리고 상태저장 및 다양한 정보를 저장 및 읽어올 수 있도록 SD카드를 사용할 예정입니다.

 그림 상으로는 USB와 TFT-LCD를 모두 사용해야 하기 때문에 실제로 회로 구성하고 제작하려고 하면 그리 간단치(?)는 않습니다. 그리고 나름 많은 연산과 처리가 요구되리라 예상도 되고 있습니다. 물론 좋은 디바이스를 쓰면 해결되는 부분이긴 하지만 고속을 요구하는 회로 제작은 당장은 어려운지라.. 그나마 쉬운(?) 응? PIC32를 선택했습니다.
 
(2) 소프트웨어 구성

- USB 드라이버 및 펌웨어
- 응용어플리케이션

소프트웨어는 펌웨어 및 드라이버 일부를 제외하고 제가 담당할 부분이 아니기 땜시롱 자세하게 설명은 않겠지만.. 기본적인 구조는 다음과 같습니다.


[그림 3] 소프트웨어 구조
 
 응용프로그램은 상시로 최상위에 떠있는 즉, 사용자가 사용하는 어플리케이션을 감지해서 사용자가 설정한 단축아이콘 이미지 및 관련 데이터를 LCD 키패드에 전송하여 정보를 출력하게 해주고 LCD에서 해당 단축아이콘을 클릭했을 경우 해당 어플리케이션의 단축아이콘 동작 또는 정해진 매크로 동작을 수행하는 것을 기본적인 기능으로 합니다.

물론 이 기능만 넣으면 심심하기 때문에.. 자세한 기능은 다음 장에서 설명하겠습니다.

3. 주요 기능

(1) 단축아이콘 기능 제공

가장 먼저 언급했던 단축아이콘 기능입니다. 다양한 단축키의 기능을 추상화해서 동일한 기능으로 사용하는 기능 외에 포토샵과 같은 툴이 뜨면 해당 단축아이콘에 맞는 이미지도 출력을 해주고 작업시 일종의 펑션 및 매크로 키로서 사용자 작업을 보조하는 역할 합니다. 그리고 이런 이미지나 기타 기능은 사용자가 임의로 모두 설정할 수 있고 해당 정보는 키패드의 SD카드에 저장하여 어느 컴퓨터든지 동일한 설정 값을 제공할 수 있도록 할 예정입니다.

(2) 전자 액자 기능

 LCD가 있으니 그냥 단축아이콘 출력만으로는 심심하니까.. 사용하지 않을 때는 간단하게 전자액자처럼 출력해주는 기능을 갖습니다. 일종의 스크린 세이버처럼 동작할 수도 있겠습니다.

(3) 정보 출력 기능

 요즘 오픈 API를 이용한 다양한 응용이 많은데.. 날씨나 주식 API 등을 이용하여 LCD에 정보를 출력해주거나 또는 메일이 도착했을 때 메일이 도착했음을 팝업창이 아닌 LCD에 간단하게 표시해주어 메일을 읽을 수 있다던가 하는 보조적인 기능을 제공할 수 있습니다.

(4) 마우스 및 키보드, 대용랑 저장장치 기능

 USB를 사용하니 데이터 통신 외에도 HID 드라이버와 터치 스크린을 이용하여 일종의 터치 패드 및 키보드 처럼 활용할 수가 있습니다. 또한 USB를 이용하여 SD카드 리더기로써 활용을 할 수 있는 장점도 있습니다.

 솔직히 위에는 일단 가능한 기능이지만 실제로 구현을 할 수 있을런지는 의문입니다. (기술상 어려움 보다는 시간상 문제..) 하지만 위의 기능을 목표로 진행할 예정이며, 정해진 시간안에 모두 수행했으면 하는 바램이 있습니다.

4. 프로젝트 통한 개인적 목적 및 목표

 이 프로젝트는 앞서 밝힌 것과 같이 올해 계획한 3개의 연계 프로젝트 중 제일 첫 번째로 개인적인 목표는 USB를 이해하고 스터디하는 목적이 큽니다. 연계 프로젝트가 모두 PC와 연동되는 프로젝트이고 빠른 통신 속도를 요구할 예정이기 때문에 USB가 강력하게 필수가 되어버렸습니다. 개인적 소망으로는 이 프로젝트가 끝날즈음 USB 관련 펌웨어 및 드라이버 관련하여 많은 지식을 얻었으면 하는 바램입니다.

5. 마무리 및 현재 진행사항

 현재 프로젝트 기간에 진입하지 않았지만.. 정해진 기간안에 기능을 모두 구현할 수 있도록 하기 위하여 PIC32를 베이스로 하여 TFT-LCD 테스트를 모두 마쳤습니다. 기존의 16비트 dsPIC보다는 월등히 빠른 속도로 그래픽 출력이 가능하지만 TFT-LCD 드라이버 IC가 불안한지 출력에 에로사항이 많았습니다. 하지만 현재 대부분 해결을 한 상태이고 터치스크린이 테스트 되는대로 드라이버를 모두 새로 업데이트하고 USB 관련 펌웨어 분석에 들어갈 예정입니다.



Comment +0


내 손으로 만드는 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 신고

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

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