AVR의 퓨즈비트란? 퓨즈비트 옵션 및 설정법 정리 - AVR 기초

2013.03.31 10:36




현재 군 복무중인 상태입니다.

퓨즈비트란?


퓨즈비트란 특정 기능을 하는회로에 전원을 공급하는 라인을 끊거나, 연결(퓨징)해서 클럭을 조정하거나, 클럭분주, 부가기능 일정 전압이하로 떨어지면 리셋되도록하는 것, ISP다운로더의 SPI 통신 기능 등을 설정 할 수 있는 컴퓨터에 비유하자면 바이오스 같은 것입니다.

설정을 잘못하게 되면 AVR이 동작하지 않거나, 고장 날 수 있으므로 꼭 자세히 알아보고 설정해야 하고 혹시 고장이 발생했다면 AVR 인공호흡 (강제로 클럭을 입력)시키는 방법을 사용해야 합니다.


퓨즈비트별 옵션


퓨즈비트 설정시에 굉장히 헛갈리는 부분이 있는데요. 그것은 바로

정논리로 퓨즈비트가 프로그래밍 된 상태가 비트1 안된 상태가 비트0 이 아니라...반대입니다.

퓨즈비트 프로그래밍에서프로그래밍 된 상태가 비트0 이고 안된 상태가 비트1 입니다.

헛갈리셔서 잘못 체크하면 AVR을 못쓸 수도 있으니 크게 주의하셔야 합니다.

그럼 실제 퓨즈비트 설정옵션을 볼 텐데요. 

AVR에 퓨즈비트 영역은 약 4가지 High Fuse Byte, Low Fuse Byte, Extanded Fuse Byte, Lock Fuse Byte가 있습니다.

본문의 퓨즈비트들은 Attiny2313 기준이고, 시리즈 별로 이름이나, 기능에 따라 다를수 있습니다.


 Low Fuse Byte


Bit

L_Fuse

CKDIV8 

CKOUT 

SUT1 

SUT0 

CKSEL3 

CKSEL2 

CKSEL1 

CKSEL0 


- CKDIV8 : 입력된 클럭을 내부에서 8분주 후에 이용합니다.

- CKOUT : 클럭을 AVR핀중 CKOUT기능이 있는 핀으로 출력합니다.

- SUT1, 0 : 각각 1, 0은 두 비트의 설정에 따라 변경되고, 옵션은 MCU가 동작하지 않다, 클럭입력후 명령을 수행할 수 있는 상황까지의 지연시간을 결정합니다.

- CKSEL 3, 2, 1, 0 : 각각 3, 2, 1, 0은 네 비트의 설정에 따라 변경되고, 옵션은 어떤 클럭을 동작 메인클럭으로 사용 할것인지 결정지어 줍니다. (설정 주의)


 클럭 선택 옵션

 CKSEL 3~0

 외부클럭으로 설정

 0000

 내부 RC 발진자 4Mhz 사용

 0010

 내부 RC 발진자 8Mhz 사용

 0100

 워치독 발진자 128Khz 사용 (주의 STK500으로 프로그래밍 안될 가능성)

 0110

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

 1000 ~ 1111

 예약 비트

 0001/0011/0101/0111


외부크리스탈을 사용할 경우에는 1000 ~ 1111까지 크리스탈 주파수에 따라 값이 결정되는데요. CKSEL 3, 2, 1은 주파수를 설정하고 CKSEL 0은 주파수 값과 상호관계에 있는 Start up time을 결정하게 됩니다.

 CKSEL 3~1

 주파수 범위 (Mhz)

 100

 0.4~0.9

 101

 0.9~3.0

 110

 3.0~8.0

 111

 8.0~


Start Up Time은 클럭에 따라서 결정되는 값이 달라집니다. 크리스탈의 경우에는 CKSEL 0번 비트와 상호관계로 시간이 결정되고, 외부클럭이나, RC 클럭에 따라서도 시간이 달라집니다.


- 크리스탈 사용시 Start Up Time -


CKSEL0

SUT 1, 0

파워다운 및 저장시 시동시간 

리셋시 추가 지연시간 

추천 용도

0

00

258 CK

14CK + 4.1 ms

세라믹 레조네이터,

빠른 상승에지 파워

0

01

258 CK

14CK + 65 ms

세라믹 레조네이터,

느린 상승에지 파워

0

10

1K CK

14CK

세라믹 레조네이터,

BOD 설정

0

11

1K CK

14CK + 4.1 ms

세라믹 레조네이터,

빠른 상승에지 파워 

1

00

1K CK

14CK + 65 ms

세라믹 레조네이터,

느린 상승에지 파워

1

01

16K CK

14CK

크리스탈 오실레이터,

BOD 설정 

1

10

16K CK

14CK + 4.1 ms

크리스탈 오실레이터,

빠른 상승에지 파워

1

11 

16K CK

14CK + 65 ms

크리스탈 오실레이터,

느린 상승에지 파워


- 외부클럭, RC클럭, 내부 워치독 128Khz 클럭 사용시 Start Up Time -


SUT 1, 0

파워다운 및 저장시 시동시간

리셋시 추가 지연시간

추천 용도

00

6 CK

14CK

BOD 사용 

01

6 CK

14CK + 4 ms

빠른 상승에지 파워 

10

6 CK

14CK + 64 ms

느린 상승에지 파워

11

예약 비트



 High Fuse Byte


Bit

H_Fuse

DWEN 

EESAVE

SPIEN

WDTON

BODLEVEL2

BODLEVEL1 

BODLEVEL0 

RSTDISBL


- DWEN : JTAG Debug Wire 기능 사용 여부 설정 (설정 주의)

- EESAVE : 칩 Erase시에 EEPROM에 저장된 내용을 보호합니다.

- SPIEN : SPI통신을 설정, ISP로 프로그래밍을 허용합니다. (디폴트 0, 변경불가능)

- WDTON : 워치독 타이머를 항상 ON합니다.

- BODLEVEL 2, 1, 0 : 아직 정확히 사용해 보지는 않았습니다만. 저전압 검출기능으로 설정된 전압 아래이면 내부리셋이 일어나는 퓨즈비트 입니다.


BODLEVEL 2, 1, 0 

최소 Vbot

평균 Vbot

최대 Vbot

단위

111

BOD 기능 사용하지 않음

110

 

1.8

 

V (볼트)

101

 

2.7

 

100

 

4.3

 


- RSTDISBL : AVR의 리셋을 금지시킵니다, ISP모드시 리셋을 해야 하는데 해제할 경우 프로그램 다운로드가 되지 않을 수 있습니다. (설정 주의)


 Extanded Fuse Byte


Bit

E_Fuse

N/A 

N/A

N/A

N/A

N/A

N/A 

N/A 

SELFPRGEN


- SELFPRGEN : 사용해보지는 않았지만, AVR시리즈 중에 TINY2313의 경우에는 부트섹터 영역이 존재하지 않아서 RS232등으로 프로그램 다운로드가 불가능 한데 그것을 가능하게 해주는 퓨즈비트 입니다.


 Lock Fuse Byte


Bit

E_Fuse

N/A 

N/A

N/A

N/A

N/A

N/A 

LB2

LB1


- LB2, 1 : 내부에 프로그래밍된 프로그램을 보호하기 위한 락 보호 퓨즈비트 입니다.


메모리 락 비트

보호 종류

LB Mode

LB2

LB1

 

1

1

1

메모리를 보호하지 않습니다.

2

0

플래시또는 퓨즈비트, EEPROM을 병렬모드나 SPI/JTAG 직렬모드로 프로그래밍하는 것을 금지시킵니다.

3

0

0

플래시또는 퓨즈비트, EEPROM을 병렬모드나 SPI/JTAG 직렬모드로 더 이상 프로그래밍하거나 프로그래밍 한것을 확인 하는 것도 금지시킵니다.



퓨즈비트 설정법



 CodeVisionAVR 에서 퓨즈비트 설정


CodeVisionAVR의 경우 프로그래머 창에서 위에 표에 맞게 필요한 부분에 퓨즈비트를 체크 Fuse Bit를 프로그램해주시면 됩니다.

예제로 내부RC 발진자 8Mhz를 설정해봤는데 이 값은 CKSEL3부터 CKSEL0 순으로  0100입니다.

따라서 0이 되어야 하는 부분인 CKSEL3, CKSEL1, CKSEL0을 체크하고 프로그래밍 해주시면 AVR은 내부 RC클럭을 메인 클럭으로 사용 하게 됩니다.





 AVR Studio 4 에서 퓨즈비트 설정


AVR Studio 에서의 퓨즈비트 설정은 좀더 간단한데요. 먼저 Main에서 사용하는 AVR 장치를 먼저 선택해줍니다. Read Signature를 누른후에 정상적으로 인식했다면..



상단에 Fuses를 눌러 퓨즈비트 설정창으로 넘어갈텐데요.

CodeVisionAVR에 비해 쉬운점은 클럭 옵션의 경우 SUT_CKSEL 에서 그냥 원하는 옵션을 눌러 선택해주시면 자동으로 해당 비트가 0또는 1로 설정되게 되고 Program만 눌러주시면 정상적으로 퓨즈비트가 설정되게 됩니다.



이외에도 AVR에 퓨즈비트 설정과 락비트 설정, 프로그램을 넣어주는 프로그램은 PonyProg, ToastProg, IAR컴파일러 등에 포함되어있는 것 등 다양하게 많으므로 본인이 사용하시기에 편한 것으로 골라 사용하시면 됩니다.^ 




BinGoon AVR/AVR 기초, info , , , , , ,

  1. Blog Icon
    Mr.도리

    오랜만에 블러그 글이네요^^
    시간을 두고 봐야겠어요 ㅎ ~

  2. 안녕하세요.^ Mr.도리님 ㅎㅎ
    너무 오랜만에 글을 썼나요 ㅎ, 주말마다 쓰려고 노력중이에요.
    빨리 LightDrive나 등등 소스코드도 공개해야 되는데.. 잘안되네요.^
    새로운 작품을 시간나는대로 만들어서 곧 찾아뵙겠습니다. ㅎㅎ

  3. Blog Icon
    halashow

    잘 지냈는지요
    atmega8를 사용할려고 합니다. 통상 크리스탈을 8MHz 사용하지만 지금 가지고 있는것이 16MHz 만 있습니다.
    퓨즈비츠 설정때 프로그래밍 모드 앤 타겟 셋팅때 최대4MHz를 세팅해야지만 2MHz를 선택해도 상관이 없는지요

  4. 안녕하세요.^^
    먼저 16Mhz의 크리스탈을 사용했을 때 ISP가 STK500인 경우 입력 클럭의 1/4인 4Mhz클럭으로 전송해야 하는것이 맞지만 저의 경우 STK500 시리즈인 ISP펌웨어가 최대 2Mhz밖에 지원을 하지않는데 16Mhz크리스탈을 사용한 보드의 프로그래밍이 정상적으로 되었습니다. 아마 보드 특성과 ISP의 버전 및 종류에 따라 편차가 클것 같아서 직접 실험하지 않는 이상 알수가 없겠습니다.

    별로 도움은 안되는 댓글이지만 만드시는데 참고가 되었으면 좋겠습니다.^^

  5. Blog Icon
    halashow

    답변 감사합니다.
    직장 생활은 잘 적응하시죠
    다음에 뵙게요

  6. 네^ 적응하려고 노력하고 있습니다.^
    가끔 찾아주세요.~~!!

  7. Blog Icon
    halashow

    ISP Frequency에 대한 이해 부족으로 인한 잘못된 질문입니다.

  8. 정정 감사드립니다.^^
    하지만 ISP Frequency, SCK Clock은 타겟보드의 클럭 주파수에 비해서 1/4 낮게 책정하여 프로그래밍 하는것이 맞으므로, 혼동의 여지는 없어 보입니다. 그래도 정정 메세지 남겨주셔서 감사드립니다.

  9. Blog Icon

    블로그 참고해서 공부하고 있는 학생입니다. 너무 많은 도움이 되서 항상 감사해요
    질문이 있습니다. 제가 외부클럭 32.768khz크리스탈을 사용하여 1초를 분주하고 싶은데요.
    인터넷과 avr책 계속 찾아가면서 avr을 이용하여 소스를 짜보았는데 되질 않습니다.
    소스만 홀랑 받으려는 얌체족은 아닌데요ㅜㅜ 너무 어려움이 커서 이렇게 질문드립니다.
    어떻게 초기화를하고 어떤식으로 코딩하면 좋을까요?

티스토리 툴바