Fuse Bit là gì , Làm sao phải SET nó ?
Fuse bit là các bit cứng nhất với vi điều khiển của bạn , đó là các bit cần thết nhất để một vi điều khiển có thể hoạt động tốt bởi nó quy định phần cứng (tần số thạch anh , có hay không sử dụng chân RESET , Quy định điện áp RESET , và có sử dụng mạch debug Jtag không ) và còn quy định một số modul bên trong chip (Wotdog timer , SPI , và cả bộ nhớ bootloader và có boot vào bootder không ).
Các Bit cần chú ý để Set : cái hay ở đây là ATMEL quy định với FUSE bit , Bit 0 là có sử dụng , Bit 1 là không sử dụng .
Ở các bit thấp :
BODLEVER là bit chọn mức điện áp tham chiếu sụt áp nguồn, khi ta cấu hình kích hoạt BODEN. BODLEVER=0 tức chọn mức điện áp 4.0V, còn nếu BODLEVER=1 là chọn mức điện áp 2.7V (có thể tùy vào dòng chíp bạn cầ tra datasheet ) Khi điện áp trên chip bị sụt quá mức thiết đặt trên thì chip tự RESET không như một số vi điều khiển khác bị treo luôn .
BODEN là bit cho phép mạch phát hiện sụt áp nguồn hoạt động. Sut áp nguồn xảy ra
SUT1:0 :thời gian khởi động chip , ko dùng và mặc định như nào để đó SUT1:0=10.
CKSEL3:0 : Chọn xung nhịp : mỗi chíp có một cách chọn khác nhau bạn nên tra datasheet để set
Một số xung nhịp hay dùng :
Ở các Bit cao :
OCDEN (on chip debug enable ): avr cho phép bạn gỡ rối , debug chương trinh ngay trên chip như trong các con chip ARM thần thánh của STM như STM32F4 . AVR ở đây sẽ được debug bằng giao tiếp Jtag trên một số mạch nạp trên thị trường đã có , để sử dụng tính năng Debug bạn cần set bit OCDEN ở trạng thái 0 .
JTAEGE (JTAG Enable ) : Bit này để bạn cho phép kết nối Jtag (Kết nối bởi 4 chân TCK, TMS, TDO và TDI ) sử dụng để nạp mạch bằng mạch nạp jtag và debug , khi set bit này bằng 0 , các chân IO ứng với các chân này bạn không thể sử dụng để xuất nhập dữ liệu . Nếu bạn set JTAEGE = 1 mà ban Set OCDEN =0 thì bạn vẫn không thể debug chương trình được .
SPIEN (Enable Serial programming and Data Downloading) : cho phép sử dụng modul SPI ở trong chip , nếu không set bit này bằn 0 thì bạn có cấu hình thần thánh SIP bằng code thì vẫn không thể sử dụng được .
CKOPT (Oscillator Options) : Bit quy định tần số thạch anh ngoại lớn nhất cần tra datasheet của mỗi con chip các lỗi fuse bit chủ yếu xảy ra với bit này. (nếu sử dụng tần số thạch anh ngoài lớn thì set nó =0 )
EESAVE (EEPROM memory is preserved through chip erase) : cho phép xóa bộ nhớ EEROM không khi xóa để ghi và nạp chip . (bit này = 0 thì không được xóa )
BOOTSZ 0..1 : hai bit quy định độ rộng cho bộ nhớ Bootloader Tra datasheet để set .
BOOTRST (Select Reset Vector ) Quy định khi bắt đầu chương trình con trỏ chương trình sẽ chạy ở vị trí nào , 0x0000 hay vùng Bootloader (nếu bit này bằng 0 thì khi khởi động hoặc nhấn Reset chương trình sẽ thược thi ở vùng nhớ Bootloader )
Một số bit gia tăng :
WDTON (Watchdog timer always on) : cho phép chế độ Watdog timer hoạt động (Reset khi chíp không làm gì ở một số thời gian được set bằng code )
Bạn có thể kham khảo Fuse bit của một số chip tại : http://www.engbedded.com/fusecalc
Lỗi Khi Bạn Set Fuse Bit :
Lỗi ở đây chủ yếu là bạn chọn sai bộ giao động làm cho con chip không phân biệt được hay lỗi các phần giao động. Bạn có thể dử dụng các mạch nạp có thể tạo dao động và nạp chip để set lại fuse bit . Hoặc có các là bạn vẫn cắm mạch ISP đang sử dụng và dùng bất kì modul giao động nào đó , có thể là một con chip đang sử dụng được cho giao động ở tần số bất kì lớn hơn 1MHZ và đặt giao động đó vào chân XTAL1 (đúng chân ) không cần tháo thạch anh và nhớ câu 2 dây GND với nhau để đồng bộ mức tín hiệu 2 boar . Giữ xung nhịp đó và bạn vào set lại fuse bit cho chip bằng mạch ISP như bình thường .