BootLoader
Bootloader Là Gì?
Bootloader là một chương trình nhỏ nằm trên vùng nhớ của bộ nhớ không bị mất dữ liệu khi mất điện (Flash, Program memory), chương trình này thường có một hay một vài nhiệm vụ xác định. Đối với vi điều khiển AVR, bootloader sẽ nằm ở bộ nhớ chương trình (Program memory) bắt đầu từ địa chỉ được xác định bởi BOOTSZ[1:0]. Đối với atmega8 thì giá trị của fuse bit BOOTSZ[1:0] sẽ quy định địa chỉ của vùng bootloader và vùng nhớ chương trình thực thi như sau:
BOOTSZ1
|
BOOTSZ0
|
Kích thước bootloader
|
Địa chỉ bắt đầu boot
|
Vùng nhớ chương trình thực thi
|
Vùng nhớ boot
|
1
|
1
|
128 words
|
0xF80
|
0x000 - 0xF7F
|
0xF80 - 0xFFF
|
1
|
0
|
256 words
|
0xF00
|
0x000 - 0xEFF
|
0xF00 - 0xFFF
|
0
|
1
|
512 words
|
0xE00
|
0x000 - 0xDFF
|
0xE00 - 0xFFF
|
0
|
0
|
1024 words
|
0xC00
|
0x000 - 0xBFF
|
0xC00 - 0xFFF
|
Hình minh họa cho kích thước bootlloader được điều chỉnh bởi BOOTSZ
Vậy nếu BOOTSZ0 = và BOOTSZ1 = 0 thì địa chỉ bắt đầu bootloader là 0xC00 kết thúc tại 0xFFF và vùng còn lại từ 0x000 đến 0xBFF sẽ chứa chương trình thực thi bình thường.
Có đến 2 vùng nhớ mà vi điều khiển có thể chạy được vì vậy phải có một thiết lập để vi điều khiển biết được sẽ thực thi code ở vùng nào khi khởi động. Việc thiết lập này được thực hiện qua fuse bit BOOTRST (bài fuse bit). Khi bit BOOTRST = 0 vi điều khiển sẽ thực thi code ở phần bootloader và khi BOOTRST = 1 chương trình sẽ chạy bình thường tại địa chỉ bắt đầu 0x000.
Nạp Code Bằng Bootloader
Ứng dụng phổ biến của bootloader là nạp code cho vi điều khiển mà không cần đến mạch nạp. Hoạt động của nó như sau:
v Bootloader giao tiếp với máy tính thông qua một chuẩn giao tiếp nào đó, thông qua UART-RS232 hay USB chẳng hạn.
v Trên máy tính, thực hiện chuyển dữ liệu cần nạp cho vi điều khiển (file hex, file bin) thông qua những chuẩn giao tiếp trên.
v Chương trình bootloader nhận được dữ liệu này và tiến hành ghi dữ liệu vừa nhận được vào vùng nhớ chương trình thực thi.
v Sau khi ghi xong thì bootloader nhảy đến địa chỉ đầu tiên (0x0000) của vùng nhớ chương trình thực thi để thực hiện code vừa nạp được.
AVR có rất nhiều bootloader được phát triển và sử dụng rộng rãi, phổ biến và được dùng nhiều nhất có thể kể đến là bootloader của Ardunio, Ardunio là một hướng tiếp cận khác khi đã rành rẽ những thứ cơ bản của AVR, học vi điều khiển từ Ardunio cũng có cái hay tuy nhiên tự tìm hiểu từ những thứ cơ bản nhất cũng là một thú vị.
Ở đây tôi có một bootloader mà tôi đang sử dụng là bootloader dùng USB-HID để giao tiếp với máy tính, và một bootloader cũ hơn là bootloader dùng UART-RS232 để giao tiếp.
Subscribe to:
Post Comments
(
Atom
)
nếu nạp bằng mạch nạp rồi có thể nạp lại bằng BootLoader không anh
ReplyDeleteĐược em, bootloader dùng để nạp code cho tiện hơn.
DeleteDou đi 1 vòng rồi thấy bài này của bác Tài :D
DeletePlay Online Casino Games for Real Money (2021)
ReplyDelete› › Online Casino Games › › Online kadangpintar Casino 1xbet korean Games Play the best online casino games and play for real money in 2021. Top febcasino Live Dealer Games and No Download Casinos. Start Playing Today!