![]() |
Cơ bản về bootloader & tiny bootloader
Chào tất cả mọi người!
Tôi là một người mới tham gia diễn đàn này. Tôi rất muốn tìm hiểu một số khái niệm căn bản, VD như BOOTLOADER, SECTOR, DEVICE ID.... Rất mong nhận được sự hướng dẫn của tất cả mọi người. Mong tin. :( |
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. http://www.etc.ugal.ro/cchiculita/so...bootloader.png 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. |
Phần cứng của tiny bootloader các bạn làm theo sơ đồ sau:
http://www.etc.ugal.ro/cchiculita/software/max232.png http://www.etc.ugal.ro/cchiculita/software/resetpic.gif Phần mềm, các bạn có thể down load tại đây: http://www.etc.ugal.ro/cchiculita/so.../tinybld19.zip Đây là phiên bản tinybld19 |
http://i3.photobucket.com/albums/y64...ootloader1.jpg
Trên đây là danh sách những chip đã được kiểm tra là nạp được với tiny bootloader. Những chip được đánh dấu màu xanh đậm là những chip đã được tác giả test và dùng thường xuyên. Những chip màu xanh là những chip đã được test và verify. Còn những chip màu xanh tối là những chip đã được phản hồi là nạp được. Riêng cá nhân tôi, đã sử dụng tiny bootloader nạp cho các dòng PIC sau: 16F876, 16F876A, 16F88, 16F877, 16F877A Tất cả đều hoạt động tốt, và chưa bị một lỗi nào, ngoại trừ quên bấm nút reset. Nhưng nay, phiên bản mới này đã cho phép reset bằng chương trình, vì thế, tôi tin rằng phiên bản mới này sẽ không gây bất kỳ trở ngại nào cho người dùng. Chúc vui. |
Các bạn lưu ý nút reset bằng phần mềm, nếu đường dây các bạn nối quá dài, cần nối một con điện trở kéo lên 1K và một diode (trong hình màu xanh mờ). Nhưng điện trở 4K7 nối vào chân MCLR và VDD thực chất khi thiết kế mạch reset bằng tay các bạn đã có rồi. Chính vì vậy không cần thêm vào.
Còn lại tất cả mạch đều đơn giản giống như mạch giao tiếp RS232 bình thường. Các bạn vẫn có thể dùng bootloader để giao tiếp RS232 rất tốt, không cần làm bất kỳ điều gì khác. Chúc vui. |
Em đã test và chạy tốt cho dsPIC4012, bản này còn có thêm tính năng kiểm tra: Check PIC hay hơn so với các phiên bản trước đó. -> Bản tinybootloader này rất tuyệt.
|
Từ trước tới giờ tớ dùng MPLAP để viết chương trình rồi dùng winpic800 để nạp vào chip. Có thấy chỗ nào động đến khái niệm bootloader đâu? Các bác giải thích xem sao lại không gặp khái niệm này thế, và nó là gì?
|
Trích:
|
tui đang dùng 89c51,mạch nạp gồm có 1 con master nạp sẵn chương trình giao tiếp máy tính gọi là firmware,nay lại có khái niệm bootloader nữa,vậy cái này có giống như cái firmware của 89 ko?ko cần nó có được ko?
Đối với người biết rồi thì câu này hỏi hơi bị ..ngu 1 tí,nhưng tui mới học,mong giúp đỡ cho |
Trích:
Bootloader cũng là một dạng firmware, nhưng chạy trên target chip, thay vì chạy trên một master chip, do vậy bạn không cần phải có mạch nạp nếu bạn đã có bootloader. Lẽ đương nhiên không có bootloader thì bạn vẫn dùng tốt được vi điều khiển, nhưng bạn đã được giải thích những thuận lợi của bootloader trong luồng này rồi đó. Thân, |
Trích:
|
à há,như vậy là chỉ cần làm 1 cái mạch tẹo teo như thế rồi cắm vào computer là nó nạp,ko cần master gì ráo,vụ này rất hay.
89c51 có botloader ko vậy? nếu ko có thì có thể dùng mạch nạp mater/slave rồi nạp cái botloader cho nó ko? hic hic,càng học càng phát sinh.... |
Trích:
http://www.atmel.com/dyn/products/pa...&Direction=ASC để xem bảng lựa chọn các chip theo kiến trúc 8051, chú ý cột "Self Program Memory".) Atmel cũng cung cấp sẵn phần mềm chạy trên máy tính để kết nối với bootloader (họ gọi là Serial Loader) có sẵn trong chip. Thân, |
Trích:
Tiny Bootloader có nhược điểm là nó cần lệnh goto trong 4 word đầu tiên của file hex. Vì vậy nó không làm việc với một số trình dịch. Đáng tiếc nhất trong đó có hai phiên bản mới nhất của HTPIC là HTPICC9.50 PL3 và HTPICC18 9.50. Nhưng với phiên bản 8.05PL2 và 8.35PL3 lại chạy rất tốt. Em hỏi trên forum của bọn HTPIC thì mod trả lời, em làm theo cũng chẳng chạy. Trên diễn đàn Microchipc.com có một chú người nhật đưa ra giải pháp khác phục nhưng chỉ chạy với bản 9.50Lite còn bản "xịn" thì không chạy :( |
Trích:
Trích:
Có lẽ do bước 3 tôi đã làm sai , anh có thể cho 1 chương trình mẫu tham khảo đc ko , tôi dùng C30 |
Trích:
http://www.picvietnam.com/forum//showthread.php?t=333 Nếu đúng là bước 3 bạn làm không tốt thì tôi sẽ bàn tiếp về việc viết code trong C30 cho tiny bootloader. Thân, |
Các anh cho em hỏi thêm điều này: sao tiny bootloader em làm và nó đã hoạt động rồi, nó báo có tìm thấy pic6f877a rồi và nhấn nút writeflash thì cũng ghi chương trình được rồi (hoạt động đúng yêu cầu) nhưng các lần sau thì lại báo lỗi không tìm thấy chip (mặc dù em có nhấn nút reset nhiều lần) và cũng không ghi chương trình mới được (nhấn writeflash), xin các anh chỉ cho em cách khắc phục.
(em dùng tinybld191) cám ơn nhiều! |
Nếu Tiny Bootloader được viết không cẩn thận, nó chỉ có khả năng nạp chương trình vào chip một lần duy nhất. Điều đang diễn ra là đoạn code của bootloader trong những lần hoạt động tiếp theo của chip không thể thực thi được. Có nhiều nguyên nhân dẫn đến hiện tượng này, do đó bạn cần cho biết thêm thông tin thì mới giúp bạn được (nếu bạn tự biên dịch bootloader thì cho biết phần mã nguồn của bootloader, nếu không phải là trường hợp đó thì bạn cho biết mã nguồn của chương trình ứng dụng).
Thân, |
em đã tìm ra nguyên nhân rồi, cám ơn anh nhiều
|
Trích:
Code:
ASM: org 0x00 Thân, |
Cho em hỏi về TinyBootloader
1 Attachment(s)
bác nào cho em hỏi em đang làm mạch Tinybootloader để nạp cho con PIC6F877A nhưng khi em kiểm tra thì nó báo lỗi là ko tìm ra PIC
phần cứng thì em kiểm tra rồi ---> Ok phần firmware (file kèm theo) thì em làm như trên forum đã hướng dẫn nhưng khi kiểm tra thì nó báo lỗi Bác nào có firmware mà đã nạp OK rồi thì gởi lên forum cho em với (cả file ÁM và HEX nữa) các bác cứu em với!!! |
bạn kiểm tra phần kết nối chân reset lại thử xem. Mình cũng bị lỗi tương tự, cứ nghĩ dây cổng com mình mua là đã kết nối đủ các chân nhưng sau khi đo lại thì mới biết chân reset chưa được kết nối. Không biết là dây bị đứt hay là nó không nối hay sao ấy.
|
cảm ơn bạn mình đã kiểm tra rồi, mình cũng đã kết nối nhưng nó vẫn ko chịu nạp (?)
có bác nào có mạch đã chạy rồi thì kiểm tra thử phần firmware của mình thử chạy ko? Xin cảmv ơn! |
mạch của mình giống như mạch của bác ntc hướng dẫn
|
tui cung dung bootloader nap kha tot ,nhung ko hiu sao dang nap dc may lan thi chip nong ran ,sau do ko nhan dc chip nua :-?
|
Trích:
Thân, |
Chào bác falleaf, bác namqn và các huynh đài PIC bang.
Đệ cũng đang nghiên cứu về PIC và đặc biệt là Bootloader. Hiện tại đệ đang "mò mẫm" cách dùng Bootloader của CCSC nhưng chưa thành công. Có bậc huynh đài nào rành xin chỉ giáo giúp với. Cám ơn trước luôn.!!! Thấy trong bộ phần mềm CCSC có các EXAMPLE và DRIVER như ex_bootloader.c, ex_bootload.c, loader.c , bootloader.h, bootloader.c ...etc, đệ đã chỉnh sửa ex_bootloader.c để tạo một application đơn giản (nhấp nháy chân RB0 của P16f877) và cho dịch bằng MPLAB. Tuy dịch và mô phỏng (bằng Proteus) nhưng chẳng biết làm thế nào để dùng với Bootloader. Dùng TinyBld19 của bác F bày cho cũng không nhận được gì hết. (Các bác thông cảm, vẫn còn hơi 'silly' một tẹo) Bác cao thủ nào sành điệu về món này xin chỉ bảo giùm. Nếu có thời gian rảnh thì Pốt cụ thể (càng tỉ mỉ càng tốt... Hì hì.!!!) các vấn đề như ráp mạch như thế nào, dùng Bld19 hay phần mềm nào, nạp chương trình nào... Tóm lại là từ A đến Z. Mong sớm hồi âm từ các bác. Thanks for thousand times.!!! __________________________ PS: May be contact with me at Email: khangcodt@yahoo.com |
Trích:
Bạn có thể cho biết chip cụ thể, tôi sẽ dịch cho bạn một firmware với cấu hình mà bạn muốn, sau đó bạn nạp firmware đó vào chip bằng một mạch nạp bình thường nào đó. Như tôi đã có lần trả lời, CCS C tương thích với các bootloader, do đó không cần thao tác gì thêm đối với chương trình ứng dụng. Bạn cũng nên phân biệt bootloader và chương trình ứng dụng, không nhất thiết phải ghép code của bootloader và trình ứng dụng với nhau. Thân, |
Trước hết xin cảm ơn bác namqn đã dành thời gian "tiếp" em.
Điều đầu tiên mà em muốn nói là em bắt đầu thấy 'hơi bị ngại' làm việc với Asm. Trước khi tìm hiểu về PIC, em đã sử dụng họ 8051 (AT89C52) có thể nói là khá thạo, nhưng hoàn toàn bằng Asm. Từ khi sử dụng CCSC của MC PIC, em thấy công việc lập trình mà đặc biệt là gỡ rối chương trình trở nên dễ dàng hơn rất nhiều. Nếu dùng Asm thì việc gỡ rối rất phức tạp và đau đầu. Vả lại, trong CCSC có rất nhiều những hàm dựng sẵn (Built-In function) sử dụng rất hữu ích (riêng điều này hình như trong C của AT89 không có, còn với Asm thì phải tự mình làm lấy). Thêm vào đó, khi cụ thể hóa một giải thuật có độ phức tạp cao thì việc sử dụng ngôn ngữ bậc cao rõ ràng ưu thế hơn nhiều so với bậc thấp. (Nói phét vậy thôi chứ em cũng chưa làm chương trình nào quá phức tạp). Theo em hiểu như bác nói thì chỉ cần làm một Bootloader bình thường (nạp firmware vào chip, gắn vào mạch cứng của bác F rồi giao tiếp với TinyBld...), sau đó có thể dùng CCSC để xây dựng App, không cần khai báo gì thêm, dịch ra file HEX rồi lấy file đó nạp vào chíp qua Tinybld.(chíp em đang dùng là P16F887A). Còn nếu em hiểu không đúng thì em xin trình bày một số vấn đề sau để nếu có thể bác cố vấn cho em luôn. Em đọc trong direction của các ví dụ liên quan đến Bootloader trong phần EXAMPLE, thấy giao tiếp giữa PIC với PC sử dụng chương trình SIOW.exe (trong thư mục của CCSC). Nhưng một điều rất đáng tiếc là trong Help của CCSC lại không hề nói sử dụng như thế nào, và bản thân chương trình SIOW.exe thì không có Help. Nếu bác giúp em được vụ này thì không những em mà cả các đệ tử của PIC bang cũng được nhờ rất nhiều. Xin đa tạ.!!! _________________ PS: Maybe contact with me at Email: khangcodt@yahoo.com |
Trích:
Thân, |
Cảm ơn bác vì những thông tin và sự trả lời rất nhanh chóng.
Nhưng em thắc mắc một điều là tại sao Microchip lại không có P16F887A. Chính em nghiên cứu con này bằng Datasheet viết về 16F87XA của Microchip (download của Microchip). Bản thân những con của em cũng là 16F87XA theo đúng logo và seri của Microchip. Bác thử xem lại xem Tinybld có sử dụng cho 16F877A (nói chung là 16F87XA) được không? Cảm ơn bác.!!! _______________________ PS: Maybe contact with me at Email: khangcodt@yahoo.com |
Trích:
PIC16F87xA chạy tốt với Tiny Bootloader. Thân, |
Cảm ơn bác namqn rất nhiều
|
Em hỏi câu hơi ngớ ngẩn tí:theo như các pác đã nói trên vậy túm lại 1 câu gọn nhất là tiny bootloader là 1 phần cứng nhỏ cho phép ta vừa nạp vừa test được PIC mà không cần tháo ra cắm vào gì phải không ạ.Chỉ cần hết nối với PIC,PC;nạp và chạy thôi(đã thiết lập các thông số trước rồi).Chỉ vậy thôi phải không ??
Rổi còn phần cứng chỉ đơn giản như hình mà bác F đã đưa lên!! Xin hết |
Trích:
Phần cứng đó có thể là mạch thử nghiệm, mạch phát triển, hay mạch điều khiển thực của bạn. Vì firmware hơi thông minh một chút (nó chạy trên PIC mà), nên phần mềm chạy trên host PC cũng phải thông minh như nó (chính xác hơn là hiểu những gì firmware hiểu) để có thể giao tiếp với nhau. Đảm bảo được những yêu cầu đó thì có thể nói như bạn: chỉ cần kết nối mạch với host PC, dùng phần mềm giao tiếp để chuyển chương trình ứng dụng cần nạp vào PIC, và sau đó là chạy thử chương trình ứng dụng. Thân, |
Trích:
HICCC!!! LINK DIE RÙI ANH OI!! |
Trích:
Thân, |
Trích:
|
Các bài viết trong box đó sẽ bị ẩn đối với những người chưa đăng nhập. Bạn đăng nhập thì sẽ mở được bài viết bằng link đó. Đôi khi bạn phải đăng nhập lại vì một lý do nào đó. Trước khi thông báo lỗi kiểu như vậy bạn hãy kiểm tra lại xem bạn đang còn log in hay đã log out rồi. Tôi vừa kiểm tra link đó xong, nếu tôi chưa đăng nhập thì cũng nhận được thông báo lỗi, nhưng đăng nhập xong thì đọc được bài viết bình thường. Nó chỉ là cái link đến dsPIC tutorial 1 nằm trong box 'dsPIC'.
Thân, |
hiccc em ko biết tại sao nữa! đã đăng nhập rùi nhưng click vào link
http://www.picvietnam.com/forum//showthread.php?t=333 hay những link tương tự điều bị báo lỗi: Invalid Ðề tài specified. If you followed a valid link, please notify the administrator |
Múi giờ GMT. Hiện tại là 12:57 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam