眼保의 삶의 자취

meho.egloos.com


A타입 클린 캠페인 위젯



AVR MCU 디버깅용 JTAG 도착! AVR

모 카페에서 이벤트에 당첨되어 온 "JTAGICE for AVR". 사진 몇 장~
근데 난 정작 테스트 키트가 없다....OTL


이렇게 구성되어 있네요. 케이블은 연장케이블인줄은 몰랐네요-_-;; JTAGICE에 연결하는 그냥 짧은건줄 알았는데... 아무튼 좋은게 좋은거!



아, 화면 옆으로 누워버렸네...



JTAGICE 뚜껑을 열고 한 장 찍었습니다. 근데 생각보다 상당히 크네요?? 약간 놀랐습니다;



10핀과 연결된 케이블을 뺄 수도 있네요. 제품 페이지에 보니까 그렇다고 나와있더군요.-_-;;



사실 어제 받았지만 바빠서 못올리고 오늘 학교에서 장착하고 테스트까지 해보고 한 번에 올립니다. 아니, 정확히는 테스트를 해보려고.....



문제가 발생했습니다. Easy Processor Kit에서 사용하는 JTAG 핀이랑 JTAGICE 핀이 호환이 안됐습니다.-_- 이것도 모르고 한참 씨름했네요... 장장 1시간 반동안 연구한 끝에 실험실에 돌아다니는 전선을 10개 주워서 저런 식으로 더럽게(ㅠㅠ) 연결했습니다. 회로도와 핀 구성도를 보면서 연결 해봤지만 어느쪽이 어떤 핀인지 몰라서 이것도 한참 헤맸네요ㅠㅠ(알고보니 10핀짜리 헤더에 화살표가 그려져 있더군요. 그게 가리키는 곳이 1번 핀입니다.)


이게 키트의 JTAG 핀 구성도 입니다. 네 개 핀만 빼고 연결하면 되겠더군요. 
근데 또 다른 문제가.....

jtag avrstudio ocd error
겨우 연결해놨더니 요렇게 뜨네요..ㅠㅠ 드라이버 문제인가 싶어 가상 COM포트 지우고 재설치 해봐도 안되더군요.
핀 설정이 잘못됐거나 JTAG enable 퓨즈비트를 설정해야된다는 등 해결책이 많은데, 집에 와서야 봤네요..-_-;
나중에 다시 시도해 봐야겠습니다.

p.s. 너무 어려워~/ㅁ/

p.s. 뉴아잉 화질 대박이네... 500만 화소 무시 못합니다. 특히 근접촬영이 대박이네요. 우리집 디카보다 낫다.-_-

Atmega128에 대한 설명 위주의 발표를 했다. AVR

며칠 전, 이제껏 배운걸 몇 가지 주제를 자유롭게 정하여 수업시간에 발표를 했는데, 생각보다 길어져서 진이 다 빠졌습니다.
보통 10~15분이면 끝나던데 전 하다보니 한 시간... 주제를 좀 나눠서 ppt를 5개로 만들었는데, 슬라이드는 몇 개 없지만 실컷 준비해놓고 까먹은게 많아서 버벅이다 보니 굉장히 오래걸렸네요.
사진을 보고 설명을 위해 글은 최소한으로 한거라, 진짜 별거 없지만 ppt자료 올려봅니다.


Atmega128 Memory 설명 AVR

Atmega128은 Program Memory와 Data Memory 두 가지로 나뉘어 집니다.
Program Memory는 128KB의 비휘발성 Flash Memory로 이루어져 있습니다.(Atmega128의 숫자 128이 Flash Memory 용량을 뜻합니다.)
Data Memory는 Internal SRAM, External SRAM, Register file, I/O Register, Extended I/O Register 모두 합한다면 64KB까지 이용 가능합니다. 하지만 External SRAM을 사용하기 위해서는 MCUCR 레지스터를 건드려야 하고 별도의 SRAM을 장착하여야 하며, Register file이나 I/O 부분은 우리가 데이터를 저장하는 일반적인 메모리가 아니므로 일반적으로 Internal SRAM size만 얘기를 합니다. 참고로 Atmega128 datasheet에서는 Internal SRAM이라고 명시하고 있습니다. 따라서 4KB를 이용 가능하지요. 그림을 보겠습니다.

그림 출처 : The AVR microcontroller and embedded systems: using Assembly and C
저자 - Muhammad Ali Mazidi, Sarmad Naimi, Sepehr Naimi

데이터시트도 좋지만 좀 더 이해하기 쉬울꺼 같아서 다른 책의 그림을 가져왔습니다.
Data Memory는 GPRs (General Purpose Registers), I/O memory, and internal data SRAM로 나뉩니다.

General Purpose Registers(GPRs) : 우리가 자주 사용하는 레지스터에 해당하는 R0~R31 부분입니다. 데이터를 우리 마음대로 저장할 수 있습니다.
0x00 - 0x1F 주소 범위의 32Bytes 용량

I/O memory : 모든 AVR 마이크로컨트롤러(이하 MCU(microcontroller unit))는 최소 64byte의 I/O memory를 가지고 있습니다. 이걸 Standard I/O memory 또는 Standard I/O Register 라고 부르지요.(다른 MCU에서는 SFRs라고 Special Function Registers로도 불립니다.) 이 SFR부분 외에도 컨트롤러마다 더 추가되는 레지스터가 존재하는데 그게 Extended I/O Memory에 해당합니다. Atmega128은 사진과 같이 DDRF, PORTF같은 부분이 이에 해당하네요.(근데 데이터시트를 살펴보면 PINF는 Extended가 아닌 SFR에 들어갑니다. Atmega103 호환모드때문에 이렇게 해놨다는데, 자세한건 생략하겠습니다.)
Standard I/O memory -> 0x20 - 0x5F 주소 범위의 64Bytes 용량
Extended I/O memory -> 0x60 - 0xFF 주소 범위의 160Bytes 용량

Internal data SRAM : 내부 메모리 입니다. Atmega128은 Extended I/O memory 영역이 존재하므로 내부 메모리는 0x0100번지부터 시작합니다. 하지만 Atmega103모드에서는 Extended I/O memory 영역이 없으므로 0x0060부터 시작하지요.(앞으로 특별한 이유가 없으면 Atmega103 호환모드는 생략합니다.) 그래서 0x10FF까지 총 4KB가 됩니다.

External data SRAM : MCUCR 레지스터의 SRE 비트를 1로 활성화 시켜주면 접근 가능한 메모리 영역입니다. 여기서 외부메모리 영역을 사용하기 위해서는 CY62256같은 SRAM을 장착하여 Atmega128에 연결시켜야 합니다. 평소에는 내부메모리인 0x10FF까지 사용하다가 메모리가 모자라다거나 다른 이유 때문에(대체로 Stack과 영역이 겹쳐서) 사용하게 되는 Data Memory 영역입니다.
0x1100 - 0xFFFF 주소 범위의 61183Bytes 용량

그래서 이 모든 영역을 사용할 시, 총 Data Memory 용량은 64KB가 됩니다.

p.s. 우와; 겨우 이거 쓰는데 세 시간 걸렸네...
p.s.2 그러고보니 program memory를 안했네..ㅠㅠ

AVR Studio 5.1 개발환경 - 2부 AVR

1부에 이어 2부에서는 AVR Studio 5.1의 옵션에 대해서 알아보겠습니다. AVR Studio 4버전과 인터페이스가 많이 달라서 내가 사용하던 옵션이 어디에 숨어 있는지 찾기 힘드실겁니다. 저도 임베디드를 시작한지 한 달도 안됐기에 아직 모르는게 99.99%이므로 질문하셔도 답을 못드릴 확률이 매우 큽니다..'-';;;

---------------------------------------------------------------------------------------------------------------------

'도구' - '옵션' 메뉴를 클릭했을때 화면입니다. 기존에 칙칙했던 4버전과는 달리 뭔가 메뉴가 많아졌습니다! 하지만 Visual Studio에서도 그랬듯이, 정작 쓸만하고 자주(?) 건드리는 옵션은 별로 없습니다.-ㅅ-

"Visual Studio에서 현재 하드웨어 가속 렌더링을 사용하고 있습니다. 시스템 기능에 따라 시각적 효과 설정이 자동으로 변경됩니다."

가운데 보면 Visual Studio라고 나오는데 이건 분명 AVR Studio 5.1입니다. 결국 이 IDE 프로그램을 만들 때 Visual Studio의 프레임워크를 복붙(Ctrl+c -> Ctrl+v)했다는 결론이 나옵니다. 거기서 추가된 기능만 있을 뿐이죠.ㅠㅠ(이래서 프레임워크는...)

이젠 플러그인도 쓸 수 있습니다!!! 하지만 현재 AVR Studio 5.1에서 쓸수 있는 플러그인은 저거랑 총 세 개 뿐입니다. ㅡ_- 지금은 AnkhSVN의 코드 관리자를 설치해놓은 상황인데, 아직 써보질 않아서 정확한 기능은 알 수 없습니다. 대충 훑어보니 보다 강력한 에디터를 제공해 주는듯 합니다.(실력은 쥐뿔도 없으면서 연장만 좋다는.....)


그나마 정말 좋은게, AVR Studio 4 에서는 Line Number가 없어서 몇 번째 줄인지 일일이 세어보거나 다른 에디터의 도움을 받아야 했지만 Visual Studio는 옵션에서 제공했었죠.ㅠㅠ '텍스트 편집기' - '모든 언어' - '일반' 메뉴에 '줄 번호'를 체크하면 우리의 아름다운(?) 코드에 각 줄마다 고유번호를 새겨 주십니다.
나머지는 찾아보시면 어떤게 있는지 아실겁니다. 대부분 Visual Studio에 있는 기능이고, 많이 쓰이지 않는 기능이라 생략하겠습니다.


자, 이제 여기부터가 중요합니다. AVR Studio 4 에 있던 옵션 기능들이 요기에 다 들어 있으니까요. '프로젝트' - '속성'을  누르시거나 Alt+F7을 눌러주세요. Build 탭은 외부 Makefile 설정, elf파일 네이밍과 타입을 줄 수 있습니다. 근데 초심자인 저로서는 어디다 쓰는건지 모르겠네요;;


가장 중요한 Toolchain 탭! AVR/GNU C Compiler 부분에는 gcc가 컴파일 할 때 사용하는 명령들의 옵션 코드들이 요약되어 있습니다. 저 부분에 대한 설명은 하위메뉴에 모두 나와있습니다.


General 메뉴에서 두 개가 기본적으로 체크되어 있는데 char 타입은 기본 값이 unsigned로 설정된다고 되어있습니다. AVR 프로그래밍 하다 보면, unsigned형이 대체로 많이 쓰입니다. 그래서 컴파일러 자체가 unsigned를 default로 잡아주고 있네요.


제가 AVR Studio 4를 쓰다가 5.1을 설치하고 가장 먼저 헤맸던게 이겁니다. 최적화 옵션을 주는건데, 초보자들은 대부분 -O0로 하여 최적화를 하지 않고 컴파일 합니다. 그래야 내가 의도했던 그대로 프로그램되어 돌아갑니다. 가끔씩 프로젝트를 새로 생성하여 프로그래밍 하다가 아주 간단한 프로그램인데도 이상하게 작동하는 경우가 많이 있습니다. 그럴 때 이 Optimization 옵션을 한 번 확인해 봅시다!!


Warnings 메뉴에서 내가 컴파일 했을 때 warning을 어떻게 처리해서 알려 줄것이냐를 정할 수 있습니다. warning을 error로 처리해서 띄워준다거나, 문법만 체크한다거나, 몽땅 무시한다거나 하는 여러 옵션이 있네요.


Linker메뉴의 General에 MAP 파일을 만들것인지 정하는 옵션이 있습니다. MAP 파일이 linking시에 만들어 지는건가 보군요;


Device탭으로 들어가보니 메뉴가 좀 가려지길래 창의 크기를 조절했습니다. 그런데 검은 영역이 나타나네요. 사람들이 AVR Studio 5를 아직 쓰지 말라는 이유가 여기서 드러납니다.(이거 하나때문에 쓰지말라는건 아닙니다.) 버그가 존재한다는 것이지요. 창 크기를 조절하면 contnets를 제대로 Refresh해주지 못합니다. 개발자가 Visual Studio 프레임워크를 개발버전을 갖다가 그냥 붙여넣어 쓴건지 이딴 식입니다.

윈도우 프로그래밍이나 GUI기반의 어떤 프로그래밍이라도 해보셨다면 아시겠지만, 창 크기 조절같은 화면 전환이 있을 시에는 일일이 창을 Refresh 해줘야 합니다.(엄청난 부하가 걸리지만 버퍼를 사용한다든지, 그에 대한 해법은 많이 나와있습니다.) 하지만 요놈은 Refresh 해주긴 하지만 가려져 있는 메뉴에 대한 출력 처리는 해주지 못하고 있습니다.(개발자가 코드를 잘못건드렸나?)

그렇게 심한 불편함은 아니니 일반적으로 코딩하실 경우에는 문제가 없습니다. 그리고 창을 닫았다가 다시 띄우면 잘 나오니까 걱정 마세요.


다시 띄웠습니다. Device 탭에서는 개발 기반의 프로세서를 지정해 줄 수 있습니다. 간단한 정보도 함께 출력됩니다. (근데 Speed는 왜 0으로 표시되는건지..... 아직 완벽하지 않군요) 프로젝트 생성시 프로세서를 지정해 주지 않았다면 여기서 선택할 수 있습니다. 당연히 AVR 프로세서만 있겠죠?
Datasheets를 누르면 실제 device datasheet가 나오진 않고, atmel 홈페이지의 해당 device 페이지로 링크됩니다. 거기서 Datasheet를 따로 받아 봐야하죠.=ㅅ=
그 아래에 지원되는 다른 툴들을 보여주는데, 그 외에도 지원되는 장비가 많이 있으니 해당 디바이스 페이지로 가서 Tools 탭을 살펴보시면 됩니다.


이상 AVR Studio 5.1 개발환경 2부를 마칩니다. 써놓고 보니 양은 많은데 건질건 몇 줄 안되네요.(이렇게 나올 줄이야...)
그 외에 또 알아낸 사실들이 생긴다면 3부를 고려해 보겠습니다.(하지만 당분간은 힘들겠군요. 아는게 없어서......ㅋ)

AVR Studio 5.1 개발환경 - 1부 AVR

학교에서 마이크로프로세서 과목을 듣게 되었습니다.
작년까진 AVR 뿐만 아니라 ARM도 touch!!했다던데 올해는 왜인지 모르겠으나 AVR만 하네요. 개인적으로 ARM 해보고팠는데...;ㅅ;
어쨌든 AVR의 세계에 발을 들여놓았으니 개발환경부터 알아봐야겠네요. 거두절미하고 AVR IDE 프로그램인 AVR Studio 5.1에 대해서 알아보겠습니다.

-----------------------------------------------------------------------------------------------------------------------

AVR Studio 4 버전에서는 툴체인(WinAVR)을 먼저 설치하고 컴파일러와 링커를 연결해야 하지만 AVR Studio 5 버전부터는 AVR GCC 툴체인이 이미 포함되어 있으므로 따로 설치할 필요가 없습니다.(AVR Studio 4.19는 AVR toolchain 3.3.0을 설치합니다.)

5버전부터는 Atmel사에서 MS Visual Studio 프레임워크를 써서 Microsoft Visual Studio 2008과 인터페이스가 유사하므로 이 툴을 사용해 봤다면 AVR Studio 5를 사용하는데 크게 어려움은 없습니다.(덕분에 옵션 메뉴는 찾기가 더 힘들기도 하죠.-ㅅ-) 참고로, AVR Studio 5.0 버전에서는 프로젝트를 생성하기 전에 AVRGCC 템플릿을 수동으로 추가 해줘야 하지만, AVR Studio 5.1버전에서는 자동으로 추가되어 있으므로 프로젝트를 바로 생성해줘도 무방합니다. 5.0을 써야하는 이유가 아니라면 웬만하면 5.1을 사용하세요.

- AVR Studio 5.1 full ver.(616MB)

- AVR Studio 5.1 small ver.(396MB)

AVR Studio는 무료로 받을 수 있는 툴이지만 다운받으려면 회원 등록을 해야 합니다.(간단하지만 귀찮죠.) 그래서 direct로 받을 수 있는 링크를 제공해 드립니다.(불법은 아니겠지?)

Atmel사 웹페이지에 따르면 Full 버전은 인터넷이 안되는 환경에 추천한다는군요. MS Visual Studio Shell and .NET 4.0이 포함되어 있답니다. 참조하세요~

설치를 하고 실행하면 위와 같은 화면이 나옵니다. C언어로 프로그래밍 하기 위해서는 첫 번째 메뉴를 선택하고, 어셈블리어로 프로그래밍 하기 위해서는 좌측의 Assembler 템플릿을 선택하면 됩니다..


다음으로, 디바이스를 선택하면 프로젝트가 생성됩니다. 저는 Atmega128을 사용하므로 우측 상단에 검색을 하면 알아서 찾아줍니다. 좋은건, DataSheet를 바로 볼 수 있다는 겁니다. 링크를 시켜놨죠. Supported tools에 있는 링크는 눌러도 묵묵부답입니다.


프로젝트를 생성하면 익숙한 main 함수가 입력되어 있습니다. while(1){}함수도 기본으로 쓰여져 있으니 편리하네요.(처음 시작했을 땐 이 무한루프가 왜 있는지 이해가 안됐으나, 몇 주 공부하다보니 알게됐습니다.-_-


간단하게, A핀에서 값을 읽어서 B포트로 값을 내보내는 프로그램 입니다.
제가 이 프로그램을 만들었던게 DIPSwitch에서 값을 읽어서 LED로 출력해주는 초 간단한 프로그램이었습니다. 하지만 임베디드 초심자에게는 그저 멍때리게 만드는 코드에 불과하지요.OㅁO..............
F7번을 누르거나 '빌드' - '솔루션 빌드'를 클릭해도 됩니다. (프로그래밍 하시는 분들은 대부분 뜨거운 열쇠(Hot Key)를 사용하시겠죠?)


컴파일 하면 뭐, 간단하죠. MS Visual Studio 환경과 다를게 없습니다. C를 5년간 해왔던 저는 Visual Studio만 봤기 때문에 전혀 위화감이 없었습니다.


F5번을 눌러 Debugging을 시작하려 하면 위와 같은 화면이 나타나서 AVR Simulator 선택화면이 나타납니다. AVR Studio 5.1에서 AVR Simulator를 내장하고 있다는 것을 알 수 있습니다.


디버깅 모드입니다. 프로세서 창에 아무것도 뜨지 않으니, while문에 Break point를 주어서 멈춰보겠습니다.


드디어 AVR Studio 4버전과 비슷한 디버깅 화면이 나타났습니다! 좌측에 Registers를 활성화 하면 굳이 레지스터 창을 따로 띄우지 않아도 간단하게 살펴볼 수 있습니다. 우측의 IO View 창에서는 더욱 상세하게 레지스터의 각 비트가 어떻게 설정되어 있는지 이전 버전보다 visual하게 보여줍니다.(눈이 즐거워요~(?))
그리고 Steb by Steb으로 코드를 실행할 때마다 바뀌는 값은 빨갛게 출력해 줍니다.
※ 값을 입력하는 코드를 실행해도 입력 전후의 값이 동일하다면 디버거는 붉게 나타내지 않습니다. 즉, updated register에만 표시를 해준다는 겁니다.
하단의 '조사식'이라든지, '메모리' 창 등은 이전 버전과 동일하므로 따로 설명안해도 아실겁니다. 단, '지역' 창은 현재 커서가 위치한 함수 내의 지역변수 값을 보여줍니다. '자동' 창은 자동으로 커서가 이동될 때마다 필요할 것 같은 변수 값을 더욱 간추려서 보여주는데..... 전 불편해서 안씁니다;
디버깅을 끝내는 Hot key는 Ctrl+Shift+F5 입니다. 5버전으로 넘어오면서 Hot key가 좀 바뀌었습니다. 헷갈릴 수도 있으니 조심하세요~


이상으로 간단하게 AVR Studio 5.1에 대해서 알아보았습니다. 이미지를 많이 첨부하다보니 정말 별로 설명한 것도 없는데 이렇게 내용이 길어지는 착시현상을 경험할 수 있네요. 2부에서는 인터페이스가 확 바뀌면서 곳곳에 숨은 AVR Studio 4의 옵션들을 알아보겠습니다.

1 2 3 4 5 6 7 8 9 10 다음