|
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 |
|
05-02-2008, 08:11 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
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 ! thay đổi nội dung bởi: iniesta, 05-02-2008 lúc 08:20 PM. |
05-02-2008, 11:03 PM | #2 | |
Trưởng lão PIC bang
|
Trích:
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,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
08-02-2008, 05:57 PM | #3 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
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ụ ? |
08-02-2008, 07:54 PM | #4 | |
Trưởng lão PIC bang
|
Trích:
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,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
10-02-2008, 12:34 AM | #5 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
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 ? |
11-02-2008, 07:58 PM | #6 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
23-07-2008, 01:54 AM | #7 | |
Đệ tử 1 túi
Tham gia ngày: Mar 2006
Bài gửi: 22
: |
Trích:
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) 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! |
|
23-07-2008, 02:45 AM | #8 | ||
Trưởng lão PIC bang
|
Trích:
Trích:
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) 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,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
||
22-03-2008, 02:32 PM | #9 |
PIC Bang chủ
|
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
__________________
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? |
06-11-2014, 01:43 AM | #10 |
Đệ tử 1 túi
Tham gia ngày: Dec 2005
Bài gửi: 12
: |
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. |
06-11-2014, 06:53 PM | #11 |
Đệ tử 1 túi
Tham gia ngày: Dec 2005
Bài gửi: 12
: |
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); } } 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) 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 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? |
06-11-2014, 07:19 PM | #12 |
Đệ tử 1 túi
Tham gia ngày: Dec 2005
Bài gửi: 12
: |
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. |
|
|