AVR이나 ARM을 이용한 제품 개발시 디버깅을 할 수 있는 방법이 있느냐 없느냐는 매우 큰 차이를 가지게 됩니다.
(전 ARM쪽은 프로젝트를 그리 많이 해보지 않았기에 아직 기초적인 단계에 머물러 있습니다.
대충 이런이런 방법으로 개발하면 되겠구나 하는 것은 알겠지만 실제 구현에 있어서는 막막합니다.)

ARM은 ARM전용 디버깅 장비인 Multi ice 나 RealView ICE를 이용하여 디버깅을 합니다.
하지만 여타 8Bit Mcu의 디버깅 툴에 비해 매우 고가에 거래가 됩니다.
실 예로 avr jtag ice 구입시 약 55만원에 구입을 하였습니다. arm jtag ice 구입시에는 근 400만원이 넘는 돈을 주고 구입을 하였습니다. 이처럼 전용 디버깅 장비를 개인이 구매하기엔 매우 큰 돈을 사용하게 됩니다. 물론 많은 기능이 지원되고 다양한 플랫폼이 지원되기는 하지만 개인이 사용하기엔 큰 부담이 될 수 밖에 없는 것 같습니다.
그래서 전 다른 방법을 사용하여 개발시 디버깅에 사용을 합니다.
여기서는 AVR을 중점적으로 디버깅 하는 방법을 기술하고자 합니다.

1. 오실로 스코프를 이용한 펌웨어 디버깅
  가장 단순하면서도 그리 많은 디버깅이 필요치 않을 경우 사용하는 방법 입니다.
mcu를 사용하다보면 남는 포트가 몇몇개 있을 것 입니다. 전 그 포트에 TP를 뽑아 오실로스코프와 연결 한 후 펌웨어 작업시 알맞은 루틴에 정확히 로직대로 입력이 되는지 혹은 정확한 타이밍에 정확한 데이터가 출력이 되는지를 포트의 High / Low 를 이용하여 확인 합니다. 별다른 하드웨어 수정 없이도 가능한 방법이기에 간단한 디버깅용으로 사용하기엔 알맞춤입니다.

2. JTAG를 이용한 펌웨어 디버깅
 가장 이상적인 방법입니다만 문제는 돈이 든다는 것 입니다. 중국산의 저가 장비나 국내 업체의 저가 JTAG가 있긴 합니다. 하지만 atmel 사의 디버깅 장비에 비해 많은 chip을 지원하지는 않습니다.
국내 연구소 및 교육시설의 경우 atmel사의 디버깅 툴을 추천 하며 개인의 경우 많이 사용하는 mcu를 지원하는 저가 툴을 사용하는 것을 추천 합니다.
 디버깅 장비를 이용시 각 각 펌웨어의 포인트에 브레이크 포인트를 잡아 어느 변수에 무슨 값이 들어가는지 레지스터가 제대로 세팅 되었는지 확인이 가능합니다. 하지만 이러한 jtag를 이용한 디버깅에도 한가지 큰 단점이 있습니다. atmega 시리즈의 디버깅 툴 이용 방법은 두가지를 제공합니다. 적은 핀 수를 가진 칩을 위한 디버그 와이어 모드와 jtag 모드 입니다. 이 두가지 방법 모두 퓨즈 비트를 세팅시 프린터포트를 이용한 하이볼테이지 프로그래밍을 이용하지 않는 이상 다시는 isp를 이용하여 펌웨어를 다운로드 시키지 못합니다.

3.  UART / RS232를 이용한 펌웨어 디버깅
  제가 가장 추천하는 방법 중의 하나 입니다. 전 제품의 하드웨어 설계시 남는 uart 포트를 이용하여 max232 칩의 pad를 하나 만들어 둡니다. 제품의 샘플 단계에서는 232칩을 이용하여 pc와 통신하며 rprintf 기능을 이용하여 디버깅에 사용합니다. 제가 보고자 싶은 함수의 리턴 값이나 변수값을 uart 포트를 이용하여 pc와 통신하여 확인하며 사용합니다. 사용법도 간단하며 많은 돈을 들이지 않고도 쉽게 디버깅을 할 수 있어 매우 유용합니다. 제품 양산시에는 232 관련 부분은 pad만 남겨두고 부품은 실장하지 않아 제품의 mc에도 영향이 매우 미비합니다. 다음번 글은 uart / 232를 이용하여 디버깅을 하는법을 써보고자 합니다.^^

'AVR > S/W 이야기' 카테고리의 다른 글

Intel Hex 파일의 이해  (0) 2009.08.27
megaboot 입니다.  (0) 2009.08.23
표준 CRC16 TABLE 입니다.  (2) 2009.08.23
AVR ATmega128 Rsgister 정리 입니다.  (0) 2009.08.23
AVR Calculate  (0) 2009.08.09

+ Recent posts