PDA

View Full Version : Bootloader cho PIC18F4680


namqn
26-12-2008, 06:08 PM
Một bạn gửi email nhờ tôi biên dịch giúp bootloader cho PIC18F4680, với các cấu hình sau:

- Thạch anh 20 MHz, baudrate = 9600 bps, và các từ cấu hình được dùng cho firmware dưới đây:
CONFIG OSC = HS, FCMEN = OFF, IESO = OFF
CONFIG PWRT = ON, BOREN = OFF, BORV = 2
CONFIG WDT = OFF, WDTPS = 64
CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF
CONFIG STVREN = ON, LVP = OFF, DEBUG = OFF, XINST = OFF, BBSIZ = 1024

- Thạch anh 10 MHz, dùng PLL, baudrate = 9600 bps, và các từ cấu hình được dùng cho firmware dưới đây:
CONFIG OSC = HSPLL, FCMEN = OFF, IESO = OFF
CONFIG PWRT = ON, BOREN = OFF, BORV = 2
CONFIG WDT = OFF, WDTPS = 64
CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF
CONFIG STVREN = ON, LVP = OFF, DEBUG = OFF, XINST = OFF, BBSIZ = 1024

Như thường lệ, tôi cung cấp các tập tin .hex của các firmware ở đây. Chú ý rằng bạn phải dùng phiên bản 1.9.5 trở về sau của Tiny Bootloader, và thêm dòng sau vào tập tin "piccodes.ini" (nằm trong thư mục mà bạn đã giải nén Tiny Bootloader):
$50, C, 18F 2680/4680, $10000, $400,

Tôi chưa có thời gian thử nghiệm firmware mới này trên phần cứng, do đó mong các bạn phản hồi kết quả thử nghiệm ở luồng này.

Thân,

longtu
27-12-2008, 06:29 AM
Rất cam on anh Nam, em sẽ thử và cho anh biết kết quả liền

Thân chào anh.

longtu
27-12-2008, 08:47 AM
Cho em hoi them: em thấy trong CCS cung có bootloader, anh dã dùng nó chua ạ? có diều gì phải luu ý khi dung no khong anh?

namqn
27-12-2008, 06:44 PM
Cho em hoi them: em thấy trong CCS cung có bootloader, anh dã dùng nó chua ạ? có diều gì phải luu ý khi dung no khong anh?
Tôi không dùng CCS C, nên cũng chưa thử qua các ví dụ của CCS C. Tuy nhiên, tôi tin rằng firmware bootloader của CCS C sẽ chiếm nhiều không gian bộ nhớ chương trình hơn so với Tiny Bootloader. Trong đa số các vi điều khiển dùng kiến trúc Harvard, không gian bộ nhớ chương trình là một tài nguyên quý giá cần được sử dụng một cách hợp lý.

Thân,

longtu
29-12-2008, 04:15 PM
Gui A. Nam:
Em cảm ơn anh nhiều, nhờ có anh mà em có thể sử dụng được Bootloader. Giờ em cũng có thể tự cấu hình cho PIC được rồi anh ạ.

Em hoi thêm anh: Do vừa sử dụng cổng COM để giao tiếp với máy tính, vừa dùng cổng COM để sử dụng Bootloader, chính vì vậy mình không thể dùng các chân kiểm soát dữ liệu của công COM(RTS,DTR) để làm việc Reset được. Em có 1 cách, nó hơi rườm rà, nhưng em cũng muốn chia sẽ để các ban khác tham khảo:

longtu
29-12-2008, 04:31 PM
Do khong thể sử dung dong thời chuong trỉnh giao tiep voi máy tinh và chuong trinh Tiny Bootloader dược, nen em lam như sau:
Mở chuong trình giao tiep vói máy tính lên, gửi lênh "Reset PIc"(nêu viet bang CCS thì dung lenh sau: Reset_cpu()) sau đó nhanh tay tat chuong trình giao tiep voi máy tính đi, mở chuong trình Tiny Bootloader len và nạp chuong trình. Tấc nhiên có thể dùng vòng lặp(giá trị của vòng lặp này phải lưu trong eeprom-->dể không mất khi Reset lại PIC,) để tang thời số lần gọi lenh Reset
Em da viết chuong trình này, thấy rat hiệu quả, làn nào cung nhận ra PIc, nap tốt, có diều nó hoi rườm ra như vậy.

void upload_program()
{
int8 read_value;
read_value=read_eeprom (0x01);//đọc giá trị vòng lạp đã lưu trong eeprom
if(read_value!=0x00)//so sánh giá trị này với 0x00
{
read_value--;//giảm giá trị vòng lặp đi
write_eeprom(0x01,read_value); //ghi lai vào eeprom
printf("\r\n Remaining %d times \r\n",read_value);//hien ra man hình số lan Reset
//còn lại
reset_cpu(); //Reset Pic
}
if(read_value==0)
printf("\r\n Start Program \r\n");//thuc hien chuong trinh ung dung.
}

longtu
29-12-2008, 04:36 PM
Anh Nam có cách nào khác không anh?
Ngoài Bootloader ra, còn cách nào khác cũng tương tự như nó dể nạp chuong trình cho PIC khong anh?

namqn
29-12-2008, 05:22 PM
Gui A. Nam:
Em cảm ơn anh nhiều, nhờ có anh mà em có thể sử dụng được Bootloader. Giờ em cũng có thể tự cấu hình cho PIC được rồi anh ạ.

Em hoi thêm anh: Do vừa sử dụng cổng COM để giao tiếp với máy tính, vừa dùng cổng COM để sử dụng Bootloader, chính vì vậy mình không thể dùng các chân kiểm soát dữ liệu của công COM(RTS,DTR) để làm việc Reset được. Em có 1 cách, nó hơi rườm rà, nhưng em cũng muốn chia sẽ để các ban khác tham khảo:
Nếu bạn không dùng các biện pháp bắt tay bằng phần cứng (hardware handshake) thì tôi cho rằng bạn vẫn có thể dùng cách reset PIC bằng chân RTS. Khi đó, việc bắt tay vẫn có thể được thực hiện kiểu Xon/Xoff hoặc bằng phần mềm.

Cách làm của bạn cũng tốt, tôi không cho rằng nó rườm rà lắm, mặc dù nếu là tôi thì tôi sẽ viết đơn giản hơn nữa. Cách của tôi như sau: Chương trình ứng dụng nhận thông điệp cần reset PIC, và thực hiện reset PIC. Sau đó bootloader sẽ được thực thi, với thời gian chờ khá dài, đủ để bạn mở phần mềm Tiny Bootloader và kết nối với PIC. Nếu không thực hiện được việc kết nối với PIC thì chương trình ứng dụng sẽ chạy, khi đó tôi chỉ cần gửi lại thông điệp yêu cầu reset PIC, và quá trình được lặp lại.

Thân,

longtu
30-12-2008, 04:36 PM
Anh cho em hoi:
Vi trong file bootloader ta cung khai báo cấu hình, trong chuong trinh ung dung ta cung khai báo cấu hình, tại sao lại cần như vậy anh? Nếu ta khai báo cấu hình khác nhau thì có anh hưởng gì không?

namqn
30-12-2008, 06:58 PM
Anh cho em hoi:
Vi trong file bootloader ta cung khai báo cấu hình, trong chuong trinh ung dung ta cung khai báo cấu hình, tại sao lại cần như vậy anh? Nếu ta khai báo cấu hình khác nhau thì có anh hưởng gì không?
Bootloader và chương trình ứng dụng là các chương trình độc lập (theo cách chúng ta đang dùng với Tiny Bootloader), do đó đương nhiên đều cần được đặt cấu hình.

Bạn thử xem xét một ví dụ cụ thể nhé: Bootloader dùng cấu hình thạch anh 10 MHz (HS), còn chương trình ứng dụng dùng cấu hình thạch anh 4 MHz (XT).

Điều gì sẽ xảy ra nếu sau khi nạp chương trình ứng dụng, các từ cấu hình được thay đổi thành giá trị ứng với chương trình ứng dụng? Ngược lại, nếu sau khi nạp chương trình ứng dụng, các từ cấu hình vẫn mang giá trị ứng với bootloader, thì có vấn đề gì không?

Thân,

longtu
08-01-2009, 10:36 PM
Minh vừa nghiên vưà xong cach dùng Bootloader trong CCS. Nếu bạn nào gặp khó khăn khi muốn dùng Bootloader trong CCS thì cho mình hay nhé.

tranpic
13-01-2009, 09:44 AM
Minh vừa nghiên vưà xong cach dùng Bootloader trong CCS. Nếu bạn nào gặp khó khăn khi muốn dùng Bootloader trong CCS thì cho mình hay nhé.

bạn có thể viết vài hướng dẫn về dùng bootloader trong ccs ko

longtu
13-01-2009, 12:32 PM
Về mục đích sử dụng thì nó tương tự như Tiny Bootloader. Một điều đặc biệt là Bootloader CCS có thể đặt cuối bộ nhớ Flash(giống Tiny Bootloader) và vừa có thể đặt đầu bộ nhớ Flash.
Ngay sau khi bạn tạo 1 project mớii trong CCS sẽ xuất hiện môt hộp thoại PIC Wizard, khung ben tay trái bạn chọn Bootloader, khung ben phai bạn chon Use Bootloader, sau đó bạn có thể chọn Select Bootloader Location...

Ban tham khao thêm trong CCS: bootloader.h, ex_bootloader.c nhé.
Bạn nên tìm hiểu trước nhé, vì khi bạn hiểu rồi bạn mới cấu hình cho Pic cũng như sắp xếp lại dịa chỉ lưu chương trình Bootloader sao cho nó đở tốn dung lượng bộ nhớ Flash nhất.

Bạn cứ tìm hiểu, thăc mác chổ nào thì cho mình hay.

Thân,