PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Tiny Bootloader (http://www.picvietnam.com/forum/forumdisplay.php?f=67)
-   -   Cần giúp về tiny bootloader cho dsPIC30F4011 (http://www.picvietnam.com/forum/showthread.php?t=1977)

iniesta 05-02-2008 08:11 PM

Cần giúp về tiny bootloader cho dsPIC30F4011
 
Tớ viết chương trình bằng C và dịch bằng MPLAB C30. Tớ mới biết đến khái niệm tiny bootloader và muốn thử dùng nó. Sau khi tham khảo nhiều nguồn, tớ có 1 số thắc mắc như sau :

1) Chúng ta biết là chương trình ứng dụng cần phải được sửa lại để không bị đè lên vùng nhớ của tiny bootloader. Việc sửa này, theo tài liệu hướng dẫn của Microchip, được thực hiện bằng cách modify lại file linker script ( .GLD file ) trước khi dịch ra file .hex. Tớ thắc mắc là chỉ như vậy là đủ sao ? Mình có cần chỉnh sửa thêm thắt gì ở file .c không ?

2) Trong thư mục của tiny bootloader ko thấy có chương trình tiny bootloader cho dsPIC30F4011. Tớ có thể kiếm nó ở đâu ? ( chương trình của bạn namqn post trên diễn đàn e rằng đã cũ và không dùng được với bản 1.9.5 ). Nếu được các bạn có thể viết hộ tớ : tớ dùng thạch anh ngoài 8 MHz và PLLx8.

Cám ơn mọi người !

namqn 05-02-2008 11:03 PM

Trích:

Nguyên văn bởi iniesta (Post 14250)
Tớ viết chương trình bằng C và dịch bằng MPLAB C30. Tớ mới biết đến khái niệm tiny bootloader và muốn thử dùng nó. Sau khi tham khảo nhiều nguồn, tớ có 1 số thắc mắc như sau :

1) Chúng ta biết là chương trình ứng dụng cần phải được sửa lại để không bị đè lên vùng nhớ của tiny bootloader. Việc sửa này, theo tài liệu hướng dẫn của Microchip, được thực hiện bằng cách modify lại file linker script ( .GLD file ) trước khi dịch ra file .hex. Tớ thắc mắc là chỉ như vậy là đủ sao ? Mình có cần chỉnh sửa thêm thắt gì ở file .c không ?

2) Trong thư mục của tiny bootloader ko thấy có chương trình tiny bootloader cho dsPIC30F4011. Tớ có thể kiếm nó ở đâu ? ( chương trình của bạn namqn post trên diễn đàn e rằng đã cũ và không dùng được với bản 1.9.5 ). Nếu được các bạn có thể viết hộ tớ : tớ dùng thạch anh ngoài 8 MHz và PLLx8.

Cám ơn mọi người !

1) Chỉ cần chỉnh lại linker script của chương trình ứng dụng, khi đó vùng code mà bootloader đã sử dụng sẽ không được trình biên dịch sử dụng cho bất kỳ đoạn code nào của chương trình ứng dụng. Như vậy là đủ. Bạn không cần thêm thắt gì ở file .c.

2) Tôi vừa kiểm tra lại Tiny Bootloader v1.9.5 với dsPIC30F4012, cả hai firmware cũ và mới (tôi vừa viết lại) đều không làm việc được với giao diện trên host PC (thực tế thì thao tác ghi đã hoàn tất, nhưng giao diện trên host PC xử lý thông tin sai, và khiến bootloader mất khả năng chạy ở lần reboot tiếp theo, và phần mềm trên host PC không nhận được thông tin phản hồi của firmware. Tiny Bootloader v1.9.1 làm việc tốt với hai firmware cũ và mới. Do đó, với dsPIC30F4011, bạn có thể dùng Tiny Bootloader v1.9.1.

Thân,

iniesta 08-02-2008 05:57 PM

Xin chúc các thành viên picvietnam một năm mới mạnh khỏe và hạnh phúc !

Trở lại vấn đề trên, tớ xin cảm ơn bạn namqn đã trả lời tớ một cách rõ ràng và chi tiết. Tuy nhiên tớ có 1 vài điều nữa cần làm rõ :

1) Trong file info đi kèm với thư mục tiny bootloader, có đoạn tác giả viết :
" ... Q: How to work with another PIC that it's not listed in icdpictypes.inc? A: You'll have to trick the PC application. Search among the list in icdpictypes.inc for a model that is similar to your PIC, and has THE SAME amount of Flash; replace the entry with your model, but keep the ID and max_flash unchanged. "
Như vậy nghĩa là mình hoàn toàn có thể dùng firmware tiny bootloader của dsPIC30F4012 để nạp cho dsPIC30F4011 ( Bởi 2 loại dsPIC này rất giống nhau và có cùng dung lượng bộ nhớ Flash ) ? Nếu dùng được thì có cần chú ý thêm gì không ?

2) Tớ vẫn chưa hiểu lắm về việc reset trong quá trình nạp bằng tiny bootloader. Theo tớ hiểu thì có 3 loại reset :
Một là reset bằng tay dùng nút bấm.
Hai là reset bằng phần cứng dùng chân RTS của cổng COM của PC.
Ba là reset bằng phần mềm bằng một " list of codes to send first. "
Ở loại reset thứ nhất, do chương trình ứng dụng của tớ cần liên tục gửi dữ liệu từ dsPIC lên PC nên các bước nạp sẽ là : bấm nút reset -> click WriteFlash -> thả nút reset ra. Vậy là xong ?
Ở 2 loại sau thì việc reset được thực hiện tự động ? Quá trình nạp chỉ cần 1 thao tác duy nhất là click WriteFlash ?
Ở loại thứ hai, giả sử như tớ muốn dùng chân RTS của cổng COM của PC vào 1 mục đích khác, vd như là dùng làm tín hiệu bắt tay để điều khiển luồng dữ liệu gửi từ dsPIC lên PC, thì tớ phải làm sao ?
Ở loại thứ ba, codes mà mình gửi xuống là gì cũng được ? các bạn có thể cho tớ 1 ví dụ ?

namqn 08-02-2008 07:54 PM

Trích:

Nguyên văn bởi iniesta (Post 14256)
Xin chúc các thành viên picvietnam một năm mới mạnh khỏe và hạnh phúc !

Trở lại vấn đề trên, tớ xin cảm ơn bạn namqn đã trả lời tớ một cách rõ ràng và chi tiết. Tuy nhiên tớ có 1 vài điều nữa cần làm rõ :

1) Trong file info đi kèm với thư mục tiny bootloader, có đoạn tác giả viết :
" ... Q: How to work with another PIC that it's not listed in icdpictypes.inc? A: You'll have to trick the PC application. Search among the list in icdpictypes.inc for a model that is similar to your PIC, and has THE SAME amount of Flash; replace the entry with your model, but keep the ID and max_flash unchanged. "
Như vậy nghĩa là mình hoàn toàn có thể dùng firmware tiny bootloader của dsPIC30F4012 để nạp cho dsPIC30F4011 ( Bởi 2 loại dsPIC này rất giống nhau và có cùng dung lượng bộ nhớ Flash ) ? Nếu dùng được thì có cần chú ý thêm gì không ?

2) Tớ vẫn chưa hiểu lắm về việc reset trong quá trình nạp bằng tiny bootloader. Theo tớ hiểu thì có 3 loại reset :
Một là reset bằng tay dùng nút bấm.
Hai là reset bằng phần cứng dùng chân RTS của cổng COM của PC.
Ba là reset bằng phần mềm bằng một " list of codes to send first. "
Ở loại reset thứ nhất, do chương trình ứng dụng của tớ cần liên tục gửi dữ liệu từ dsPIC lên PC nên các bước nạp sẽ là : bấm nút reset -> click WriteFlash -> thả nút reset ra. Vậy là xong ?
Ở 2 loại sau thì việc reset được thực hiện tự động ? Quá trình nạp chỉ cần 1 thao tác duy nhất là click WriteFlash ?
Ở loại thứ hai, giả sử như tớ muốn dùng chân RTS của cổng COM của PC vào 1 mục đích khác, vd như là dùng làm tín hiệu bắt tay để điều khiển luồng dữ liệu gửi từ dsPIC lên PC, thì tớ phải làm sao ?
Ở loại thứ ba, codes mà mình gửi xuống là gì cũng được ? các bạn có thể cho tớ 1 ví dụ ?

1) Tôi cũng đã theo tinh thần đó mà viết các firmware cho các PIC, dsPIC khác. Như post trên của tôi đã nói, tôi thử nghiệm với dsPIC30F4012, và kết luận cho dsPIC30F4011, nghĩa là với Tiny Bootloader thì 4011 và 4012 chẳng có gì khác nhau (phần mềm trên host PC của Tiny Bootloader sẽ nhận diện chip là 4011/4012). Bạn không cần làm thêm gì cả.

2) Ở cách reset thứ nhất (bằng tay, dùng nút nhấn), bạn nhấn nút reset rồi buông ra để chip chạy đoạn chương trình của bootloader, khi đó firmware của bootloader sẽ trao đổi thông tin với phần mềm trên host PC để thực hiện việc nạp chương trình. Sau khi nạp xong, bootloader (firmware) sẽ giao quyền điều khiển cho chương trình ứng dụng vừa được nạp vào.

Ở loại thứ hai, phần cứng của bạn đã được nối vào mạch reset của PIC/dsPIC, do đó bạn không nên dùng nó cho mục đích khác, trừ khi bạn sửa lại phần cứng để khi chương trình ứng dụng chạy thì nó có thể vô hiệu hóa động tác reset bằng chân RTS của cổng COM. Khi đó, thông thường bạn tốn thêm 1 chân của PIC/dsPIC, mà việc hiện thực có thể cần một vài kỹ xảo. Nếu bạn muốn thực hiện nó thì tôi có thể nêu ý tưởng (bản thân tôi không thích làm như vậy): khi bootloader chạy thì một chân của PIC/dsPIC sẽ cho phép chân RTS của cổng COM tác động lên mạch reset của PIC, nhưng khi chương trình ứng dụng chạy thì chân đó của PIC/dsPIC sẽ không cho phép chân RTS của cổng COM tác động lên mạch reset của PIC nữa.

Ở loại thứ ba, bạn tự quy định danh sách code đó, và sửa lại firmware một cách tương ứng. Khi đó, nếu firmware nhận được chuỗi code như vậy thì nó sẽ thực hiện reset mềm PIC/dsPIC (bằng lệnh RESET trong tập lệnh của PIC/dsPIC).

Thân,

iniesta 10-02-2008 12:34 AM

Cám ơn anh Nam ! Nhờ sự hướng dẫn của anh mà em đã dùng được tiny bootloader.

Nhưng khi em dùng Hyper Terminal ( chương trình có sẵn của Windows ) để giao tiếp PC với dsPIC thì nảy sinh một vấn đề như sau :
Bất kể mình chọn flow control là gì ( None, Hardware hay Xon/Xoff ) thì khi thiết lập xong nó cũng tự động set chân RTS lên mức cao ( và cứ để nguyên như thế trong quá trình giao tiếp ). Như vậy, theo mạch nguyên lý của tiny bootloader, điều này đồng nghĩa với chân MCLR của dsPIC sẽ bị kéo xuống GND ( mức logic 0 ) và do đó dsPIC sẽ không làm việc được ?
Chẳng lẽ lại phải dùng một cái khóa gạt ở chân MCLR của dsPIC để giúp phân biệt quá trình nạp với quá trình làm việc bình thường của dsPIC ?

namqn 11-02-2008 07:58 PM

Trích:

Nguyên văn bởi iniesta (Post 14262)
Cám ơn anh Nam ! Nhờ sự hướng dẫn của anh mà em đã dùng được tiny bootloader.

Nhưng khi em dùng Hyper Terminal ( chương trình có sẵn của Windows ) để giao tiếp PC với dsPIC thì nảy sinh một vấn đề như sau :
Bất kể mình chọn flow control là gì ( None, Hardware hay Xon/Xoff ) thì khi thiết lập xong nó cũng tự động set chân RTS lên mức cao ( và cứ để nguyên như thế trong quá trình giao tiếp ). Như vậy, theo mạch nguyên lý của tiny bootloader, điều này đồng nghĩa với chân MCLR của dsPIC sẽ bị kéo xuống GND ( mức logic 0 ) và do đó dsPIC sẽ không làm việc được ?
Chẳng lẽ lại phải dùng một cái khóa gạt ở chân MCLR của dsPIC để giúp phân biệt quá trình nạp với quá trình làm việc bình thường của dsPIC ?

Bạn có thể dùng Terminal của Tiny Bootloader, khi đó bạn có thể chọn trạng thái cho chân RTS sau khi nạp xong chương trình ứng dụng vào PIC/dsPIC. Với Tiny Bootloader v1.9.1, bạn check vào checkbox 'Reset PIC using RTS line' trong thẻ Options, và thử nghiệm với checkbox 'and RTS remains active'. Sau đó dùng thẻ Terminal để dùng terminal có sẵn của Tiny Bootloader. Với Tiny Bootloader v1.9.5 thì bạn thí nghiệm với checkbox 'RTS, DTR ON after open'.

Thân,

iniesta 18-03-2008 08:23 AM

Mình mới gặp phải 1 rắc rối với tiny bootloader, mong anh Nam và các bạn giúp đỡ :
Mình dùng tiny bootloader với PC ở nhà thì suôn sẻ, ngon lành, nhưng hễ mang đến PC ở trường là chịu chết, không dùng được. Ngoài ra, mình cũng không dùng được tiny bootloader với Laptop.
Cụ thể, lần đầu mình mang đến dùng với PC ở trường, mình nạp được đúng 1 lần rồi sau đó đơ luôn, không nạp được tiếp. Connect cổng COM thì ok, nhưng bị lỗi hoặc là "not found" hoặc là "sending unknown data". Thế là mình mang về nhà, test thử bằng PC ở nhà, thấy cũng ko được nữa. Mình đành phải nạp lại chương trình tiny bootloader cho dsPIC. Sau đó lại dùng ngon lành. Sự thật là cái PC ở trường khá cũ ( Pen III, thiết bị ngoại vi chập chờn, rỉ sét ).
Lần thứ 2 ( là vào buổi sáng hôm qua ), mình lại mang đến trường. Lần này cẩn thận hơn, mình thử trước với máy tính Laptop của bạn mình. Dù vậy, kết quả còn tệ hơn lần đầu : không nạp được lần nào. Ngay ở lần nạp đầu tiên tiny bootloader đã báo lỗi "not found" hoặc "sending unknown data". Connect cổng COM thì vẫn ok. Máy laptop mình dùng lúc đó là IBM T40. Lúc mang về nhà, mình cũng phải nạp lại chương trình tiny bootloader rồi mới dùng được tiếp.
Xin hỏi mọi người nguyên nhân gì dẫn đến hiện tượng trên ?
Cảm ơn nhiều !

namqn 18-03-2008 05:36 PM

Trích:

Nguyên văn bởi iniesta (Post 14972)
Mình mới gặp phải 1 rắc rối với tiny bootloader, mong anh Nam và các bạn giúp đỡ :
Mình dùng tiny bootloader với PC ở nhà thì suôn sẻ, ngon lành, nhưng hễ mang đến PC ở trường là chịu chết, không dùng được. Ngoài ra, mình cũng không dùng được tiny bootloader với Laptop.
Cụ thể, lần đầu mình mang đến dùng với PC ở trường, mình nạp được đúng 1 lần rồi sau đó đơ luôn, không nạp được tiếp. Connect cổng COM thì ok, nhưng bị lỗi hoặc là "not found" hoặc là "sending unknown data". Thế là mình mang về nhà, test thử bằng PC ở nhà, thấy cũng ko được nữa. Mình đành phải nạp lại chương trình tiny bootloader cho dsPIC. Sau đó lại dùng ngon lành. Sự thật là cái PC ở trường khá cũ ( Pen III, thiết bị ngoại vi chập chờn, rỉ sét ).
Lần thứ 2 ( là vào buổi sáng hôm qua ), mình lại mang đến trường. Lần này cẩn thận hơn, mình thử trước với máy tính Laptop của bạn mình. Dù vậy, kết quả còn tệ hơn lần đầu : không nạp được lần nào. Ngay ở lần nạp đầu tiên tiny bootloader đã báo lỗi "not found" hoặc "sending unknown data". Connect cổng COM thì vẫn ok. Máy laptop mình dùng lúc đó là IBM T40. Lúc mang về nhà, mình cũng phải nạp lại chương trình tiny bootloader rồi mới dùng được tiếp.
Xin hỏi mọi người nguyên nhân gì dẫn đến hiện tượng trên ?
Cảm ơn nhiều !

Không rõ bạn hiện thực mạch reset ra sao.

Với lỗi chỉ nạp được 1 lần duy nhất rồi phải nạp lại firmware cho bootloader, khả năng rất cao là bạn viết code không tốt, dẫn đến bootloader bị ghi đè.

Thân,

LeDuc 19-03-2008 04:41 PM

Anh Nam ơi cho em hỏi ,sao tiny bld 195 nhận được pic 16f887 nhưng khi nạp nó lại báo là kô thể nạp được .
Em đã chỉnh lại firmware cho 16f887 sử dụng thạch anh 20M ,baud 115200 , như trong bào TUT của anh Chính , nhưng nó chỉ nhận diện được chíp , còn nạp thì kô được ..Mong anh cho lời khuyên phải chỉnh sửa như thế nào ...
Em đang rất cần, mong anh , và mọi người giúp đỡ .
Thanks for all !

namqn 19-03-2008 06:52 PM

Trích:

Nguyên văn bởi LeDuc (Post 15012)
Anh Nam ơi cho em hỏi ,sao tiny bld 195 nhận được pic 16f887 nhưng khi nạp nó lại báo là kô thể nạp được .
Em đã chỉnh lại firmware cho 16f887 sử dụng thạch anh 20M ,baud 115200 , như trong bào TUT của anh Chính , nhưng nó chỉ nhận diện được chíp , còn nạp thì kô được ..Mong anh cho lời khuyên phải chỉnh sửa như thế nào ...
Em đang rất cần, mong anh , và mọi người giúp đỡ .
Thanks for all !

Tôi chỉ có thể xác nhận một firmware do tôi post lên ở luồng sau là làm việc tốt:
http://www.picvietnam.com/forum/showthread.php?t=830

Trong trường hợp bạn cần tốc độ baud và/hoặc tần số thạch anh khác, tôi có thể dịch lại firmware cho bạn. Việc hướng dẫn chỉnh sửa firmware như thế nào mất khá nhiều thời gian, và hiện nay tôi khá bận (trong khi dịch lại firmware chỉ mất vài phút).

Thân,

LeDuc 21-03-2008 11:42 AM

Trích:

Nguyên văn bởi namqn (Post 15015)
Tôi chỉ có thể xác nhận một firmware do tôi post lên ở luồng sau là làm việc tốt:
http://www.picvietnam.com/forum/showthread.php?t=830

Trong trường hợp bạn cần tốc độ baud và/hoặc tần số thạch anh khác, tôi có thể dịch lại firmware cho bạn. Việc hướng dẫn chỉnh sửa firmware như thế nào mất khá nhiều thời gian, và hiện nay tôi khá bận (trong khi dịch lại firmware chỉ mất vài phút).

Thân,

Anh dịch lại giúp em cái firmware cho 16f887 với tần số 20M va tốc độ baud 115200 .
Thanks for all !

namqn 21-03-2008 08:52 PM

2 Attachment(s)
Trích:

Nguyên văn bởi LeDuc (Post 15059)
Anh dịch lại giúp em cái firmware cho 16f887 với tần số 20M va tốc độ baud 115200 .
Thanks for all !

Bootloader được dịch với cấu hình như sau:
Code:

        __CONFIG  _CONFIG1, _HS_OSC & _FCMEN_OFF & _IESO_OFF & _CP_OFF & _WDT_OFF & _BOR_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF
        __CONFIG  _CONFIG2, _WRT_OFF & _BOR21V

Đính kèm là firmware bootloader, và hình chụp cho thấy bootloader chạy tốt.

Thân,

LeDuc 21-03-2008 11:50 PM

Trích:

Nguyên văn bởi namqn (Post 15070)
Bootloader được dịch với cấu hình như sau:
Code:

        __CONFIG  _CONFIG1, _HS_OSC & _FCMEN_OFF & _IESO_OFF & _CP_OFF & _WDT_OFF & _BOR_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF
        __CONFIG  _CONFIG2, _WRT_OFF & _BOR21V

Đính kèm là firmware bootloader, và hình chụp cho thấy bootloader chạy tốt.

Thân,

Cảm ơn anh Nam , em đã nạp được rồi . Khi nào anh rãnh chỉ giúp em cách sửa firmware cho tiny nha . Em cũng đã sừa lại nhưng nó chỉ nhận được chip thôi, khi nạp thì vẫn can not write ... hic hic..
Thanks for all !

falleaf 22-03-2008 01:15 PM

Trích:

Nguyên văn bởi LeDuc (Post 15077)
Cảm ơn anh Nam , em đã nạp được rồi . Khi nào anh rãnh chỉ giúp em cách sửa firmware cho tiny nha . Em cũng đã sừa lại nhưng nó chỉ nhận được chip thôi, khi nạp thì vẫn can not write ... hic hic..
Thanks for all !

Bạn cấu hình chip như thế nào, bạn hãy post lên đây. Cách sửa code không có gì khó khăn cả, chỉ cần sửa vài dòng của nó thôi, nếu bạn hiểu lập trình MPASM thì chắc chắn là bạn sẽ hiểu được cách cấu hình rất dễ dàng.

Chúc vui

LeDuc 22-03-2008 02:17 PM

Trích:

Nguyên văn bởi falleaf (Post 15088)
Bạn cấu hình chip như thế nào, bạn hãy post lên đây. Cách sửa code không có gì khó khăn cả, chỉ cần sửa vài dòng của nó thôi, nếu bạn hiểu lập trình MPASM thì chắc chắn là bạn sẽ hiểu được cách cấu hình rất dễ dàng.

Chúc vui

em sửa lại được rồi anh à . lúc đầu em khai báo cấu hình như sau :
Code:

  __CONFIG  _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
Còn phần icdpictypes em thêm vào như sau :
Code:

IFDEF __16F887
                #include "p16f887.inc"
IdTypePIC = 0x36               
                #define max_flash 0x2000
        ENDIF

chỉ có thể nhận diện đươc chip mà ko nạp được .
Em đã sửa lại cấu hình giống như anh Nam và đã chạy được rồi với cấu hình như sau :
Code:

__CONFIG  _CONFIG1, _HS_OSC & _FCMEN_OFF & _IESO_OFF & _CP_OFF & _WDT_OFF &  _  BOR_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF
        __CONFIG  _CONFIG2, _WRT_OFF & _BOR21V

Lần này thì đã nạp được rồi .. Cảm ơn các anh
Nhưng em vẫn chưa hiểu phần khai báo cấu hình , bình thường khi viết chương trình em cũng khái báo 1 số cái như HS ,WDT, LVP,DEBUG . sao cái phần này lại khai báo nhiều quá , các anh có thể chỉ dẫn giúp em đưỡc ko ?

Thanks for all !

LeDuc 22-03-2008 02:28 PM

Trích:

Nguyên văn bởi falleaf (Post 15088)
Bạn cấu hình chip như thế nào, bạn hãy post lên đây. Cách sửa code không có gì khó khăn cả, chỉ cần sửa vài dòng của nó thôi, nếu bạn hiểu lập trình MPASM thì chắc chắn là bạn sẽ hiểu được cách cấu hình rất dễ dàng.

Chúc vui

Em đã viết được rồi , rất cảm ơn các anh ...
Thanks for all !
A` cho em hòi cái này tí với tần số thạch anh 20M em khái báo như thế nào mới đúng vậy ? giải thích giúp em tí nha :
movlw xtal/1000000+1 ; for 20MHz => 11 => 1second
; cái này là em sửa giống như trong bài TUT của anh Chính báo cáo về tiny boloader ..

falleaf 22-03-2008 02:32 PM

Bạn thử nhìn vào cấu hình của bạn, đừng tìm nguyên nhân tại sao lại khác nhau, mà hãy thử đặt câu hỏi: "Cái khác nhau đấy là cái gì?"

Hy vọng bài trả lời của bạn bạn sẽ có thể nói cái khác nhau giữa cấu hình của anh Nam và cấu hình của bạn là cái gì. Nó "hoạt động" như thế nào.

Chúc vui

quoc_thaibk 23-07-2008 01:54 AM

Trích:

Nguyên văn bởi namqn (Post 14252)
1) Chỉ cần chỉnh lại linker script của chương trình ứng dụng, khi đó vùng code mà bootloader đã sử dụng sẽ không được trình biên dịch sử dụng cho bất kỳ đoạn code nào của chương trình ứng dụng. Như vậy là đủ. Bạn không cần thêm thắt gì ở file .c.
Thân,

Việc chỉnh sửa linker Script của của chương trình ứng dụng viết bằng C làm thế nào.
Anh có thể viết hoặc post hướng dẫn rõ hơn không em có mở file GLD của p30f4011 (đã có sao lưu cái gốc) vì em có đọc 1 hướng dẫn của microchip về bootloader nhưng không phải là tiny bootloader.

Cách làm việc của 2 cái khác nhau

Trên trang web của tiny bootloader có nói 1 câu như thế này:
"There are two types of bootloaders, some that require that the user reallocate his code and others that by themselves reallocate the first 4 instructions of the user program to another location and execute them when the bootloader exits"

Theo em dịch là:
Có 2 dạng bootloader:
1-Người dùng phải điều chỉnh lại chương trình của họ
2-Người dùng không phải điều chỉnh chương trình của họ mà tiny bootloader ở đây là dạng thứ 2

Nếu như em dịch đúng thì việc điều chỉnh GLD ở đây có ý nghĩa gì?
-->để chương trình dịch ra không lấn vào vùng của Bootloader --> Vậy Cấu hình thông tin gì trong GLD?


Code:

MEMORY
{
  data  (a!xr) : ORIGIN = 0x800,    LENGTH = 2048
  program (xr) : ORIGIN = 0x100,  LENGTH = ((16K * 2) - 0x100)

Cấu hình thông tin LENGTH của Program chăng ?

Em đã config lại bootloader của tiny cho 30f4011 chạy FRC_PLL16 baud 19200
Đã kết nối với chương trình tinybootloader được.
Nhưng nạp vào lại báo lỗi:

Code:

  Could not write
  ERROR!


namqn 23-07-2008 02:45 AM

Trích:

There are two types of bootloaders, some that require that the user reallocate his code and others that by themselves reallocate the first 4 instructions of the user program to another location and execute them when the bootloader exits
Đoạn văn bản trên nên được dịch như sau:
Trích:

Có hai loại bootloader, một loại yêu cầu người dùng phải tái định vị code của anh ta, và loại kia tự tái định vị 4 lệnh đầu tiên của chương trình ứng dụng của người dùng vào một vị trí khác và thực thi chúng (4 lệnh đã được tái định vị) khi bootloader thoát.
Tiny Bootloader thuộc loại sau. Do đó tôi mới nói rằng bạn không cần phải chỉnh sửa gì trong code, mà chỉ phải thiết lập lại linker script để tránh việc bootloader bị ghi đè lên.

Các lệnh của dsPIC dùng 2 đơn vị PC. Do đó, nếu chương trình bootloader chiếm 100 lệnh thì linker script của bạn phải dành ra 2*100 địa chỉ cho bootloader. Làm chính xác việc này thì bạn sẽ mô tả phần program trong linker script như sau (cho dsPIC30F4011 mà bạn đang nói đến):
Code:

program (xr) : ORIGIN = 0x100,    LENGTH = ((16K * 2) - 100 * 2)
Lỗi bạn đang gặp cho thấy bạn chưa ghi vào dsPIC được, hoặc ghi vào được nhưng phần mềm trên host PC không nhận được thông tin phản hồi như vậy.

Vì bạn muốn dùng bộ dao động nội của dsPIC, tôi muốn hỏi bạn đã đọc luồng này chưa:
http://www.picvietnam.com/forum/showthread.php?t=326

Thân,

ttai 06-11-2014 01:43 AM

Chào anh Nam và mọi người,

Mình dùng dspic30f4011, xtal 7.3728Mhz, PLL16 và giao tiếp USB2COM với baud 115200.
Nhận bootloader OK, nạp OK nhưng sau khi nạp xong check lại PIC thì failed.
Chương trình chính mình dùng XC16 để biên dịch. Có lẽ nó ghi đè bootloader rồi?
Làm cách nào để biết? Mình đã thay đổi file linker script của dspic 4011 như post bên trên của anh Nam, biên dịch lại và nạp, kết quả cũng y chang.
Nhờ anh Nam giúp xem là chỗ nào không đúng?

P/S: Cái firmware bootloader gốc của tác giả thiệt là bó tay luôn. UART trong chú thích thì là 2 nhưng trong lệnh ASM thì là 1, lại còn là chân alternate UART1. Bạn nào dùng cái này sẽ không dịch đc bootloader. Công thức chỗ tính BRG cũng sai.
tinybootloader các bản trước hễ chạy trên máy mình là treo ngay vòng check PIC, chả hiểu sao. May quá tải thử bản mới nhất đang beta lại ổn định và nạp được, mỗi tội nạp xong mất bld.

ttai 06-11-2014 06:53 PM

Bổ sung post trước.

Mình đã chỉnh linker script để giới hạn vùng program memory lại. Nhưng cũng chẳng mấy khác (sau khi so sánh file hex) vì chương trình mình dùng để test rất ngắn như sau:

Code:

#include <xc.h>
#include <libpic30.h>
 
// Configuration settings
_FOSC(CSW_FSCM_OFF & XT_PLL16); // Fosc=16x7.5MHz, i.e. 30 MIPS
_FWDT(WDT_OFF);                  // Watchdog timer off
_FBORPOR(PWRT_OFF & MCLR_DIS);              // Disable reset pin
_FGS(GWRP_OFF & CODE_PROT_OFF);
_FICD(PGD);
 
int main(void)
{
    // Make RD0 a digital output
    _TRISE0 = 0;
    _TRISE1=0;
   
    // Blink LED on RD0
    while(1)
    {
        _LATE0 = 1;
        _LATE1=0;
        __delay32(15000000);
        _LATE0 = 0;
        _LATE1 = 1;
        __delay32(15000000);
    }
}

File Hex sau khi biên dịch bằng XC16 có cấu trúc sau:

Code:

Line  Address  PSV Address  Data Opcode  Label                Disassembly             

    1    0000        ----    ---- 040100          goto 0x000100                         
    2    0002        ----    ---- 000000          nop                 
    3    .................................................
    .......................................................
  129    0100        ----    ---- 20800F          mov.w #0x800,w15                     
  130    0102        ----    ---- 20FF0E          mov.w #0xff0,w14                     
  131    0104        ----    ---- 88010E          mov.w w14,0x0020                     
  132    0106        ----    ---- 000000          nop                                   
  133    0108        ----    ---- 200000          mov.w #0x0,w0                         
  134    010A        ----    ---- E00000          cp0.w w0                             
  135    010C        ----    ---- 320002          bra z, 0x000112                       
  136    010E        ----    ---- 200100          mov.w #0x10,w0                       
  137    0110        ----    ---- 880220          mov.w w0,0x0044                       
  138    0112        ----    ---- 07000C          rcall 0x00012c                       
  139    0114        ----    ---- 201D60          mov.w #0x1d6,w0                       
  140    0116        ----    ---- 200001          mov.w #0x0,w1                         
  141    0118        ----    ---- 070011          rcall 0x00013c                       
  142    011A        ----    ---- 200000          mov.w #0x0,w0                         
  143    011C        ----    ---- E00000          cp0.w w0                             
  144    011E        ----    ---- 320002          bra z, 0x000124                       
  145    0120        ----    ---- 020000          call 0x000000                         
  146    0122        ----    ---- 000000          nop                                   
  147    0124        ----    ---- 02019E          call 0x00019e                         
  148    0126        ----    ---- 000000          nop                                   
  149    0128        ----    ---- DA4000          ReservedBR                           
  150    012A        ----    ---- FE0000          reset                                 
  151    012C        ----    ---- A94044          bclr.b 0x0044,#2                     
  152    012E        ----    ---- 200000          mov.w #0x0,w0                         
  153    0130        ----    ---- E00000          cp0.w w0                             
  154    0132        ----    ---- 320003          bra z, 0x00013a                       
  155    0134        ----    ---- 200000          mov.w #0x0,w0                         
  156    0136        ----    ---- 8801A0          mov.w w0,0x0034                       
  157    0138        ----    ---- A84044          bset.b 0x0044,#2                     
  158    013A        ----    ---- 060000          return                               
  159    013C        ----    ---- 880191          mov.w w1,0x0032                       
  160    013E        ----    ---- 780080          mov.w w0,w1                           
  161    0140        ----    ---- EB0000          clr.w w0                             
  162    0142        ----    ---- 370015          bra 0x00016e                         
  163    0144        ----    ---- 4080E2          add.w w1,#2,w1                       
  164    0146        ----    ---- B4A032          addc.w 0x0032                         
  165    0148        ----    ---- BA0191          tblrdl.w [w1],w3                     
  166    014A        ----    ---- 4080E2          add.w w1,#2,w1                       
  167    014C        ----    ---- B4A032          addc.w 0x0032                         
  168    014E        ----    ---- BA0291          tblrdl.w [w1],w5                     
  169    0150        ----    ---- 4080E2          add.w w1,#2,w1                       
  170    0152        ----    ---- B4A032          addc.w 0x0032                         
  171    0154        ----    ---- EB0200          clr.w w4                             
  172    0156        ----    ---- DE2B47          lsr w5,#7,w6                         
  173    0158        ----    ---- B207F5          and.w #0x7f,w5                       
  174    015A        ----    ---- E12C60          cp.b w5,#0                           
  175    015C        ----    ---- 3A0004          bra nz, 0x000166                     
  176    015E        ----    ---- EB5900          clr.b [w2++]                         
  177    0160        ----    ---- E90183          dec.w w3,w3                           
  178    0162        ----    ---- 3EFFFD          bra gtu, 0x00015e                     
  179    0164        ----    ---- 370004          bra 0x00016e                         
  180    0166        ----    ---- E12861          cp.w w5,#1                           
  181    0168        ----    ---- 320001          bra z, 0x00016c                       
  182    016A        ----    ---- EB8200          setm.w w4                             
  183    016C        ----    ---- 070004          rcall 0x000176                       
  184    016E        ----    ---- BA0111          tblrdl.w [w1],w2                     
  185    0170        ----    ---- E00002          cp0.w w2                             
  186    0172        ----    ---- 3AFFE8          bra nz, 0x000144                     
  187    0174        ----    ---- 060000          return                               
  188    0176        ----    ---- BA5931          tblrdl.b [w1++],[w2++]               
  189    0178        ----    ---- E90183          dec.w w3,w3                           
  190    017A        ----    ---- 32000C          bra z, 0x000194                       
  191    017C        ----    ---- BA5921          tblrdl.b [w1--],[w2++]               
  192    017E        ----    ---- E90183          dec.w w3,w3                           
  193    0180        ----    ---- 320008          bra z, 0x000192                       
  194    0182        ----    ---- E00004          cp0.w w4                             
  195    0184        ----    ---- 3A0003          bra nz, 0x00018c                     
  196    0186        ----    ---- 4080E2          add.w w1,#2,w1                       
  197    0188        ----    ---- B4A032          addc.w 0x0032                         
  198    018A        ----    ---- 37FFF5          bra 0x000176                         
  199    018C        ----    ---- BAD911          tblrdh.b [w1],[w2++]                 
  200    018E        ----    ---- E90183          dec.w w3,w3                           
  201    0190        ----    ---- 3AFFFA          bra nz, 0x000186                     
  202    0192        ----    ---- E80081          inc.w w1,w1                           
  203    0194        ----    ---- 4080E1          add.w w1,#1,w1                       
  204    0196        ----    ---- B4A032          addc.w 0x0032                         
  205    0198        ----    ---- 060000          return                               
  206    019A        ----    ---- DA4000          ReservedBR                           
  207    019C        ----    ---- FE0000          reset                                 
  208    019E        ----    ---- FA0000          lnk #0x0                             
  209    01A0        ----    ---- A902D8          bclr.b 0x02d8,#0                     
  210    01A2        ----    ---- A922D8          bclr.b 0x02d8,#1                     
  211    01A4        ----    ---- A802DC          bset.b 0x02dc,#0                     
  212    01A6        ----    ---- A922DC          bclr.b 0x02dc,#1                     
  213    01A8        ----    ---- 2E1C00          mov.w #0xe1c0,w0                     
  214    01AA        ----    ---- 200E41          mov.w #0xe4,w1                       
  215    01AC        ----    ---- 070006          rcall 0x0001ba                       
  216    01AE        ----    ---- A902DC          bclr.b 0x02dc,#0                     
  217    01B0        ----    ---- A822DC          bset.b 0x02dc,#1                     
  218    01B2        ----    ---- 2E1C00          mov.w #0xe1c0,w0                     
  219    01B4        ----    ---- 200E41          mov.w #0xe4,w1                       
  220    01B6        ----    ---- 070001          rcall 0x0001ba                       
  221    01B8        ----    ---- 37FFF5          bra 0x0001a4                         
  222    01BA        ----    ---- B13FF0          sub.w w0,#0x3ff                       
  223    01BC        ----    ---- B18001          subb.w w1,#0x0                       
  224    01BE        ----    ---- 350006          bra lts, 0x0001cc                     
  225    01C0        ----    ---- 0903EE          repeat #1006                         
  226    01C2        ----    ---- 000000          nop                                   
  227    01C4        ----    ---- B13F40          sub.w w0,#0x3f4                       
  228    01C6        ----    ---- B18001          subb.w w1,#0x0                       
  229    01C8        ----    ---- 3DFFFB          bra ges, 0x0001c0                     
  230    01CA        ----    ---- B00010          add.w #0x1,w0                         
  231    01CC        ----    ---- B03F20          add.w #0x3f2,w0                       
  232    01CE        ----    ---- 350002          bra lts, 0x0001d4                     
  233    01D0        ----    ---- 098000          repeat w0                             
  234    01D2        ----    ---- 000000          nop                                   
  235    01D4        ----    ---- 060000          return                               
  236    01D6        ----    ---- 000000          nop     

Phần sau rỗng (nopr)

Sau khi nạp thành công file hex này dùng tiny bootloader, không thể check PIC được nữa. Mình đọc lại file hex trên chip, và nó như sau:

Code:

Line  Address  PSV Address  Data Opcode  Label                Disassembly             

    1    0000        ----    ---- 047F40          goto 0x007f40                         
    2    0002        ----    ---- 000000          nop                                   
.......................................................
..........................................................
 129    0100        ----    ---- 20800F          mov.w #0x800,w15                     
  130    0102        ----    ---- 20FF0E          mov.w #0xff0,w14                     
  131    0104        ----    ---- 88010E          mov.w w14,0x0020                     
  132    0106        ----    ---- 000000          nop                                   
  133    0108        ----    ---- 200000          mov.w #0x0,w0                         
  134    010A        ----    ---- E00000          cp0.w w0                             
  135    010C        ----    ---- 320002          bra z, 0x000112                       
  136    010E        ----    ---- 200100          mov.w #0x10,w0                       
  137    0110        ----    ---- 880220          mov.w w0,0x0044                       
  138    0112        ----    ---- 07000C          rcall 0x00012c                       
  139    0114        ----    ---- 201D60          mov.w #0x1d6,w0                       
  140    0116        ----    ---- 200001          mov.w #0x0,w1                         
  141    0118        ----    ---- 070011          rcall 0x00013c                       
  142    011A        ----    ---- 200000          mov.w #0x0,w0                         
  143    011C        ----    ---- E00000          cp0.w w0                             
  144    011E        ----    ---- 320002          bra z, 0x000124                       
  145    0120        ----    ---- 020000          call 0x000000                         
  146    0122        ----    ---- 000000          nop                                   
  147    0124        ----    ---- 02019E          call 0x00019e                         
  148    0126        ----    ---- 000000          nop                                   
  149    0128        ----    ---- DA4000          ReservedBR                           
  150    012A        ----    ---- FE0000          reset                                 
  151    012C        ----    ---- A94044          bclr.b 0x0044,#2                     
  152    012E        ----    ---- 200000          mov.w #0x0,w0                         
  153    0130        ----    ---- E00000          cp0.w w0                             
  154    0132        ----    ---- 320003          bra z, 0x00013a                       
  155    0134        ----    ---- 200000          mov.w #0x0,w0                         
  156    0136        ----    ---- 8801A0          mov.w w0,0x0034                       
  157    0138        ----    ---- A84044          bset.b 0x0044,#2                     
  158    013A        ----    ---- 060000          return                               
  159    013C        ----    ---- 880191          mov.w w1,0x0032                       
  160    013E        ----    ---- 780080          mov.w w0,w1                           
  161    0140        ----    ---- EB0000          clr.w w0                             
  162    0142        ----    ---- 370015          bra 0x00016e                         
  163    0144        ----    ---- 4080E2          add.w w1,#2,w1                       
  164    0146        ----    ---- B4A032          addc.w 0x0032                         
  165    0148        ----    ---- BA0191          tblrdl.w [w1],w3                     
  166    014A        ----    ---- 4080E2          add.w w1,#2,w1                       
  167    014C        ----    ---- B4A032          addc.w 0x0032                         
  168    014E        ----    ---- BA0291          tblrdl.w [w1],w5                     
  169    0150        ----    ---- 4080E2          add.w w1,#2,w1                       
  170    0152        ----    ---- B4A032          addc.w 0x0032                         
  171    0154        ----    ---- EB0200          clr.w w4                             
  172    0156        ----    ---- DE2B47          lsr w5,#7,w6                         
  173    0158        ----    ---- B207F5          and.w #0x7f,w5                       
  174    015A        ----    ---- E12C60          cp.b w5,#0                           
  175    015C        ----    ---- 3A0004          bra nz, 0x000166                     
  176    015E        ----    ---- EB5900          clr.b [w2++]                         
  177    0160        ----    ---- E90183          dec.w w3,w3                           
  178    0162        ----    ---- 3EFFFD          bra gtu, 0x00015e                     
  179    0164        ----    ---- 370004          bra 0x00016e                         
  180    0166        ----    ---- E12861          cp.w w5,#1                           
  181    0168        ----    ---- 320001          bra z, 0x00016c                       
  182    016A        ----    ---- EB8200          setm.w w4                             
  183    016C        ----    ---- 070004          rcall 0x000176                       
  184    016E        ----    ---- BA0111          tblrdl.w [w1],w2                     
  185    0170        ----    ---- E00002          cp0.w w2                             
  186    0172        ----    ---- 3AFFE8          bra nz, 0x000144                     
  187    0174        ----    ---- 060000          return                               
  188    0176        ----    ---- BA5931          tblrdl.b [w1++],[w2++]               
  189    0178        ----    ---- E90183          dec.w w3,w3                           
  190    017A        ----    ---- 32000C          bra z, 0x000194                       
  191    017C        ----    ---- BA5921          tblrdl.b [w1--],[w2++]               
  192    017E        ----    ---- E90183          dec.w w3,w3                           
  193    0180        ----    ---- 320008          bra z, 0x000192                       
  194    0182        ----    ---- E00004          cp0.w w4                             
  195    0184        ----    ---- 3A0003          bra nz, 0x00018c                     
  196    0186        ----    ---- 4080E2          add.w w1,#2,w1                       
  197    0188        ----    ---- B4A032          addc.w 0x0032                         
  198    018A        ----    ---- 37FFF5          bra 0x000176                         
  199    018C        ----    ---- BAD911          tblrdh.b [w1],[w2++]                 
  200    018E        ----    ---- E90183          dec.w w3,w3                           
  201    0190        ----    ---- 3AFFFA          bra nz, 0x000186                     
  202    0192        ----    ---- E80081          inc.w w1,w1                           
  203    0194        ----    ---- 4080E1          add.w w1,#1,w1                       
  204    0196        ----    ---- B4A032          addc.w 0x0032                         
  205    0198        ----    ---- 060000          return                               
  206    019A        ----    ---- DA4000          ReservedBR                           
  207    019C        ----    ---- FE0000          reset                                 
  208    019E        ----    ---- FA0000          lnk #0x0                             
  209    01A0        ----    ---- A902D8          bclr.b 0x02d8,#0                     
  210    01A2        ----    ---- A922D8          bclr.b 0x02d8,#1                     
  211    01A4        ----    ---- A802DC          bset.b 0x02dc,#0                     
  212    01A6        ----    ---- A922DC          bclr.b 0x02dc,#1                     
  213    01A8        ----    ---- 2E1C00          mov.w #0xe1c0,w0                     
  214    01AA        ----    ---- 200E41          mov.w #0xe4,w1                       
  215    01AC        ----    ---- 070006          rcall 0x0001ba                       
  216    01AE        ----    ---- A902DC          bclr.b 0x02dc,#0                     
  217    01B0        ----    ---- A822DC          bset.b 0x02dc,#1                     
  218    01B2        ----    ---- 2E1C00          mov.w #0xe1c0,w0                     
  219    01B4        ----    ---- 200E41          mov.w #0xe4,w1                       
  220    01B6        ----    ---- 070001          rcall 0x0001ba                       
  221    01B8        ----    ---- 37FFF5          bra 0x0001a4                         
  222    01BA        ----    ---- B13FF0          sub.w w0,#0x3ff                       
  223    01BC        ----    ---- B18001          subb.w w1,#0x0                       
  224    01BE        ----    ---- 350006          bra lts, 0x0001cc                     
  225    01C0        ----    ---- 0903EE          repeat #1006                         
  226    01C2        ----    ---- 000000          nop                                   
  227    01C4        ----    ---- B13F40          sub.w w0,#0x3f4                       
  228    01C6        ----    ---- B18001          subb.w w1,#0x0                       
  229    01C8        ----    ---- 3DFFFB          bra ges, 0x0001c0                     
  230    01CA        ----    ---- B00010          add.w #0x1,w0                         
  231    01CC        ----    ---- B03F20          add.w #0x3f2,w0                       
  232    01CE        ----    ---- 350002          bra lts, 0x0001d4                     
  233    01D0        ----    ---- 098000          repeat w0                             
  234    01D2        ----    ---- 000000          nop                                   
  235    01D4        ----    ---- 060000          return                               
  236    01D6        ----    ---- 000000          nop
  237    01D8        ----    ---- FFFFFF          nopr                                 
  238    01DA        ----    ---- FFFFFF          nopr                                 
  239    01DC        ----    ---- FFFFFF          nopr                                 
  240    01DE        ----    ---- FFFFFF          nopr                                 
  241    01E0        ----    ---- FFFFFF          nopr                                 
  242    01E2        ----    ---- FFFFFF          nopr                                 
  243    01E4        ----    ---- FFFFFF          nopr                                 
  244    01E6        ----    ---- FFFFFF          nopr                                 
  245    01E8        ----    ---- FFFFFF          nopr                                 
  246    01EA        ----    ---- FFFFFF          nopr                                 
  247    01EC        ----    ---- FFFFFF          nopr                                 
  248    01EE        ----    ---- FFFFFF          nopr                                 
  249    01F0        ----    ---- FFFFFF          nopr                                 
  250    01F2        ----    ---- FFFFFF          nopr                                 
  251    01F4        ----    ---- FFFFFF          nopr                                 
  252    01F6        ----    ---- FFFFFF          nopr                                 
  253    01F8        ----    ---- FFFFFF          nopr                                 
  254    01FA        ----    ---- FFFFFF          nopr                                 
  255    01FC        ----    ---- FFFFFF          nopr                                 
  256    01FE        ----    ---- FFFFFF          nopr         
...................................................................................
...............Trong đoạn này chỉ là "nop", opcode 000000........................
16257    7F00        ----    ---- FFFFFF          nopr                                 
 16258    7F02        ----    ---- FFFFFF          nopr                                 
 16259    7F04        ----    ---- FFFFFF          nopr                                 
 16260    7F06        ----    ---- FFFFFF          nopr                                 
 16261    7F08        ----    ---- FFFFFF          nopr                                 
 16262    7F0A        ----    ---- FFFFFF          nopr                                 
 16263    7F0C        ----    ---- FFFFFF          nopr                                 
 16264    7F0E        ----    ---- FFFFFF          nopr                                 
 16265    7F10        ----    ---- FFFFFF          nopr                                 
 16266    7F12        ----    ---- FFFFFF          nopr                                 
 16267    7F14        ----    ---- FFFFFF          nopr                                 
 16268    7F16        ----    ---- FFFFFF          nopr                                 
 16269    7F18        ----    ---- FFFFFF          nopr                                 
 16270    7F1A        ----    ---- FFFFFF          nopr                                 
 16271    7F1C        ----    ---- FFFFFF          nopr                                 
 16272    7F1E        ----    ---- FFFFFF          nopr                                 
 16273    7F20        ----    ---- FFFFFF          nopr                                 
 16274    7F22        ----    ---- FFFFFF          nopr                                 
 16275    7F24        ----    ---- FFFFFF          nopr                                 
 16276    7F26        ----    ---- FFFFFF          nopr                                 
 16277    7F28        ----    ---- FFFFFF          nopr                                 
 16278    7F2A        ----    ---- FFFFFF          nopr                                 
 16279    7F2C        ----    ---- FFFFFF          nopr                                 
 16280    7F2E        ----    ---- FFFFFF          nopr                                 
 16281    7F30        ----    ---- FFFFFF          nopr                                 
 16282    7F32        ----    ---- FFFFFF          nopr                                 
 16283    7F34        ----    ---- FFFFFF          nopr                                 
 16284    7F36        ----    ---- FFFFFF          nopr                                 
 16285    7F38        ----    ---- 040100          goto 0x000100                         
 16286    7F3A        ----    ---- 000000          nop                                   
 16287    7F3C        ----    ---- FFFFFF          nopr                                 
 16288    7F3E        ----    ---- FFFFFF          nopr                                 
 16289    7F40        ----    ---- 2088CF          mov.w #0x88c,w15                     
 16290    7F42        ----    ---- 20FF00          mov.w #0xff0,w0                       
 16291    7F44        ----    ---- 880100          mov.w w0,0x0020                       
 16292    7F46        ----    ---- 000000          nop                                   
 16293    7F48        ----    ---- 280000          mov.w #0x8000,w0                     
 16294    7F4A        ----    ---- 8810B0          mov.w w0,0x0216                       
 16295    7F4C        ----    ---- 204000          mov.w #0x400,w0                       
 16296    7F4E        ----    ---- 8810C0          mov.w w0,0x0218                       
 16297    7F50        ----    ---- 2000F0          mov.w #0xf,w0                         
 16298    7F52        ----    ---- 8810F0          mov.w w0,0x021e                       
 16299    7F54        ----    ---- 208004          mov.w #0x800,w4                       
 16300    7F56        ----    ---- 07002F          rcall 0x007fb6                       
 16301    7F58        ----    ---- B14C11          sub.b w1,#0xc1                       
 16302    7F5A        ----    ---- 3A003A          bra nz, 0x007fd0                     
 16303    7F5C        ----    ---- B3C752          mov.b #0x75,w2                       
 16304    7F5E        ----    ---- 8810D2          mov.w w2,0x021a                       
 16305    7F60        ----    ---- B3C4B2          mov.b #0x4b,w2                       
 16306    7F62        ----    ---- 8810D2          mov.w w2,0x021a                       
 16307    7F64        ----    ---- EB0680          clr.w w13                             
 16308    7F66        ----    ---- 208004          mov.w #0x800,w4                       
 16309    7F68        ----    ---- 200046          mov.w #0x4,w6                         
 16310    7F6A        ----    ---- 070025          rcall 0x007fb6                       
 16311    7F6C        ----    ---- E90306          dec.w w6,w6                           
 16312    7F6E        ----    ---- 3AFFFD          bra nz, 0x007f6a                     
 16313    7F70        ----    ---- 80400C          mov.w 0x0800,w12                     
 16314    7F72        ----    ---- 804013          mov.w 0x0802,w3                       
 16315    7F74        ----    ---- 880193          mov.w w3,0x0032                       
 16316    7F76        ----    ---- 200616          mov.w #0x61,w6                       
 16317    7F78        ----    ---- 07001E          rcall 0x007fb6                       
 16318    7F7A        ----    ---- E90306          dec.w w6,w6                           
 16319    7F7C        ----    ---- 3AFFFD          bra nz, 0x007f78                     
 16320    7F7E        ----    ---- E0000D          cp0.w w13                             
 16321    7F80        ----    ---- 320003          bra z, 0x007f88                       
 16322    7F82        ----    ---- B3C4E2          mov.b #0x4e,w2                       
 16323    7F84        ----    ---- 8810D2          mov.w w2,0x021a                       
 16324    7F86        ----    ---- 37FFEE          bra 0x007f64                         
 16325    7F88        ----    ---- BB0E00          tblwtl.w w0,[w12]                     
 16326    7F8A        ----    ---- 240410          mov.w #0x4041,w0                     
 16327    7F8C        ----    ---- FE6000          clrwdt                               
 16328    7F8E        ----    ---- 07000A          rcall 0x007fa4                       
 16329    7F90        ----    ---- 208044          mov.w #0x804,w4                       
 16330    7F92        ----    ---- 08001F          do #31,0x007f9c                       
 16331    7F94        ----    ---- 000003          nop                                   
 16332    7F96        ----    ---- BB5E34          tblwtl.b [w4++],[w12++]               
 16333    7F98        ----    ---- BB5634          tblwtl.b [w4++],[w12--]               
 16334    7F9A        ----    ---- BBCE34          tblwth.b [w4++],[w12]                 
 16335    7F9C        ----    ---- E8860C          inc2.w w12,w12                       
 16336    7F9E        ----    ---- 240010          mov.w #0x4001,w0                     
 16337    7FA0        ----    ---- 070001          rcall 0x007fa4                       
 16338    7FA2        ----    ---- 37FFDE          bra 0x007f60                         
 16339    7FA4        ----    ---- 883B00          mov.w w0,0x0760                       
 16340    7FA6        ----    ---- 200550          mov.w #0x55,w0                       
 16341    7FA8        ----    ---- 883B30          mov.w w0,0x0766                       
 16342    7FAA        ----    ---- 200AA0          mov.w #0xaa,w0                       
 16343    7FAC        ----    ---- 883B30          mov.w w0,0x0766                       
 16344    7FAE        ----    ---- A8E761          bset.b 0x0761,#7                     
 16345    7FB0        ----    ---- 000000          nop                                   
 16346    7FB2        ----    ---- 000000          nop                                   
 16347    7FB4        ----    ---- 060000          return                               
 16348    7FB6        ----    ---- 20020A          mov.w #0x20,w10                       
 16349    7FB8        ----    ---- 20000B          mov.w #0x0,w11                       
 16350    7FBA        ----    ---- AE0218          btss.b 0x0218,#0                     
 16351    7FBC        ----    ---- 370004          bra 0x007fc6                         
 16352    7FBE        ----    ---- 8010E1          mov.w 0x021c,w1                       
 16353    7FC0        ----    ---- 785A01          mov.b w1,[w4++]                       
 16354    7FC2        ----    ---- 40C68D          add.b w1,w13,w13                     
 16355    7FC4        ----    ---- 060000          return                               
 16356    7FC6        ----    ---- FE6000          clrwdt                               
 16357    7FC8        ----    ---- E9058B          dec.w w11,w11                         
 16358    7FCA        ----    ---- 3AFFF7          bra nz, 0x007fba                     
 16359    7FCC        ----    ---- E9050A          dec.w w10,w10                         
 16360    7FCE        ----    ---- 3AFFF4          bra nz, 0x007fb8                     
 16361    7FD0        ----    ---- EF2216          clr.w 0x0216                         
 16362    7FD2        ----    ---- 37FFB2          bra 0x007f38                         
 16363    7FD4        ----    ---- 000800          nop                                   
 16364    7FD6        ----    ---- 00008C          nop                                   
 16365    7FD8        ----    ---- 000000          nop                                   
 16366    7FDA        ----    ---- 000000          nop                                   
 16367    7FDC        ----    ---- FE0000          reset                                 
 16368    7FDE        ----    ---- FFFFFF          nopr                                 
 16369    7FE0        ----    ---- FFFFFF          nopr                                 
 16370    7FE2        ----    ---- FFFFFF          nopr                                 
 16371    7FE4        ----    ---- FFFFFF          nopr                                 
 16372    7FE6        ----    ---- FFFFFF          nopr                                 
 16373    7FE8        ----    ---- FFFFFF          nopr                                 
 16374    7FEA        ----    ---- FFFFFF          nopr                                 
 16375    7FEC        ----    ---- FFFFFF          nopr                                 
 16376    7FEE        ----    ---- FFFFFF          nopr                                 
 16377    7FF0        ----    ---- FFFFFF          nopr                                 
 16378    7FF2        ----    ---- FFFFFF          nopr                                 
 16379    7FF4        ----    ---- FFFFFF          nopr                                 
 16380    7FF6        ----    ---- FFFFFF          nopr                                 
 16381    7FF8        ----    ---- FFFFFF          nopr                                 
 16382    7FFA        ----    ---- FFFFFF          nopr                                 
 16383    7FFC        ----    ---- FFFFFF          nopr                                 
 16384    7FFE        ----    ---- FFFFFF          nopr

Mình so sánh configuration bits thì nó tương đương nhau (chứ không hoàn toàn giống nhau, vẫn có đủ các mode cần thiết như nhau nhưng giá trị các thanh ghi CONFIG khác nhau).

Mình có thắc mắc là cái hex đọc lên từ chip như vậy, thì nó vẫn còn bootloader chứ không bị ghi đè, tại sao lại không check được PIC?

ttai 06-11-2014 07:19 PM

Update,

Sau khi biên dịch lại code bootloader và code chương trình dùng chân MCLR để reset (MCLR_EN), và chỉnh lại mạch để dùng chân MCLR thì bootloader đã chạy ok.

p/s: nhờ vụ này mà mình tìm được vài bootloader khác và đã test.
1. một chương trình nguồn mở tinybootloader+ cho PIC và AVR, dựa trên bản tinybootloader này. Nó ở đây: tinypicbootload.sourceforge.net
Có thể sử dụng được trên linux, win và mac. Mã nguồn soft trên PC mở nên có thể chỉnh sửa. Mã nguồn file asm cho PIC được ghi rất tường minh, dễ dàng chỉnh sửa. Forum trên sourceforge khá tích cực. Cũng chỉ chưa tới 100 words.
2. dsloader30. Thằng này thì mình thấy nó cần tới gần 150 words. Chỉ được cái file asm ghi rất tường minh và chuyên nghiệp, gần như dễ chỉnh sửa nhất cho newbie. Chương trình trên PC thì cũng "có vẻ" chuyên nghiệp nhưng những tính năng trên tinybootloader có thì đôi khi dsloader30 yêu cầu mua bản pro. Khởi động chậm, vì nó còn check update.

Nói chung nếu ai xài linux thì có thể dùng tinybootloader+ phía trên.


Múi giờ GMT. Hiện tại là 10:22 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam