AVR(AT90CAN128)공부2010. 11. 1. 13:46

출처 ㅣ http://blog.naver.com/passionvirus/80067988042


AVR 세미나 : ATmega128 TIP-1 / 락비트와 퓨즈비트 설정

 

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

 

 

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

 

체크 안 함

unprogrammed

비트 1

R 체크 함

programmed

비트 0

 

뭔가 혼돈이 오지 않는가? 그렇다 우리가 생각하던 비트 설정과는 다르게 반대로 되어있다. 잘 모르겠으면 무조건 기존 생각의 반대로 생각해라.( 1 CLEAR 이고 0 SET 이라 생각해라~ )

 

이 개념이 이해 안되면 이 보고서를 읽지 말기 바란다. 괜히 머리만 아프니까~

 

※ 일반적으로 외부 크리스탈로 16Mhz를 사용할 경우 다음 그림과 같이 “CKOPT” 비트만 체크를 하여 사용하면 된다. 그러나 어떠한 환경에서 작업할지 모르기 때문에 다음 장부터 하나씩 살펴 볼 것이다.

 

 

※ 위 관련된 내용은 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로 맞추어 사용하면 된다.

 


Posted by 초동