View Single Post
Old 13-10-2005, 05:47 PM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Hướng dẫn về tiny bootloader

Đây là bootloader cho các vi điều khiển Microchip PIC

* Nó là bootloader có kích thước nhỏ nhất, ít hơn 100 word bộ nhớ chương trình
* Nó là bootloader duy nhất hỗ trợ tất cả các dòng PIC: 16F, 18F, dsPIC (những dòng có hỗ trợ chế độ self-programming - tự nạp lại).

Đặc điểm của firmware:

* Kích thước chỉ có khoảng 100word (cho tất cả các dòng 16F, 18F, dsPIC, thực ra là nó ít hơn 100 word);
* Có thể ghi vào flash, eeprom, và có thể ghi vào các bytes cài đăt (configuration bytes) của dòng 18F
* Khi reset, đợi 1 giây để nhận chương trình nạp, nếu không nhận được thì chuyển qua chạy chương trình
* File .asm của bootloader rất dễ để chỉnh sửa lại, cho phù hợp với từng loại chip, từng tốc độ truyền nhận.


Đặc điểm của phần mềm trên máy tính


* Có thể tải chương trình vào flash (trong phiên bản này của bootloader, cho phép cài đặt các byte cài đặt (configuration bytes) và có thể thay đổi dễ dàng theo từng loại PIC)
* Làm việc với tất cả các dòng PIC đã nêu trên; tự động nhận ra nội dung file HEX và dòng PIC
* Ghi nhớ cài đặt cuối (thuận tiện cho người dùng khi thao tác với một loại PIC)
* Trong trường hợp lỗi, nó sẽ truyền một tín hiệu ngược lại cho máy tính để tái đồng bộ giữa máy tính và PIC;
* Chế độ giao tiếp có thể được thay đổi, có thể dùng bất kỳ cổng COM nào với tốc độ baud nào

Khái niệm chung về bootloader


Một bootloader là một chương trình nằm trong vi điều khiển, và giao tiếp với máy tính (thông qua giao tiếp nối tiếp). Bootloader nhận một chương trình (đã được dịch ra thành file HEX) từ máy tính và ghi nó vào bộ nhớ flash của vi điều khiển thông qua một phần mềm trên máy tính, sau đó chạy chương trình đó trên vi điều khiển. Bootloader chỉ có thể được dùng với những vi điều khiển nào cho phép ghi vào bộ nhớ flash thông qua phần mềm trên máy tính. Bản thân bootloader phải được ghi vào trong bộ nhớ flash bằng một mạch nạp khác. Để bootloader hoạt động, sau khi nhấn reset, một lệnh "goto bootloader" phải nằm ở địa chỉ đầu tiên của chương trình vi điều khiển. Có 2 loại bootloader, một số loại đôi khi cần người dùng đặt lại địa chỉ các dòng lệnh đầu, một số khác thì tự bản thân nó đặt những dòng lệnh đầu của người dùng vào một địa chỉ khác khi mà bootloader đã nằm sẵn ở đó, và quay trở lại chương trình của người dùng khi kết thúc đoạn chương trình bootloader.



Trong trường hợp này, tiny bootloader tự động đem các vị trí đầu của chương trình người viết, và đặt ở phía dưới cùng với chương trình bootloader (thực ra đoạn chương trình này chỉ tối đa có 4 dòng lệnh). Các bạn lưu ý rằng địa chỉ 0x0004 đã là địa chỉ bắt đầu ngắt. Chính vì vậy, nếu các bạn lập trình từ vị trí 0x0000 thì cũng chỉ viết được tối đa 4 dòng lệnh, sau đó phải nhảy đến chương trình chính.

Như vậy, tiny bootloader sẽ thực hiện thao tác, cắt 4 dòng đầu tiên từ 0x0000 đến 0x0003 của các bạn, thay bằng dòng lệnh GOTO BOOTLOADER. Và nó tự động đặt 4 dòng lệnh của các bạn nằm ngay phía trên chương trình bootloader (xem hình trên).Sau đó, chạy chương trình tinybootloader phía bên dưới. Rồi nó quay lên chạy 4 dòng lệnh của các bạn.

Kết thúc 4 dòng này, nó lại trở về vị trí chương trình chạy bình thường của các bạn ở bên trên.

Trong bài viết sau, tôi sẽ đề cập tới việc cài đặt và sử dụng tiny bootloader.

Thú thực với các bạn rằng, tôi dùng tiny bootloader từ lâu, nhưng một năm trở lại đây, thấy tính năng của nó quá tốt, cũng ngỡ ngàng. Nó nạp được cho cả dsPIC luôn rồi thì không vấn đề gì mà không dùng nó.

Nội việc viết đoạn chương trình giao tiếp RS232 mà tôi nghĩ lúc nào cũng cần thiết, thôi thì dùng bootloader luôn cho tiện.

2 đoạn cuối là nhận xét cá nhân, các bạn không cần quan tâm chi tiết.

Chúc vui.

thay đổi nội dung bởi: falleaf, 13-10-2005 lúc 05:55 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn