펌웨어(Firmware) 개발 순서
저자가 속해 있는 개발실에서는 보통 다음과 같은 흐름을 가지고 제품이 완성되고 판매된다. 순서가 서로 바뀌거나 동시에 같이 할 수는 있지만 생략하고 건너뚜지는 못하고 최소한 단어가 한 번쯤은 들어가야 할 것이다.
1. 제품 특성에 대한 성능, 스펙, 블록도 작성
2. 회로도 그리기 (만능 기판에서 실험 병행)
3. 부품 구입
4. PCB Artwork
5. PCB Sample 제작, Board 제작(Target Board)
6. 흐름도와 어드레스 맵 디자인, 동작 스펙 작성
7. 프로그램 작성
8. Compile, Porting(프로그램 이식)
9. Debug 및 운용 시험
10. 외관 디자인, 기구 설계, 기구 제작
11. 시험 양산 및 신뢰성 검사
12. 판매 가격, 매뉴얼 제작, 광고
개발할 때에 여러 난항에 부딪치는 경우가 많고 예상치도 않았던 어려움으로 지연되거나 목적을 이루지 못하기도 한다. 또 부품이 단종되기도 하고 PCB에 부품을 삽입한 후 납땜할 때 홀이 맞지 않아 부득이 하게 리드선을 구부리는 경우 등, 어찌 보면 경미한 어려움 등이 발생하기도 한다. 또한 소프트웨어와 하드웨어를 디버그할 때 기술적으로 좀처럼 해결이 안 되는 경우도 있으며 해결책은 가까이 있지만 원인을 규명하지 못함으로해서 고심하기도 한다. 그러나 애석하게도 여러 개발 환경 모두에 대해 이 책에서는 해결을 주지 못하고 다만 저자가 표현할 수 있는 관련된 엔지니어 기술과 하드웨어와 소프트웨어를 한데 묶어 설명하도록 하겠다.
프로젝트 진행 과정(펌웨어 개발 순서에 준함)
1. 제품의 성능과 기능을 정리한다.
- 표현하고자 하는 하드웨어의 해야 할 일에 대해 정리하고 블록도, 스펙을 작성한다. 하드웨어의 부품 구성 가격의 상한, 처리 능력, 빠르기, 메모리에 대해 결정하고 설계할 준비를 한다.
2. 회로도를 그린다.
- 의심나는 회로는 브레드 보드(bread board) 또는 만능 기판에서 실험을 통해 검증한 후 설계해야 하드웨어 디버그(debug) 시간을 줄일 수 있다. 회로는 종에 손으로 그릴 수도 있지만 PC에서 작업할 수 있는 CAD 프로그램이 많으므로 이를 이용하자. 이 때 칩의 모양, 하드웨어 구성 단가, 부품 스펙 등을 집고 넘어 가야 한다.
3. 부품을 구입한다.
- PCB를 디자인(artwork)하기 전에 부품을 구입하므로 스펙 변경이나 전체 모양 등을 사전에 알 수 있다. 이 때 준비되는 부품 종류에 대해 데이터 시트(data sheet)를 한데 모은 파일철을 마련하라고 권하고 싶다. 처음 접하는 부품일수록 신중해야 하고 부품의 전기적 스펙, 가격, 원활한 공급, 해당 부품의 애플리케이션(application)도 눈 여겨 봐두거나 데이터를 수집한다.
4. PCB를 디자인한다
- 동판 위에 전기가 가는 길과 납이 입혀지는 길을 만드는 작업인 artwork를 할 때는 CAD를 이용하여 설계한다.(옛날에는 폭이 작은 검정 테이프를 이용하여 만들었다.) 이 작업은 초보자가 처음하기에는 생각보다 어려워서 전문가에게 외주 처리하기도 하는데 비용은 보통 PCB에 있는 구멍(hole)의 수 또는 납이 묻히는 부분의 개수에 책정된 금액을 곱하여 전체 가격을 산정한다.
5. PCB 샘플을 제작하고 시제품(prototype board)을 만든다.
- PCB는 자체적으로 제작하기가 불가능하기 때문에 전량 외주 처리를 하는데, PCB 크기가 클수록, 다층 기판일수록, 재질이 고가일수록 비싸게 된다. 간단한 하드웨어이면 PCB 디자인 전에 만능 기판에 납땜하거나 랩핑 툴(lapping tool)을 사용하여 구성한 후 동일한 조건으로 동작해 보는 것도 최종적으로 디버그(debug) 시간과 투자 비용을 줄일 수 있다. 그러나 DS5002FP의 IC 외관이 QFP 80핀이므로 시제품 제작에서는 PCB에 납땜한 후 다시 제거해도 원형을 보존하기가 거의 불가능하여 다시 설치할 수 없으므로 Sample 제품에서는 조각 PCB를 이용하여 DIP 형식으로 바꾸어 변경이 용이하도록 해야 한다. 그림 2.3에 제공된 툴은 PCB를 용산에서 구입하여 DS5002FP 초기에 납땜 랩핑용으로 사용했던 것이다.
6. 흐름도(flowchart)와 어드레스 맵을 디자인하고 동작 스펙을 작성한다.
- 이 부분을 잘 정리하면 디버그 시간을 대폭 줄일 수 있다. 충분히 심사 숙고하고 초기에 계획을 잘 세우는 것이 경험적으로 에너지 절약, 시간 절약하는 결과에 도달한다.
7. 프로그램을 만든다.
- 프로그램의 양이 많을 것 같고, 시간이 오래 걸린다고 판단되면 여러 사람이 작성하도록 하는데, 이 때 변수 이름, 함수 이름, 리턴 변수 등의 정의를 한 후 프로그램에 들어가는 것이 좋다. 예를 들어, 변수 정의를 할 때 "unsigned char Test_Ultra_Send;"처럼 중요한 단어 순서를 먼저 쓰고 시작은 대문자로 한다든지, 함수에서 사용하는 "{}"의 시작 위치와 끝의 탭(tap) 위치를 미리 정하든지 하는 사항을 미리 정해둔다.
8. 컴파일과 이식을 한다.
- 프로그램을 짜는 일은 사실 명석한 두뇌보다는 논리적이고 순간 순간적으로 외우는 기억력을 더 필요로 하는 것 같다. 연구소나 개발 부서에서 꼭 필요한 것 세 가지를 언급한다면 시간, 정열, 돈일 것이다. 합해서 100%가 되어야 했을 때 돈이 적다면 시간하고 정열을 40%씩, 돈을 20% 투자하면 된다. 이 중에서 젊은 정열 한 가지만이라도 충만한다면 나머지가 약해도 못할 것이 없다는 저자의 생각이다. 프로그램을 짜고 디버깅 후 컴파일과 포팅(기계어 이식)을 하면 할수록 익숙해지는 것이 있다. 바로 컴파일러 편집 환경이다. 그래서 별도의 지면으로 편집 환경에 대해서는 언급하지 않았고 프로그램을 구입하면 매뉴얼에 자세히 언급되어 있다.
9. 하드웨어 디버그를 끝내고 PCB 수정 타깃(target) 보드를 다시 제작한다.
- 기구가 필요하면 기구도 같이 검토해야 한다. 소프트웨어 디버그는 계속 해나가지만 주로 하드웨어 관련된 프로그램은 이곳에서 마쳐야 한다. 회사는 디버그를 지속적으로 할 수 있는 시간을 넉넉히 주지 않을 경우가 많으므로 후에 A/S가 발생하지 않도록 꼼꼼한 배려를 아낌없이 해주어야 한다. 그럼 2.4와 그림 2.5는 저자가 Home Guard 원고를 쓰기 위해 만든 일차 Prototype 보드의 앞면과 뒷면이다. 독자들도 개발에 관계되어 프로젝트를 진행한다면 이런 과정없이 개발 완료라고 말하지 못할 것이다.
10. 외관 디자인, 기구 제작을 마무리한다.
- 원래 외관과 기구 항목은 PCB artwork를 하기 전후로 보통 회로와 동일한 시점에서 출발한다. 영업에서는 판매 마케팅 전략을 세우고 엔지니어는 디자인이나 외관 성능에 대해 종합 평가를 받는다. 평가를 두려워하지 말고 정면으로 부딛치라고 권하고 싶다. 비평이 없으면 발전이 없다. 업체에서는 빠른 제품 설계를 위해 외관 디자인을 하드웨어 설계와 병행해서 한다.
11. 대량 생산을 위한 시험 양산을 한다.
- 안전 규격, 전자파 시험을 받아야 한다면 양산 항목 전에 서둘러야 한다. 시험 제품이 나오면 필드 검사(filed test), 연속 동작 시험(aging test). 노이즈 저항력 검사, 낙뢰 검사 등을 한다. 검사와 평가를 게을리하면 A/S와 회사 이미지에 많은 금전적 손실이 있을 것이다.
12. 판매를 한다.
- 엔지니어는 영업으로 넘기기 전에 동작, A/S, 교육매뉴얼 등을 만들어야 하고 발 완성 문서(dic)를 정리한다. 시간이 지나다 보면 하나도 생각이 나지 않으므로 잘 정리해둔다. 특히 프로그램의 주석문을 자세히 달아
'TEMP > 내용 정리중인 글들..' 카테고리의 다른 글
2. 20161031-라즈베리파이 사이트에서 나온 정보_Local 방식 정보와 SD카드에 이미지 플래싱만 보면 될 것 같다. (0) | 2016.10.31 |
---|---|
1. 20161031-★우분투에서 라즈베리파이 커널 빌드하기, 김과장님과의 대화_CrossCompile 방식 (0) | 2016.10.31 |
20161027-납땜기초_납땜시 필요 장비의 소개 (0) | 2016.10.27 |
20160412 (화) 출장 보고서 작성 방법, LVDS 란, Subnet 이란, 소프트웨어 공학문서 작성, (0) | 2016.04.12 |
[Qt] (0) | 2016.03.16 |