|
Tài trợ cho PIC Vietnam |
Tiny Bootloader Mọi vấn đề liên quan tinybootloader sẽ được tổng hợp ở đây. |
|
Ðiều Chỉnh | Xếp Bài |
25-05-2006, 03:48 PM | #1 |
Đệ tử 8 túi
|
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. |
25-05-2006, 04:01 PM | #2 |
Đệ tử 8 túi
|
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. |
25-05-2006, 04:10 PM | #3 |
Đệ tử 8 túi
|
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. |
25-05-2006, 04:48 PM | #4 |
Đệ tử 8 túi
|
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. |
25-05-2006, 06:27 PM | #5 |
Đệ tử 8 túi
|
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. |
25-05-2006, 06:36 PM | #6 |
PIC Bang chủ
|
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.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
25-05-2006, 06:40 PM | #7 |
PIC Bang chủ
|
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.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
25-05-2006, 06:44 PM | #8 |
Đệ tử 8 túi
|
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. |
25-05-2006, 07:40 PM | #9 |
Đệ tử 8 túi
|
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 ;============================================================== 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. |
25-05-2006, 08:06 PM | #10 |
Đệ tử 8 túi
|
Mệt quá. Tí viết tiếp.
|
25-05-2006, 10:23 PM | #11 |
Đệ tử 8 túi
|
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. 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 ;===================================================================== 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. |
25-05-2006, 10:26 PM | #12 |
Đệ tử 8 túi
|
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ó. |
25-05-2006, 10:34 PM | #13 |
Đệ tử 8 túi
|
Đây là bản báo cáo đầy đủ.
Trong đó có thêm phần của anh Nam về kết quả thử nghiệm Tiny Bootloader đối với dsPIC. Các hình vẽ không đạt yêu cầu, mình sẽ chỉnh sửa lại sau. Một điểm cần lưu ý, là phiên bản này không còn phù hợp vói các chuẩn mới của PICVIETNAM. Các vấn đề đưa ra ở đây chỉ còn mang tính chất tham khảo, về sơ đồ nguyên lí, nguyên lí hoạt động về cách sử dụng Tiny Bootloader, ... và không khuyến khích việc làm tiny bootloader theo sơ đồ mạch in trong báo cáo. PVN Tiny Bootloader Version 3.0 hiện tại đã hoàn tất, và sẽ sớm thông báo kết quả trên diễn đàn. Đây sẽ là sản phẩm PVN Tiny Bootloader chính thức. thay đổi nội dung bởi: ntc, 25-05-2006 lúc 11:11 PM. |
27-05-2006, 11:05 AM | #14 |
Đệ tử 8 túi
|
6.3. Một số lỗi thường gặp khi sử dụng Tiny Bootloader
Trong quá trình sử dụng có thể đôi lúc Tiny Bootloader hoạt động không thực sự suôn sẻ mà gặp phải một số trục trặc. Các trường hợp này đều được chương trình trên máy tính báo lỗi. Sau đây là một số lỗi thường gặp và cách khắc phục: - Lỗi không tìm thấy PIC: đây là một lỗi rất hay gặp. Trong trường hợp này, ta cần kiểm tra lại tất cả các bước tiến hành với Tiny Bootloader để phát hiện lỗi và khăc phục (kết nối phần cứng có đúng chưa, chương trình Firmware đã được nạp hay chưa, các thông số thiết lập tương thích hay chưa,…) Hình 11: Lỗi “không tìm thấy PIC”. - Lỗi do chương trình nạp vào PIC không tương thích với vi điều khiển đang sử dụng. Trong trường hợp này cần kiểm tra lại chương trình cần nạp vào PIC có thực sự tương thich chưa. Ví dụ, không thể lấy chương trình viết cho PIC18F để nạp vào PIC16F. Hình 12: Lỗi do chương trình đưa vào PIC không tương thích. - Lỗi do thanh ghi PCLATH chưa được xử lí phù hợp trong chương trình ứng dụng: trong trường hợp này cần thêm vào các lệnh xử lí thanh ghi PCLATH vào chương trình ứng dụng đã được trình bày ở trên. Khi gặp lỗi này, chương trình ứng dụng vẫn được nạp vào vi điều khiển, nhưng quá trình thực thi sẽ không đúng. Hình 13: Lỗi do thanh ghi PCLATH chưa được xử lí thích hợp. thay đổi nội dung bởi: ntc, 27-05-2006 lúc 11:34 AM. |
06-09-2006, 08:53 PM | #15 |
Đệ tử 1 túi
Tham gia ngày: Jun 2005
Bài gửi: 15
: |
Các bác cho em hỏi "Chương trình Tiny Bootloader" cho con PIC18F458, có bác nào có cho em phát. Tìm search không ra.
|
|
|
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 | 139 | 07-11-2024 07:34 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 |