AVR(AT90CAN128)공부2010. 11. 1. 09:50

출처 : http://blog.daum.net/devil1879/14303557  에 올려진 글입니다. ^^





퓨즈비트 설정은 주의해서 해야 합니다. 특히 클럭에 관계된 부분이 잘 못 설정되면

 ATmega128이 인식이 안 될 수 있습니다. (인식이 안되어도 칩이 망가진것은 아닙니다.)

 퓨즈비트를 설정하기 전에 꼭 설정하는 방법을 한번 읽어 보시고 하셨으면 합니다.

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

 퓨즈 비트는 AVR의 기본적인 시스템 설정용으로 사용되며 모두 3바이트로 구성되어 있다.

 이 비트들은 프로그램하지 않으면 1(unprogrammed)로 설정되며, 프로그램하면 0(programmed)으로

 설정된다. 그러나 칩 지우기(chip erase) 명령을 수행하더라도 퓨즈비트는 영향을 받지 않으며

 메모리 락 비트의 LB1을 사용하여 퓨즈 비트를 변경할 수 없도록 보호(lock) 기능을 설정할 수 있다.

 따라서 퓨즈비트를 먼저 설정하고 메모리 락 비트를 나중에 설정하여야 한다.

 퓨즈비트를 설정하는 첫 번째 바이트는 확장 퓨즈 바이트(extended fuse byte)로서 표 3처럼

 1 바이트 중에서 2개의 비트만 사용된다. ATmega128은 디폴트 상태에서 ATmega103 호환 모드로

 설정되어 있다는 점에 유의해야 한다. 그리고 워치독 타이머의 설정에 대하여는 Watchdog Timer

  Control Register인 WDTCR을 참조해야 한다.

 

 

표 3. 확장 퓨즈 바이트(extended fuse byte)의 비트 구성

비트 번호

비트 이름

기 능

디폴트 값

7

-

-

1

6

-

-

1

5

-

-

1

4

-

-

1

3

-

-

1

2

-

-

1

1

M103C

ATmega103 호환 모드

0(programmed)

0

WDTON

Watchdog Timer 동작

1(unprogrammed)

   

퓨즈 비트를 설정하는 두 번째 바이트는 Fuse High Byte로서 표 4와 같다. ATmega128은

 디폴트 상태에서 JTAG과 SPI에 의한 프로그래밍이 가능한 상태에 있으며, 칩 지우기에서

 EEPROM은 보호되지 않는다. 또한, 디폴트로 부트 사이즈는 표 5에 보인 바와 같이

 0xF000~0xFFFF 영역의 4096워드가 된다.

표 4 퓨즈 상위 바이트(fuse high byte)의 비트 구성

비트 번호

비트 이름

기 능

디폴트 값

7

OCDEN

OCD 사용 가능

1(unprogrammed)

6

JTAGEN

JTAG 사용 가능

0(programmed)

5

SPIEN

SPI를 통한 직렬 프로그래밍 가능

0(programmed)

4

CKOPT

오실레이터 옵션

(시스템 클럭 참조)

1(unprogrammed)

3

EESAVE

칩 지우기 시에

EEPROM 내용 보호

1(unprogrammed)

2

BOOTSZ1

Boot Size 선택 (표 5 참조)

0(programmed)

1

BOOTSZ0

Boot Size 선택 (표 5 참조)

0(programmed)

0

BOOTRST

Reset Vector 선택

1(unprogrammed)


표 5 Boot Size 설정

BOOTSZ1

BOOTSZ0

Boot Size

응용 프로그램

섹션

부트로더 섹션

1

1

512워드

(4페이지)

0x0000~0xFDFF

0xFE00~0xFFFF

1

0

1024워드

(8페이지)

0x0000~0xFBFF

0xFC00~0xFFFF

0

1

2048워드

(16페이지)

0x0000~0xF7FF

0xF800~0xFFFF

0

0

4096워드

(32페이지)

0x0000~0xEFFF

0xF000~0xFFFF





퓨즈 비트를 설정하는 세 번째 바이트는 퓨즈 하위 바이트(fuse low byte)로서 표6과 같다.

 ATmega128은 디폴트 상태에서 BOD 기능이 사용되지 않는 상태에 있으며, 스타트업 시간은

 최대값으로 되고, 시스템 클럭은 내부 RC 오실레이터에 의하여 1MHz로 발진된다.

 

표 6 퓨즈 하위 바이트(fuse low byte)의 비트 구성

비트 번호

비트 이름

기 능

디폴트 값

7

BODLEVEL

Brown out Detector 기능 트리거 레벨

1(unprogrammed)

6

BODEN

Brown out Detector 기능

1(unprogrammed)

5

SUT1

Start-up Time 선택

(시스템 클럭 참조)

1(unprogrammed)

4

SUT0

Start-up Time 선택

(시스템 클럭 참조)

0(programmed)

3

CSSEL3

클럭 소스 선택(시스템 클럭 참조)

0(programmed)

2

CSSEL2

클럭 소스 선택(시스템 클럭 참조)

0(programmed)

1

CSSEL1

클럭 소스 선택(시스템 클럭 참조)

0(programmed)

0

CSSEL0

클럭 소스 선택(시스템 클럭 참조)

1(unprogrammed)






ATmega128에서는 그림에서와 같이 ATmega128 내부에서 사용하기 위하여 여러 가지 클럭을 발생

 시킨다. 그리고 ATmega128 내부의 각 구성 부분들은 모두 동시에 클럭을 필요로하지는 않으며,

 소비전력을 감소시키기 위하여 각 부분에 별도의 클럭을 공급하고 개별적으로 슬립 모드를 사용하여

 이들 클럭의 공급을 차단할 수 있다.

 ATmega128에서 필요한 클럭을 발생시키기 위해 외부로부터 클럭을 입력 받거나 내부에서 클럭을

 발생시킬 수도 있다. ATmega128을 동작시키는 기준 클럭은 외부의 크리스탈이나 레죠네이터를

 통하여 입력하는 방법, 외부 클럭(OSC)에 의하여 입력하는 방법, 외부의 RC 오실레이터에 의하여

 입력하는 방법 그리고 내부의 RC 오실레이터에 의하여 입력하는 방법으로 나눌 수 있다.

 

 

 퓨즈비트 설정에 의한 클럭 소스의 선택

 ATmega128에서 사용할 수 있는 클럭 소스는 퓨즈비트의 3번째 바이트(Fuse low byte)에 있는

 4개의 비트 CKSEL3~0을 사용하여 표1과 같이 지정한다. ATmega128은 생산될때 CKSEL3~0 비트들은

 디폴트로 0001로 설정되어 있어서 ATmega128을 처음 사용할때 퓨즈비트를 설정하지 않는다면

 내부 RC 오실레이터에 의하여 발생된 약 1MHz의 클럭으로 ATmega128이 동작하게 된다.

 그리고 이러한 초기 설정 상태는 사용자가 ISP기능이나 병렬 프로그래머를 사용하여 다른 값으로

 수정할 수 있다.

표 1.  클럭 소스의 선택

클럭 소스

CKSEL3~0

 외부 크리스탈/세라믹 레조네이터

1111 ~ 1010

 외부 저주파수 크리스탈

1001

 외부 RC 오실레이터

 8.0 ~12.0 MHz

1000

 3.0 ~8.0 MHz

0111

 0.9 ~3.0 MHz

0110

 0.0 ~0.9 MHz

0101

 Calibrated 내부 RC 오실레이터

 8.0 MHz

0100

 4.0 MHz

0011

 2.0 MHz

0010

 1.0 MHz

0001

 외부 클럭(OSC)

0000






. 외부 크리스탈 또는 세라믹 레죠네이터

 외부에 크리스탈 또는 세라믹 레죠네이터(resonator)를 사용하는 경우에는 XTAL1입력 단자 및 XTAL2

 출력 단자에 접속한다. 단 크리스탈을 사용하는 경우 C1과 C2는 표 1과 같이 선택하며,

 레죠네이터의 경우에는 레죠네이터 내부의 C1과 C2의 값을 선택해서 사용해야 한다.

 

외부에 크리스탈 또는 세라믹 레죠네이터를 연결하고 CKSEL3~0을 올바르게 설정하면 ATmega128에

 내장된 발진 회로에 의하여 클럭 주파수가 발생되는데, 이때 CKOPT 비트는 발진회로 증포기의

 동작 모드를 선택한다. 즉 CKOPT비트를 0을 설정하면 발진회로 증폭기를 동작시키고 이 CKOPT비트는

 잡음이 많은 시스템에서 사용하기에 적합하다. 그러나 CKOPT 비트를 1로 설정하면 발진회로의

 출력 전압이 작아지고 발진주파수에 제한을 받게 되지만 소비전력이 감소한다. 그리고 레죠네이터를

 사용할 경우에는 8MHz 보다 높은 주파수를 사용할 경우에는 CKOPT 비트를 0으로 설정하고

 사용해야 한다.

 내부 발진회로의 동작에는 3가지 모드가 있는데 이는 CKSEL3~1 비트에 의하여 표 1과 같이 선택된다. 

 CKSEL0 비트는 SUT1~0비트와 함께 표 2에 보인 바와 같이 기동 시간을 선택하는데 사용된다.

 

기동 시간(start-up time)이란 ATmega128이 파워다운 모드에서 깨어나 정지해 있던 클럭이

 안정되게 발생하여 ATmega128가 명령을 실행하기 시작할 때까지의 지연시간을 말한다.

 만약 파워 온 리셋에서 출발하는 경우라면 전원전압이 규정치에 도달한 이후에 정사적인 동작이

 개시될 때까지 추가적인 시간 지연이 발생하게 된다.

 

                              표 1. 외부 크리스탈/세라믹 레죠네이터 사용할 경우 동작 모드

 

 

 

3. 외부 RC 오실레이터

 외부 RC 클럭은 타이밍에 덜 민감한 회로나 시스템에서는 아래 그림과 같은 회로로 사용될 수 있다.

 이 때의 클럭 주파수는 대략 f=1/(RC)가 되며 C값은 적어도 22pF 이상의 값을 사용해야 한다.

 그리고 CKOPT 비트를 0으로 설정할 경우 XTAL1과 GND 사이에 내부 커패시터 36pF를 사용하게 된다.

 이 경우에는 사용된 외부 커패시터(C)를 사용하지 않는다. 

 

 RC 오실레이터는 특별한 주파수 범위에서 최적화된 4가지의 다른 모드로 동작이 가능하다.

이 동작 모드는 아래 표와 같이 퓨즈비트 중의 CKSEL3~0 값에 의하여 선택된다.

 

  RC 오실레이터를 사용할 때 기동시간은 아래 표와 같이 SUT1, SUT0 를 설정하여 결정한다.

 




4. 내부 RC 오실레이터

 내부 RC 오실레이터는 5V 섭씨 25도에서 고정된 1, 2, 4, 8MHz를 제공한다. 이 클럭은 CKSEL을

 설정함으로서 결정한다. 그리고 내부 RC 오실레이터로 설정이 되면 외부에 연결된 어떤 클럭도

 사용하지 않고 오직 내부의  RC에 의해서 클럭이 발생된다. 이 모드에서는 CKOPT 비트는

 항상 1(unprogrammed)로 설정되어 사용하지 않아야 한다. 그리고 CKSEL은 디폴트 값으로

 0001로 설정되어 내부 RC 오실레이터는 1MHz의 주파수로 동작하게 된다.

 

 

이 오실레이터 모드를 사용할 경우 기동시간은 SUT1~0로 설정하게 되고 외부핀 XTAL1, XTAL2는

 아무것도 연결하지 않고 사용해야 한다.

 

 

 

클럭에 따른 퓨즈비트 설정하는 방법에 대하여 예를 들어 설명해 보겠습니다.

 1. 클럭으로 크리스탈/세라믹 레죠네이터 16MHz를 사용하고 기동시간을 65msec로 설정

 "ATmega128 퓨즈 비트 설정(4) - 시스템 클럭(외부크리스탈, 레죠네이터)" 이 부분을 참조하면 된다.

 클럭이 16MHz 이기 때문에 CKOPT = 0, CKSEL3~1 = 111로 선택하였다.

 그리고 기동시간을 65msec 로 설정할려면 CKSEL=0, SUT1~0 = 01 로 선택하였다.

 이렇게 설정된 퓨즈비트를 ToastProg2005 에서 메뉴에서 "Command"->"Security bit .. "을 클릭하고

 설정해 보면 아래와 같다. ISP 케이블을 이용하여 ATmega128에 연결하고 Write 버튼을 클릭하면

  설정이 완료 된다.   

  

 

 

2. 외부 클럭(OSC) 16MHz를 사용하고 기동시간을 65msec로 설정

 "ATmega128 퓨즈 비트 설정(8) - 시스템 클럭(외부 클럭)" 이 부분을 참조하면 된다.

 클럭이 16MHz 이기 때문에 CKOPT = 1, CKSEL3~0 = 0000 로 선택하였다.

 그리고 기동시간을 65msec 로 설정할기위해 SUT1~0 = 10으로 선택하였다.

 이렇게 설정된 퓨즈비트를 ToastProg2005 에서 메뉴에서 "Command"->"Security bit .. "을 클릭하고

 설정해 보면 아래와 같다. ISP 케이블을 이용하여 ATmega128에 연결하고 Write 버튼을 클릭하면

  설정이 완료 된다.   

 

 



Posted by 초동