http://digitalab.paichai.ac.kr/?document_srl=%241
광운대학교 표윤석님의 자료입니다.
원본글 : http://cafe.naver.com/robit/42



우리는 아래 그림과 같은 설정 화면을 많이 봤을 것이다. 하지만 나도 후배들에게 그랬지만 선배들은 하나같이 모두 "Clear로 설정하고 쓰면 돼~ " 라고 말했을 것이다. 맞는 말이다. 우리가 어느 정도 ATmega128을 사용하냐에 틀리겠지만 90% 맞다. 허나 이 내용을 모르고 지나가면 나중에 벽에 부딪히는 순간이 다가오기에 오늘 알고 넘어가 보자!



070426_b1.jpg

위 화면이 ponyprog2000 화면인데 여기서 Memory Lock Bit & Fuse Bit 설정을 해주게 된다. 주의할 점은 해당 설정 박스를 체크해주면 비트 “0” 값을, 체크해주지 않으면 비트 “1” 값을 나타냄을 반드시 유의해야 한다. 왜냐하면 잘못 설정된 값으로 인하여 프로그램을 다운로드 못하는 상황과 같은 돌이킬 수 없는 상태를 만들어 낼 수도 있기 때문이다.

☐ 체크 안 함unprogrammed비트 1
R 체크 함programmed비트 0

뭔가 혼돈이 오지 않는가? 그렇다 우리가 생각하던 비트 설정과는 다르게 반대로 되어있다. 잘 모르겠으면 무조건 기존 생각의 반대로 생각해라.( 1은 CLEAR 이고 0은 SET 이라 생각해라~ )
이 개념이 이해 안되면 이 보고서를 읽지 말기 바란다. 괜히 머리만 아프니까~
※ 일반적으로 외부 크리스탈로 16Mhz를 사용할 경우 다음 그림과 같이 “CKOPT” 비트만 체크를 하여 사용하면 된다. 그러나 어떠한 환경에서 작업할지 모르기 때문에 다음 장부터 하나씩 살펴 볼 것이다.
070426_b2.jpg


※ 위 관련된 내용은 ATmega128 Datasheet의 p.289~292에 전부 서술되어 있다. 문제는 간단히 나오고 정작 내용은 중간에 띄엄띄엄 되어 있다는 것이다. 그래서 모두 모아봤다. 나의 Datasheet 버전은 06년 10월 버전이다.

① Memory Lock Bit (Datasheet : p.254, 278~279)

Bit
7
6
5
4
3
2
1
0
-
-
BLB12
BLB11
BLB02
BLB01
LB2
LB1
Initial
1
1
1
1
1
1
1
1

② Extended Fuse Byte (Datasheet : p.4, 5, 279)

Bit
7
6
5
4
3
2
1
0
-
-
-
-
-
-
M103C
WDTON
Initial
1
1
1
1
1
1
0
1

③ Fuse High Byte (Datasheet : p. 38, 48, 253~254, 287, 295, 309, 345)

Bit
7
6
5
4
3
2
1
0
OCDEN
JTAGEN
SPIEN
CKOPT
EESAVE
BOOTSZ1
BOOTSZ0
BOOTRST
Initial
1
0
0
1
1
0
0
1

④ Fuse Low Byte (Datasheet : p.38, 39, 47, 50, 52)

Bit
7
6
5
4
3
2
1
0
BODLEVEL
BODEN
SUT1
SUT0
CKSEL3
CKSEL2
CKSEL1
CKSEL0
Initial
1
1
1
0
0
0
0
1

① Memory Lock Bit

Bit
7
6
5
4
3
2
1
0
-
-
BLB12
BLB11
BLB02
BLB01
LB2
LB1
Initial
1
1
1
1
1
1
1
1
▶ Lock Bit
▪ 외부에서 메모리를 프로그램 하는 것을 보호하는 설정
LB2
LB1
설명
1
1
메모리 락 기능을 설정하지 않는다.
1
0
메모리(FLASH, EEPROM)에 프로그래밍 하는 것(병렬프로그래밍/SPI/JTAG/퓨즈설정)을 금지한다.
0
0
메모리(FLASH, EEPROM)에 프로그래밍 하는 것(병렬프로그래밍/SPI/JTAG/퓨즈설정)을 금지한다. Verify 금지
▶ Boot Lock Bit 0
▪ 실행프로그램에서 응용프로그램 섹션을 액세스하는 것을 보호하는 설정
BLB02
BLB01
설명
1
1
LPM / ELPM / SPM 모두 허용,
1
0
SPM 명령어 사용 금지
0
1
LPM / ELPM 명령어 사용 금지
0
0
SPM 명령어 사용 금지
▶ Boot Lock Bit 1
▪ 실행프로그램에서 부트로더 섹션을 액세스하는 것을 보호하는 설정
BLB12
BLB11
설명
1
1
LPM / ELPM / SPM 모두 허용,
1
0
SPM 명령어 사용 금지
0
1
LPM / ELPM 명령어 사용 금지
0
0
SPM 명령어 사용 금지

② Extended Fuse Byte

Bit
7
6
5
4
3
2
1
0
-
-
-
-
-
-
M103C
WDTON
Initial
1
1
1
1
1
1
0
1
▶ WDTON
▪ WDTON = 0 : Watchdog Timer를 동작하게 한다.
▶ M103C
▪ M103C = 0 : ATmega103 호환모드로 동작하게 한다.

③ Fuse High Byte

Bit
7
6
5
4
3
2
1
0
OCDEN
JTAGEN
SPIEN
CKOPT
EESAVE
BOOTSZ1
BOOTSZ0
BOOTRST
Initial
1
0
0
1
1
0
0
1
▶ OCDEN
▪ OCDEN = 0 : On Chip Debug Enable (AVR ASM 중 break 명령어 사용가능)
▶ JTAGEN
▪ JTAGEN = 0 : JTAG Enable (JTAG 장비로 디버깅 사용가능)
▶ SPIEN
▪ SPIEN = 0 : SPI Enable (SPI 방법으로 프로그램 다운로드 가능 / ISP장비를 의미한다.)
(※ ponyprog2000 에서는 이 비트가 설정하지 못하도록 되어 있다. 그 이유는 혹시 사용자중 ATmega128 의 '메모리 락 비트와 퓨즈 비트' 설정을 잘못하여 Lock Bit 비트를 설정과 동시에 이를 0으로 설정하면 다시는 프로그램을 writing 할 수 없기 때문이다. 이때에 흔히 크리스탈 대신 오실레이터로 인공호흡을 시켜 해주기도 한다.)
▶ CKOPT
▪ CKOPT = 0 : 발진회로 증폭기가 동작하도록 설정한다.
(※ 16Mhz 크리스탈 사용시 필수 사항)
▶ EESAVE
▪ EESAVE = 0 : Erase 할 때 EEPROM 내용 보호
▶ BOOTSZ : 부트 사이즈 설정
BOOTSZ1
BOOTSZ0
부트 사이즈
응용 프로그램 섹션
부트로더 섹션
1
1
512 WORD
0x0000 ~ 0xFDFF
0xFE00 ~ 0xFFFF
1
0
1024 WORD
0x0000 ~ 0xFBFF
0xFC00 ~ 0xFFFF
0
1
2048 WORD
0x0000 ~ 0XF7FF
0xF800 ~ 0xFFFF
0
0
4096 WORD
0x0000 ~ 0xEFFF
0xF000 ~ 0xFFFF
▶ BOOTRST : RESET Vector
▪ BOOTRST = 0 : Reset 시 0x0000 번지부터 프로그램을 실행한다.
▪ BOOTRST = 1 : Reset 시 부트로더 번지부터 프로그램을 실행한다.

④ Fuse Low Byte

Bit
7
6
5
4
3
2
1
0
BODLEVEL
BODEN
SUT1
SUT0
CKSEL3
CKSEL2
CKSEL1
CKSEL0
Initial
1
1
1
0
0
0
0
1
▶ BODLEVEL
▪ BODLEVEL = 0 : Brown Out Detector 의 level을 4.0V 로 설정한다.
▪ BODLEVEL = 1 : Brown Out Detector 의 level을 2.7V 로 설정한다.
▶ BODEN
▪ BODEN = 0 : Brown Out Detector Enable (BOD 기능을 활성화 시킨다.)
▶ CKSEL0 / SUT1 / SUT0 : Start-Up Time 설정
CKSEL0
SUT1
SUT0
Start-Up Time
리셋의 경우 추가 지연시간
사용이 권장되는 응용분야
0
0
0
258 CLK
4.1 ms
세라믹 레조네이터 (Fast rising power)
0
0
1
258 CLK
65 ms
세라믹 레조네이터 (Slowly rising power)
0
1
0
1024 CLK
-
세라믹 레조네이터 (BOD 사용)
0
1
1
1024 CLK
4.1 ms
세라믹 레조네이터 (Fast rising power)
1
0
0
16384 CLK
65 ms
세라믹 레조네이터 (Slowly rising power)
1
0
1
16384 CLK
-
크리스탈 오실레이터(BOD 사용)
1
1
0
16384 CLK
4.1 ms
크리스탈 오실레이터(Fast fising power)
1
1
1
16384 CLK
65 ms
크리스탈 오실레이터(Slowly rising power)
※ Start-Up Time : CPU가 파워다운 모드에서 클럭이 재발생 되어 명령을 수행할 수 있는 상황까지의 지연시간
▶ CKOPT / CKSEL3 / CKSEL2 / CKSEL1 : 자신의 AVR보드의 클럭의 사용 종류를 결정한다.
▪ AVR에서는 외부크리스탈 / 외부 세라믹 레조네이터 / 외부 저주파크리스탈 / 외부 RC 오실레이터 / 내부 RC 오실레이터 / 외부 클럭을 자신의 클럭으로 이용할 수 있지만 우리는 일반적인 외부크리스탈 설정법을 알아보자.
▪ 외부 크리스탈을 사용할 때의 동작 모드
CKOPT
CKSEL3 ~ 1
주파수 범위
크리스탈 사용할 때 권장 캐패시터 ( C1, C2 )
1
101
0.4 ~ 0.9 MHZ
-
1
110
0.9 ~ 3.0 MHZ
12pF ~ 22pF
1
111
3.0 ~ 8.0 MHZ
12pF ~ 22pF
0
101, 110, 111
1.0 ~ 16.0 MHZ
12pF ~ 22pF
※ 우리는 일반적으로 ATmega128에서는 16MHz 를 사용하니 CKOPT = 0 , CKSEL3 ~ 1 = 111로 맞추어 사용하면 된다.