PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Bootloaders - Programmers - Debuggers - Emulators > Tiny Bootloader

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Tiny Bootloader Mọi vấn đề liên quan tinybootloader sẽ được tổng hợp ở đây.

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 25-05-2006, 03:48 PM   #1
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
PVN Tiny Bootloader

Đây là kết quả sau một thời gian dài miệt mài về Tiny Bootloader.

Nhận thấy đây là một công cụ đắc lực cho việc phát triển vi điều khiển PIC, chúng tôi đã làm việc hết sức nghiêm túc để đưa ra cho các bạn sản phẩm tốt nhất trong khả năng của PICVIETNAM.

Rất trùng hợp, mọi công việc đã được hoàn tất ngay vào ngày sinh nhật của PICVIETNAM, nên cũng có thể xem đây là món quà nho nhỏ PICVIETNAM mong muốn gửi tặng đến tất cả các thành viên, đến những ai đã quan tâm và dành những tình cảm tốt đẹp cho PICVIETNAM. Đó cũng là điều mà PICVIETNAM mong muốn nhận được trong ngày sinh nhật của mình, cũng như trong những ngày bình thường khác (đừng quên tham gia chúc mừng sinh nhật PICVIETNAM tối nay nhé ).
__________________


thay đổi nội dung bởi: ntc, 25-05-2006 lúc 04:02 PM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 04:01 PM   #2
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Sơ lược về quá trình tìm hiểu và phát triển công cụ Tiny Bootloader

Có thể nói là một khoảng thời gian tương đối dài. . Bắt đầu từ những thông tin cơ bản nhất, chúng tôi đã dần phát triển và nâng cấp công cụ này qua 3 phiên bản.

Phiên bản PVN Tiny Bootloader Version 1.0 : phiên bản dựa hoàn toàn trên mạch nguyên lí ban đầu của Tiny Bootloader. Phiên bản này tuy cho phép đưa chương trình mới vào vi điều khiển nhanh chóng và tin cậy, nhưng vẫn có một số hạn chế nhất định như phải nhấn nút reset bằng tay, chưa thực sự ổn định, ...

Phiên bản PVN Tiny Bootloader Version 2.0 : có thêm một số cải tiến cho phép reset bằng chương trình, không cần phải nhấn nút reset, nâng cao độ ổn định và mang lại nhiều thuận tiện hơn cho người sử dụng. Chúng tôi sẽ phổ biến phiên bản này trong các bài viết tiếp theo.

Phiên bản PVN Tiny Bootloader Veioon 3.0: đây là sản phẩm thương mại của PICVIETNAM dựa hoàn toàn trên những cải tiến của phiên bản PVN Tiny Bootloader Version 2.0, tuy nhiên nó được thiết kế nhỏ gọn và mang tính thẩm mỹ cao, cho phép bỏ toàn bộ mạch vào vỏ của cổng COM và được thiết kế theo chuẩn mới của PICVIETNAM.

Xin gửi lời cảm ơn chân thành đến anh Đoàn Hiệp, anh Nguyễn Quang Nam, anh Doãn Minh Đăng, anh BinhAnh và các thành viên nhóm PIC tp HCM đã giúp em hoàn thành sản phẩm này.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 04:10 PM   #3
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
PVN Tiny Bootloader Version 2.0

TÓM TẮT NỘI DUNG:

Báo cáo kết quả tìm hiểu mạch nạp Tiny Bootloader cho vi điều khiển PIC, bao gồm các nội dung:

- Sơ lược về Tiny bootloader

- Thiết kế và thi công Tiny Bootloader.

- Chương trình viết cho vi điều khiển khi dùng Tiny Bootloader để nạp.

- Test mạch Tiny Bootloader.

- Một số phương pháp nhằm nâng cao tính ổn định của Tiny Bootloader.


1. Sơ lược về Tiny bootloader

Tiny Bootloader là một chương trình được đưa trước vào vi điều khiển thông qua một mạch nạp. Chương trình này có nhiệm vụ giao tiếp với máy tính (thông qua một phần mềm điều khiển trên máy tính) để nhận chương trình mà người sử dụng muốn nạp vào vi điều khiển và ghi chương trình đó vào bộ nhớ chương trình của vi điều khiển. Như vậy Bootloader cho phép ta thay đổi chương trình trong vi điều khiển một cách dễ dàng thông qua máy tính.

Firmware Tiny Bootloader cho vi điều khiển PIC có các đặc tính sau:

- Dung lượng chương trình bootloader nhỏ (ít hơn 100K word bộ nhớ chương trình).

- Sử dụng cho các dòng PIC16F, PIC18F và dsPIC (bao gồm các vi điều khiển có hỗ trợ chế độ tự nạp chương trình).

Phiên bản mới nhất của chương trình Tiny Bootloader là phiên bản tinybld191 với các đặc tính:

- Cho phép đưa chương trình của người sử dụng vào bộ nhớ flash của vi điều khiển.

- Hỗ trợ cho các dòng PIC16F, PIC18F và dsPIC, có khả năng tự phát hiện loại vi điều khiển PIC người sử dụng muốn đưa chương trình vào. Có khả năng ghi nhớ các chế độ thiết lập của lần sử dụng sau cùng.

- Trong trường hợp quá trình truyền nhận bị lỗi, chương trình sẽ được tự động truyền lại hoặc cho phép tự đồng bộ giữa vi điều khiển và máy tính.

- Cho phép thiết lập tốc độ baud và các thiết lập khác cho việc giao tiếp giữa máy tính và vi điều khiển.

Tiny Bootloader phiên bản mới “tinybld191” còn hỗ trợ thêm chế độ “Reset In Program” sử dụng chân RTS của cổng COM. Tuy nhiên chức năng Reset yêu cầu một mạch hỗ trợ khá phức tạp trên mạch ứng dụng. Ta có thể vẫn sử dụng chức năng tự động reset này mà không cần phần mạch hỗ trợ trên bằng cách cải tiến thêm một số điểm trong sơ đồ nguyên lí mạch nạp. Phần này sẽ được trình bày kĩ hơn khi đề cập đến sơ đố nguyên lí của Tiny Bootloader.

Thực chất ta có thể xem bootloader dành cho vi điều khiển PIC là một chương trình assembly bình thường được xây dựng với nhiệm vụ chờ tín hiệu điều khiển từ chương trình của máy tính trong vòng 1 giây kể từ thời điểm vi điều khiển được reset. Nếu trong vòng một giây có tín hiệu từ máy tính gửi đến vi điều khiển, chương trình bootloader sẽ ra lệnh cho vi điều khiển cập nhật chương trình mới. Trong trường hợp không có tín hiệu nào nhận được, chương trình cũ vẫn tiếp tục được thực thi bình thường. Đây cũng là một đặc điểm quan trọng của bootloader dành cho vi điều khiển PIC. Ngoài ra chương trình asm của bootloader cũng có thể dễ dàng được chỉnh sửa cho phù hợp với tốc độ truyền nhận và mục đích của người sử dụng.
__________________


thay đổi nội dung bởi: ntc, 25-05-2006 lúc 04:15 PM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 04:48 PM   #4
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
2. Mạch Tiny bootloader

2.1. Chức năng của mạch Tiny bootloader dành cho vi điều khiển PIC

Ta đã có sẵn các chương trình giao tiếp (của máy tính cũng như của vi điều khiển). Tuy nhiên để quá trình truyền nhận dữ liệu thực hiện được ta cần thiết kế thêm một mạch giao tiếp giữa máy tính và vi điều khiển thông qua một chuẩn giao tiếp nào đó. Đó cũng chính là nhiệm vụ của mạch Tiny bootloader. Thực chất có thể hiểu đây chỉ là một mạch giao tiếp đơn thuần.

2.2. Sơ đồ nguyên lí mạch Tiny bootloader

Mạch nguyên lí trong hình 1 được sử dụng để giao tiếp giữa máy tính với vi điều khiển PIC thông qua chuẩn giao tiếp RS232.

Tại ngõ vào của mạch Tiny bootloader ta sử dụng IC MAX232 để thực hiện việc chuyển đổi điện áp của tín hiệu ngõ ra cổng nối tiếp (cổng COM) của máy tính (+10V và –10V) sang điện áp của dạng tín hiệu thông thường (0V và 5V) theo chuẩn giao tiếp RS232. Ngõ ra của mạch sẽ là các tín hiệu TX và TX được nối vào các chân tương ứng của vi điều khiển PIC. Nguồn cung cấp (5V và GND) được lấy trực tiếp từ mạch ứng dụng của vi điều khiển PIC để đưa vào mạch Tiny bootloader, như vậy ta không cần thiết kế thêm nguồn cung cấp riêng cho mạch.

Sơ đồ nguyên lí mạch Tiny Bootloader nguyên thủy (không có chức năng “Reset In Program”) sử dụng 3 chân GND, TX và TX của cổng COM được trình bày trong hình 1.



Hình 1 : Sơ đồ nguyên lí mạch Tiny Bootloader nguyên thủy.

Để tận dụng tính năng “Reset In Program”, ta tiến hành cải tiến sơ đồ nguyên lí mạch ở hình 1 như sau: nối chân RTS của cổng COM với một ngõ vào của MAX232, và nối ngõ ra tương ứng của chân đó với chân MCLR* của vi điều khiển PIC. Khi Chương trình “tiny Bootloader” được cho phép hoạt động, chân RTS của cổng COM sẽ được kéo lên mức logic cao, và theo nguyên lí hoạt động của MAX232, mức logic của chân ngõ ra tương ứng với ngõ vào đó sẽ ngược với mức logic của ngõ vào, điều này có nghĩa chân MCLR* của PIC được đưa về mức logic 0 và vi điều khiển được reset. Sơ đồ nguyên lí cụ thể của mạch Tiny Bootloader cải tiến được trình bày trong hình 2.



Hình 2 : Sơ đồ nguyên lí mạch Tiny Bootloader cải tiến.

Các hoạt động tiếp theo sau đó là hoạt động truyền nhận các word chương trình giữa máy tính và vi điều khiển. Hoạt động này là sự phối hợp giữa chương trình Tiny Bootloader trên máy tính và firmware Tiny Bootloader được nạp vào vi điều khiển trước đó. Máy tính có nhiệm vụ truyền dữ liệu cho vi điều khiển, còn chương trình firmware chịu trách nhiệm việc ghi dữ liệu đó lên bộ nhớ chương trình, tổ chức sắp xếp một cách hợp lí để chương trình nạp vào có thể hoạt động bình thường, đồng thời cho phép kích hoạt firmware Tiny Bootloader khi vi điều khiển được reset.
__________________


thay đổi nội dung bởi: ntc, 25-05-2006 lúc 09:05 PM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2007, 07:04 AM   #5
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Bác NTC ơi, có thể post cho mọi người xem phiên bản 3.0 mà các anh đã cải tiến ko? cái hình phiên bản 2.0 anh post nhỏ xiu hà nhìn ko biết chân nào nối với chân nào cả...
thanks....
á cho em hỏi .. trong CCS phải viết thế nào mới nạp được vậy??
Thanks
__________________
_________________________________________________
Le Trung Duc
Industry Research & Application Center
NTT Institute of Hi_technolog
ltduc@ntt.edu.vn
leduc_cktd@yahoo.com.vn
http://www.nttc.edu.vn
CNC DIY : http://quangcaosanpham.com/shop/driverservo
0909300332
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2007, 09:23 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi LeDuc View Post
...
á cho em hỏi .. trong CCS phải viết thế nào mới nạp được vậy??
Thanks
Trong CCS cứ viết như bình thường, không cần thay đổi gì cả.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 06:27 PM   #7
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
3. Thi công mạch Tiny Bootloader.

Yêu cầu đặt ra cho mạch thi công bao gồm:

- Bảo đảm thứ tự các chân ngõ ra theo đúng chuẩn qui định của PICVIETNAM.

- Mạch đơn giản, gọn nhẹ, không cần sử dụng nguồn cung cấp riêng cho mạch Tiny Bootloader..

- Đạt yêu cầu về tính thẩm mỹ.

- Có hộp bao bọc mạch Tiny Bootloader.

- Hộp bao bọc sử dụng trong truờng hợp này là vỏ cổng LPT do các nguyên nhân:

- Đáp ứng được kích thước của mạch PCB.

- Đạt yêu cầu về thẩm mỹ.

(Không phổ biến hình này vì không đúng chuẩn ICSP BLD của picvietnam)

Hình 3: Sơ đồ mạch in Tiny Bootloader Version 2.0

Mạch in được thiết kế như hình trên cho phép ta bỏ lọt Tiny Bootloader vào vỏ nhựa của cổng song song (DB25). Như vậy việc thiết kế vỏ hộp cho Tiny Bootloader đã được giải quyết. Giải pháp này không quá phức tạp nhưng hiệu quả, vừa đem lại tính thẩm mỹ cho Tiny Bootloader, vừa bảo đảm tính an toàn trong quá trình sử dụng (tránh bị điện giật!).

Chú ý chân NC (Not Connected) trong trường hợp này được thêm vào chỉ để cho đủ 6 chân do đăc điểm thị trường linh kiện không có loại jack 6. Việc thêm vào chân NC cho phép tạo nhiều thuận lợi trong quá trình thiết kế và thi công mạch, tạo sự thuận tiện trong quá trình sử dụng. Ngoài ra chân này không còn vai trò hay chức năng nào khác.

Ngõ vào của mạch bao gồm các tín hiệu TX, TX và GND từ cổng COM và các chân VDD, VSS dùng để cấp nguồn cho Tiny Bootloader. Ngõ ra là các tín hiệu TX, RX từ cổng COM và tín hiệu từ chân R2OUT* của MAX232 được nối vào các chân tương ứng của vi điều khiển PIC.

Phần mạch chính của Tiny Bootloader bao gồm IC MAX232 và các tụ DC có giá trị 1uF/50V. Các phần còn lại được kết nối thông qua các dây nối. Mô hình cụ thể của Tiny Bootloader như sau:



Hình 4: Mô hình mạch Tiny Bootloader.

Các khoảng cách nêu trên chỉ mang tính chất tham khảo. Phần cáp nối về cổng COM cho phép nối dài trên 1m (phần này điện áp truyền trên đường dây là +(-) 10 V nên cho phép truyền đi xa tốt hơn). Việc nối dài các đoạn cáp như vậy cho phép ta kết nối và sử dụng Tiny Bootloader thuận tiện hơn. Tuy nhiên ta chỉ nên kéo dài phần cáp kết nối từ cổng COM đến Tiny Bootloader.

Việc tự thiết kế cáp nối vào cổng COM đính kèm vào Tiny Bootloader cho phép tạo nhiều thuận tiện hơn khi sử dụng Tiny Bootloader, tuy nhiên để sản phẩm đạt được yêu cầu về thẩm mỹ, cần trải qua công đoạn thiết kế kiểu mẫu cho mạch. Do đó để nối dài cổng COM, ta sử dụng cáp chuyên dụng, khi đó Tiny Bootloader chỉ còn là một sản phẩm gọn nhẹ như các hình được trình bày ở phần sau.
__________________


thay đổi nội dung bởi: falleaf, 25-05-2006 lúc 06:38 PM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 06:36 PM   #8
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
Em lưu ý, phiên bản này là phiên bản version 2, mạch in này chúng ta không phổ biến nữa, anh tạm xoá bớt phần mạch in này của em đi. Khi nào có hình sản phẩm hoàn thiện theo đúng version 3, chuẩn box header 5x2, thì chúng ta mới post lên. Em đem qua chỗ anh Đăng để chụp hình lại.

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 06:40 PM   #9
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
Cái hình mạch nguyên lý cải tiến, em post lại cái hình to lên cho mọi người xem, em làm nó có chút téo thế thì ai mà xem nổi?

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 06:44 PM   #10
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
4. Thiết kế mạch ứng dụng tương thích với mạch Tiny bootloader

Để sử dụng được mạch Tiny Bootloader có sơ đồ nguyên lí được trình bày ở phần trên, thì ở phần mạch ứng dụng, ta phải thêm vào một jack kết nối giữa mạch ứng dụng và mạch Tiny Bootloader. Jack này bao gồm các đường VDD, VSS để cấp nguồn cho mạch Tiny Bootloader và các đường tín hiệu TX, RX, MCLR*.

PICVIETNAM khuyến cáo việc thiết kế jack nối giữa Tiny Bootloader và mạch ứng dụng có thứ tự chân như hình 5. Thứ tự cụ thể như sau:

- MCLR
- VDD
- VSS
- TX
- RX

Đây cũng là chuẩn thiết kế các mạch ứng dụng của PICVIETNAM sử dụng mạch Tiny Bootloader. Tính hiệu quả của chuẩn này đã được PICVIETNAM kiểm định qua một quá trình chuẩn hóa và đưa vào ứng dụng trong thực tế.
Việc thiết kế theo chuẩn như vậy mang lại nhiều thuận lợi cho quá trình thiết kế ứng dụng và sử dụng công cụ Tiny Bootloader. Mạch Tiny Bootloader có thể nói là một công cụ đắc lưc đã đựoc thiết kế cố định và sử dụng lâu dài, do đó nếu việc thiết kế jack nối trong các mạch ứng dụng không đồng nhất sẽ dẫn đến tình trạng một mạch ứng dụng không tương thích với Tiny Bootloader, như vậy công cụ Tiny Bootloader trong trường hợp này xem như không có tác dụng, và muốn sử dụng được công cụ Tiny Bootloader, cách duy nhất là phải thiết kế một mạch Tiny Bootloader khác tương thích với mạch ứng dụng đó. Điều này là bất hợp lí và mang lại nhiều trở ngại không mong muốn.




Hình 5: Sơ đồ nguyên lí mạch test Tiny Bootloader. Phần mạch giao tiếp với Tiny Bootloader được tô màu xám.
__________________


thay đổi nội dung bởi: ntc, 11-04-2007 lúc 12:27 PM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-07-2007, 11:47 AM   #11
WaveAlpha
Đệ tử 1 túi
 
WaveAlpha's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 13
:
Send a message via Yahoo to WaveAlpha
Trích:
Nguyên văn bởi ntc View Post



Hình 5: Sơ đồ nguyên lí mạch test Tiny Bootloader. Phần mạch giao tiếp với Tiny Bootloader được tô màu xám.
Anh ơi hình nhỏ và mờ quá, e ko thấy được gì. E là người mới học vi điều khiển nên ko biết nhiều đâu , a post hình lại rỏ hơn đi. Thanks
__________________
Học, học nữa, học mãi...

Email: WaveAlpha12@yahoo.com
WaveAlpha vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 07:40 PM   #12
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
5. Các thao tác khi sử dụng Tiny Bootloader

Ta đã có được mạch Tiny Bootloader và mạch ứng dụng tương thích với Tiny Bootloader. Từ “tương thích” được nhấn mạnh lại ở đây. Để nạp được chương trình vào vi điều khiển PIC dùng Tiny Bootloader, ta tiến hành lần lượt các bước sau:

- Bước 1: Sử dụng mạch nạp để nạp chương trình Tiny Bootloader vào vi điều khiển trước.

- Bước 2: Kết nối Tiny Bootloader với máy tính và kết nối cáp dữ liệu của Tiny Bootloader với mạch ứng dụng. Cấp nguồn cho mạch ứng dụng.

- Bước 3: Khởi động chương trình tinybld19 và thiết lập các thông số cần thiết.

- Bước 4: Đưa chương trình mới vào vi điều khiển.

Sau đây là quá trình tiến hành cụ thể của các bước trên.

Bước 1:

Ta cần một mạch nạp cho vi điều khiển PIC16F877A (đây là vi điều khiển sử dụng cho mạch test) và nạp chương trình Tiny Bootloader vào vi điều khiển trước. Chương trình Tiny Bootloader được cung cấp trong phần mềm “tinybld191”, cụ thể là chương trình "…\TINYBLD\picsource\16f\tinybld16F.asm" và chỉnh sửa lại các thông số cần thiết trong chương trình. Sau đây là chương trình được chỉnh sửa (phần chỉnh sửa là phần đươc tô màu đỏ):Cần chú ý là trong mạch ứng dụng sử dụng loại thạch anh có tần số bao nhiêu thì phải điều chỉnh một cách thích hợp trong firmware của Tiny Bootloader. Ngoài ra có thể tìm thấy các firmware tương ứng cho ứng dụng trên các phương tiện thông tin khác, đặc biệt là Internet.

Code:
;=========================================================

; Chương trình Firmware viết cho vi điều khiển PIC16F877A khi sử 
; dụng Tiny Bootloader
; Chương trình này được này trước vào vi điều khiển PIC để sử dụng phần mềm 
; tinybld cho việc cập nhật chương trình mới; Tốc độ baud 19200, sử dụng thạch anh 20 MHz.

;=========================================================
       radix 	DECLIST     	P=16F877A	
               ; change also: Configure->SelectDevice from Mplab 
       include	<p16f877a.inc>
       xtal              EQU 	20000000	
                ; you may also want to change: _HS_OSC _XT_OSCbaud EQU 	19200		
                ; standard TinyBld baud rates: 115200 or 19200
                ; The above 3 lines can be changed and buid a bootloader for the 
                ; desired frequency (and PIC type)
;********************************************************************
;	Tiny Bootloader	16FxxxA series		Size=100words
;	claudiu.chiculita@ugal.ro
;	[url]http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
;********************************************************************

       #include	"E:\MPLAB\tinybld19\picsource\icdpictypes.inc"
       #include        "E:\MPLAB\tinybld19\picsource\spbrgselect.inc"
       #include	"E:\MPLAB\tinybld19\picsource\bankswitch.inc"
     ; #include "../icdpictypes.inc"	
              ;takes care of: #include "p16fxxxA.inc",  				 ; max_flash, IdTypePIC
     ; #include "../spbrgselect.inc"
     ; #include "../bankswitch.inc"

       #define first_address max_flash-100 
              ; 100 word in size

;    __CONFIG  _HS_OSC & _CP_OFF & _WDT_OFF & _BODEN_ON&_PWRTE_ON & _LVP_OFF & _DEBUG_OFF           

      __CONFIG  _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
       errorlevel 	1, -305			
              ; suppress warning msg that takes f as default

       cblock 	0x20
       buffer:80
       endc
       cblock 	0x78
       crccontor
       i
       cnt1
       cnt2
       cnt3
       flag	
       endc

SendL 	macro car
       movlw	car
       movwf	TXREG
       endm

;0000000000000000000000000 RESET 00000000000000000000000000
       ORG             0x0000		
       PAGESEL 	IntrareBootloader		
      GOTO   	IntrareBootloader           ;view with TabSize=4

;&&&&&&&&&&&&&&&&       START      &&&&&&&&&&&&&&&&&
;----------------------  Bootloader  ----------------------;               

;PC_flash:    C1h          AddrH  AddrL  nr  ...(DataLo DataHi)...  crc
;PIC_response:   id   K                                                 K	

       ORG 		first_address	
       nop	
       nop	
       nop	
       nop	
       org 		first_address+4

IntrareBootloader		;init serial port	
       clrf		STATUS	
       bsf		STATUS,RP0	;BANK1_	
       movlw	b'00100100'	
       movwf	TXSTA	
       movlw	spbrg_value	
       movwf	SPBRG	
       BANK0_	
       movlw	b'10010000'	
       movwf	RCSTA			;wait for computer	
       call		Receive				
       sublw	0xC1				;Expect C1
       skpz	
       goto	way_to_exit	
       SendL	IdTypePIC			;PIC type	
       ;SendL 	IdSoftVer			;firmware ver x

MainLoop	
        clrf	             STATUS				;bank0
        SendL 'K'

mainl	
        clrf		crc	
        call		Receive			;H	
        bsf 	STATUS,RP1		;bank2
        movwf	EEADRH	
        movwf	flag			;used to detect if is eeprom
        call		Receive			;L	
        bsf 	STATUS,RP1		;bank2
        movwf	EEADR	
        call		Receive			;count	
        movwf	contor	
        movwf	i	
        incf	i	
        movlw	buffer-1	
        movwf	FSRrcvoct	
        call		Receive	
        incf	FSR	
        movwf	INDF	
        decfsz	i	
        goto	rcvoct	
        movf	crc,f				;check checksum
        skpz	
        goto	ziieroare				;write	
        bsf 	STATUS,RP1			;bank switch 0->2  
        movlw	buffer	
        movwf	FSR

writeloop					; write 2 bytes = 1 instruction
       clrwdt
       movf	INDF,w	
       movwf	EEDATA	
       incf		FSR	
       movf	INDF,w	
       movwf	EEDATH	
       incf		FSR		
       BANK3_					;bank  2->3	
       bcf		EECON1,EEPGD
       btfss	flag,6				;is eeprom (or flash)
       bsf		EECON1,EEPGD	
       bsf		EECON1,WREN	
       movlw	0x55	
       movwf	EECON2	
       movlw	0xaa	
       movwf	EECON2
       bsf		EECON1,WR	
       nop	
       nop

waitwre		
       btfsc	EECON1,WR	;for eeprom writes (wait to finish write)
       goto	waitwre	
       bcf		EECON1,WREN	
       BANK2_			;bank2	
       incf		EEADR	; does not cross zones
       btfss	flag,6	; if writing to EEPROM, skip first counter dec.	
       decf	contor	
       decfsz	contor	
       goto	writeloop	
       goto	MainLoop

ziieroare	
       SendL 	'N'	
       goto	mainl

Receive	
       clrf		STATUS	
       movlw	xtal/1000000+1	; for 20MHz => 11 => 1second
       movwf	cnt1r

pt2							
       clrf		nt2r

pt3	
       clrf		cnt3

rptc	
       btfss 	PIR1,RCIF		;test RX	
       goto 	$+4	
       movf 	RCREG,w		;return in W	
       addwf 	crc,f			;compute checksum	
       return	
       clrwdt	
       decfsz	cnt3	
       goto	rptc	
       decfsz	cnt2	
       goto	rpt3	
       decfsz	cnt1	
       goto	rpt2				;timeout:

way_to_exit		;exit in all other cases; must be BANK0/1	
       ;BANK0_	
       bcf	             RCSTA,SPEN	; deactivate UART	
       goto             first_address
;*************************************************************
; After reset; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.       
     
      END
;==============================================================
Chỉ chỉnh sửa các thông số ở phần đầu chương trình, sau đó biên dịch và nạp vào vi điều khiển.

Bước 2: chỉ cần kết nối đúng thứ tự các chân giữa Tiny Bootloader và mạch ứng dụng.

Bước 3: khởi động chương trình Tiny Bootloader và thiết lập các thông số cần thiết (tốc độ baud, cổng giao tiếp, …)



Hình 6: Nhấn nút “Brouse” để đưa file hex cần nạp vào chương trình.



Hình 7: Vào thẻ “Option”, chon chế độ “Reset PIC using RTS line”.

Bước 4: Nhấn nủt “Write Flash” để nạp chương trình đã chọn vào vi điều khiển



Hình 8: Bấm nút “Write Flash” để đưa chương trình vào vi điều khiển.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 08:06 PM   #13
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Mệt quá. Tí viết tiếp.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 10:23 PM   #14
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
6. Một số vấn đề thường gặp khi sử dụng Tiny Bootloader

Trên đây là các bước để test mạch Tiny Bootloader, đồng thời cũng là các thao tác cơ bản được tiến hành một cách tuần tự khi sử dụng Tiny Bootloader. Tuy nhiên khi sử dụng Tiny Bootloader trong thực tế, ta thường gặp phải một số vấn đề như sau:

6.1. Chương trình ứng dụng tương thích với firmware của Tiny Bootloader.
Như ta đã biết, chương trình firmware có nhiệm vụ tạo một thời gian chờ tín hiệu cập nhật chương trình mới từ máy tính. Nếu phát hiện được tín hiệu trên, chương trình firmware sẽ làm nhiệm vụ nhận chương trình mới và ghi vào bộ nhớ chương trình, sau đó thực thi chương trình mới đó. Nếu sau khoảng thời gian chờ mà không phát hiện được tín hiệu trên, firmware Tiny Bootloader sẽ điều khiển bộ đếm chương trình nhảy đến vị trí chương trình cũ và bắt đầu thực thi chương trình cũ.

Để làm được cả hai công việc đó, firmware Tiny Bootloader sẽ phải thực hiện một số thay đổi lên chương trình ứng dụng. Hình sau cho phép hình dung rõ hơn những thao tác đó.



Hình 9: Các thao tác làm thay đổi cấu trúc chương trình ứng dụng của Tiny Bootloader.
Firmware Tiny Bootloader sẽ cắt 4 word đầu tiên (từ địa chỉ 0000h đến 0003h) ở phần reset vector của chương trình ứng dụng và đặt nó ở ngay trên chương trình chính của Tiny Bootloader, thay vào đó là 4 word đầu tiên của firmware Tiny Bootloader để điều khiển bộ đếm chương trình nhảy đến vị trí chương trình chính của firmware Tiny Bootloader.

Với việc cấu trúc lại chương trình như vậy, quá trình thực thi chương trình của vi điều khiển sẽ có chút thay đổi như trên hình vẽ. Khi được reset, bộ đếm chương trình của PIC sẽ nhảy đến vị trí của reset vector, ở đó các lệnh của firmware sẽ điều khiển bộ đếm chương trình nhảy đến vị trí có chương trình chính của firmware Tiny Bootloader. Khi chương trình này được thực thi xong, bộ đếm chương trình sẽ quay trở về vị trí 4 word đầu tiên của chương trình ứng dụng được đặt ngay trên chương trình chính của firmware Tiny Bootloader.

Ngoại trừ các word đầu tiên đặt vào phần reset vector, phần còn lại của chương trình firmware được đặt ở phần cuối cùng của bộ nhớ chương trình. Khi muốn thực thi chương trình ứng dụng, bộ đếm chương trình phải nhảy trở lại vị trí của chương trình ứng dụng. Thông thường, thao tác nhảy này được thực hiện bởi lệnh “GOTO”. Tuy nhiên trong trường hợp này, khoảng cách nhảy là rất xa và vượt ra khỏi tầm nhảy của lệnh “GOTO”, cho nên việc cập nhật các bit cao cho bộ đếm chương trình phải được thực hiện (firmware Tiny Bootloader không thực hiện công việc này cho người sử dụng).

Bộ đếm chương trình có dung lượng 13 bit và giá trị bộ đếm được chứa trong các thanh ghi PCH và PCL. Thanh ghi PCL chứa 8 bit thấp cho phép các thao tác trực tiếp như các thanh ghi bình thường. Thanh ghi PCH chứa 5 bit cao còn lại, việc thao tác trên thanh ghi này phải thao tác thông qua thanh ghi PCLATH.

Như vậy, dựa vào vị trí bắt đầu của chương trình chính, ta phải đưa các giá trị thích hợp vào thanh ghi PCLATH để điều khiển bộ đếm chương trình nhảy đến vị trí đó. Thao tác này phải được thực hiện trong 4 word đầu tiên của chương trình ứng dụng.

Sau đây là ví dụ cụ thể. Phần thay đổi so với các chương trình bình thường được tô màu đỏ trong đoạn chương trình sau:

Code:
;=====================================================================
; Một ví dụ cho việc thay đổi chương trình ứng dụng phù hợp với
; Firmware của Tiny Bootloader
        processor  	16f877a			
        include	<p16f877a.inc>		
        __CONFIG	_CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &  _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;=====================================================================
;--------------------------------------
; Khai báo biến
;--------------------------------------
delay_reg1	EQU	0x20			
delay_reg2	EQU	0x21	
;=====================================================================
;       CHƯƠNG TRÌNH CHÍNH	
        ORG	0x000				
        CLRF	STATUS	; đây là phần xử lí thanh ghi PCLATH	
        MOVLW	0x00	
        MOVWF	PCLATH	
        GOTO	start
;=====================================================================
start	
	BCF	  STATUS,RP1	
             BSF	  STATUS,RP0	

 	CLRF	  TRISB	
	
             BCF	  STATUS,RP0	
	
loop 
             MOVLW	  0x8F				
             MOVWF	  PORTB			
             CALL	  delay100ms	
             CALL	  delay100ms	

             CLRF	  PORTB	
             CALL	  delay100ms	
             CALL	  delay100ms	
             GOTO	  loop
;=====================================================================
; CHƯƠNG TRÌNH CON
;=====================================================================
;------------------------------------------------------------------------
; Chương trình con tạo thời gian delay 100ms
;------------------------------------------------------------------------

delay100ms	
            MOVLW	0x83	
            MOVWF	delay_reg1	
            MOVLW	0xFF	
            MOVWF	delay_reg2loop1	
            DECFSZ	delay_reg1	
            GOTO	loop2	
            GOTO 	exitloop2 	
            DECFSZ	delay_reg2	
            GOTO	loop2	
            GOTO	loop1	
	
exit	
            RETURN

            END
;=====================================================================
Ví dụ trên khá đơn giản. Do chương trình ứng dụng rất ngắn và đơn giản, nên ta có thể dễ dàng xác định được vị trí bắt đầu của chương trình chính nằm ở trong các word đầu của bộ nhớ chương trình, cho nên thao tác đối với thanh ghi PCLATH trong trường hợp này sẽ là xóa thanh ghi PCLATH.

Trong các ứng dụng phức tạp hơn không cho phép ta đặt chương trình chính ở các word đầu (ví dụ như chương trình ngắt quá dài, bảng dữ liệu đặt ở phần đầu chương trình quá lớn, các chương trình con được viết trước chương trình chính khá dài, …), cần xác định lại vị trí bắt đầu của chương trình chính để có các thao tác xử lí thích hợp với thanh ghi PCLATH.

6.2. Tính ổn định của Tiny Bootloader

Nếu thiết kế và test mạch theo các trình tự đã nêu, ta có thể thấy được việc nạp chương trình thành công như trong hình 6.

Việc sử dụng chức năng “Reset In Program” cho phép cải thiện đáng kể tính ổn định của Tiny Bootloader so với khi reset bằng tay.

Tuy nhỉên trong quá trình tiến hành có thể gặp nhiều trở ngại, chẳng hạn như tính thiếu ổn định của Tiny Bootloader (lúc dectect được PIC, lúc không,…). Điều này đặt ra yêu cầu cải thiện thêm tính ổn định của Tiny Bootloader. Ta có thể khắc phục bằng 2 phương pháp:

- Tăng thời gian “SearchDelay” của chương trình trên máy tính (thẻ Option):



Hình 10: Tăng thời gian “SearchDelay”

- Tăng thời gian delay trong firmware: sửa lệnh “movlw xtal/2000000+1” của firmware Tiny Bootloader nạp vào PIC thành lệnh “movlw xtal/1000000+1”.
__________________


thay đổi nội dung bởi: ntc, 07-06-2006 lúc 03:22 PM.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2006, 10:26 PM   #15
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
7. Kết luận

Tiny bootloader là chương trình dùng để giao tiếp với máy tính được nạp trước vào vi điều khiển nhằm mục đích cập nhật chương trình mới cho vi điều khiển từ máy tính.

Mạch Tiny bootloader được mạch dùng để giao tiếp giữa máy tính và vi điều khiển thông qua chuẩn giao tiếp RS232.

Ngoài tác dụng nạp chương trình mới cho vi điều khiển, mạch Tiny bootloader và chương trình của Tiny bootloader còn có thể được thay đổi và chỉnh sửa dễ dàng để sử dụng cho mục đích giao tiếp giữa máy tính và vi điều khiển PIC thông qua chuẩn giao tiếp RS232.

Tiny bootloader là một trong số những công cụ mà nhà sản xuất hỗ trợ cho việc thay đổi chương trình trong vi điều khiển PIC mà không cần tháo vi điều khiển ra khỏi mạch. Điều này giúp ta linh động hơn và có nhiều hơn sự lựa chọn trong việc xây dựng và nâng cấp các ứng dụng sử dụng vi điều khiển PIC, đặc biệt là khi việc tháo hoặc gắn vi điều khiển ra khỏi mạch gặp nhiều khó khăn (chẳng hạn như khi ta sử dụng vi điều khiển PIC loại chip dán).

Ưu điểm:

- Thời gian nạp rất nhanh, thông thường là chưa đầy 1 giây.

- Hỗ trợ nhiều dòng PIC.

- Rất thuận tiện cho người sử dụng.

- Độ tin cậy cao.

- Tính an toàn được cải thiện đáng kể, tránh tình trạng làm chết vi điều khiển trong quá trình thao tác với các mạch nạp.

- Tiết kiệm được nhiều thời gian và công sức, không phải thời gian tháo ráp vi điều khiển để nạp.

Hạn chế:

Có thể thấy là sự thuận lợi mà Tiny Bootloader mạng lại là rất rõ ràng. Tuy nhiên việc sử dụng Tiny Bootloader làm cho bộ nhớ chương trình tổn hao một số lượng word nhất định (trong trường hợp này là 100 K word). Mặc dù số lượng word tổn hao là nhỏ nhưng đôi khi mang lại một số điểm bất cập (chương trình ứng dụng viết cho vi điều khiển không cho phép dư ra 100 word chẳng hạn). Do đó tùy theo yêu cầu thực tế mà có sự lựa chọn phù hợp các phương pháp nạp chương trình trực tiếp trên mạch cho vi điều khiển.
Một số trinh biên dịch chưa tương thích với tiny bootloader.

Bên cạnh đó cần chú ý đến sự tương thích giữa mạch Tiny Bootloader và mạch ứng dụng để tránh gặp phải những trở ngại không đáng có.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Cơ bản về bootloader & tiny bootloader ntdung Tiny Bootloader 135 16-03-2024 09:05 PM
Microchip Bootloader falleaf Bootloaders - Programmers - Debuggers - Emulators 2 20-05-2017 11:43 AM
xin bootloader của pic18f4331 hoangminh1234 Tiny Bootloader 30 24-12-2011 02:38 PM
Tiny bootloaders falleaf Tiny Bootloader 15 01-02-2010 03:13 PM
Xin file hex bootloader của PIC16F84A hanhluckyly Tiny Bootloader 1 18-10-2006 09:36 PM


Múi giờ GMT. Hiện tại là 07:15 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam