Các anh làm ơn tìm giúp em bootloader cho PIC18F4520 với. Em đã down file của pác nqnam về rồi mà không thấy hỗ trợ 18F4520. Em cài đặt như trong source file cho 18F452 rồi nạp cho con 4520 được không? Cảm ơn.
|
Lỗi biên dịch ở chỗ nào
Em đã tìm thấy trong file TinyB18F32 có hỗ trợ 18F4520. Em đã chỉnh sửa như sau nhưng khi biên dịch vẫn bị lỗi.
************************************************** **************** Lỗi như sau: (ai biết chỉ giùm em với) Clean: Deleting intermediary and output files. Clean: Done. Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F4520 "TinyB18F32.asm" /l"TinyB18F32.lst" /e"TinyB18F32.err" Warning[218] C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM 1 : Expected DEC, OCT, HEX. Will use HEX Error[129] C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM 2 : Expected (END) Error[173] C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM 2 : Source file path exceeds 62 characters (C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\MY DOCUMENTS\PICSOURCE\OTHER\NNQ\TINYB18F32.ASM) Halting build on first failure as requested. BUILD FAILED: Fri Apr 11 21:53:26 2008 ************************************************** **************************** Chương trình đã chỉnh sửa: radix DEC LIST P=18F4520 ; change also: Configure->Select Device from MPLAB ; For 2455, 2550, 4455, and 4550: 4 MHz quartz / 1 * 24 / 4 = 24 MHz xtal EQU 12000000 ; you may want to change: _XT_OSC_1H _HS_OSC_1H _HSPLL_OSC_1H baud EQU 19200 ; standard TinyBld baud rates: 115200 or 19200 ; The above 3 lines can be changed and built a bootloader for the desired frequency (and PIC type) ;************************************************* ******************* ; Tiny Bootloader 18F series Size=100words ; claudiu.chiculita@ugal.ro ; http://www.etc.ugal.ro/cchiculita/so...bootloader.htm ; Modified by Nam Nguyen-Quang for testing different PIC18Fs with tinybldWin.exe v1.9 ; namqn@yahoo.com ;************************************************* ******************* ; This source file is for PIC18F2420, 2520, 4420, 4520, 2455, 2550, 4455, and 4550 ; Copy these include files to your project directory (i.e. they are in the same ; directory with your .asm source file), if necessary #include "icdpictypes.inc" ; Takes care of: #include "p18fxxx.inc", max_flash, IdTypePIC #include "spbrgselect.inc" ; RoundResult and baud_rate #define first_address max_flash-200 ;100 words ; For different PICs, uncomment the appropriate lines of CONFIG directives ; as indicated, and comment out all the other lines, if necessary ; For example, the following configuration is for PIC18F4550, with 4 MHz crystal ; You could find the symbol names for the chip in its include file ; (in the Microchip\MPASM Suite directory) ;----- CONFIG1L Options ----- ; For 18F2455, 2550, 4455, and 4550 ; CONFIG PLLDIV = 1, CPUDIV = OSC3_PLL4, USBDIV = 2 ;----- CONFIG1H Options ----- ; For 18F2455, 2550, 4455, and 4550 ; CONFIG FOSC = HSPLL_HS, FCMEM = OFF, IESO = OFF ; For 18F2420, 2520, 4420, and 4520 ; CONFIG OSC = HS, FCMEN = OFF, IESO = OFF CONFIG OSC = INTIO67, FCMEN = OFF, IESO = OFF ; Use internal oscilator, xtal = 8000000 ;----- CONFIG2L Options ----- ; For 18F2455, 2550, 4455, and 4550 ; CONFIG PWRT = ON, BOR = OFF, BORV = 21, VREGEN = OFF ; For 18F2420, and 4420 ; CONFIG PWRT = ON, BOREN = ON, BORV = 27 ; For 18F2520, and 4520 CONFIG PWRT = ON, BOREN = ON, BORV = 28 ;----- CONFIG2H Options ----- ; For all of the chips associated with this source file CONFIG WDT = OFF, WDTPS = 128 ;----- CONFIG3H Options ----- ; For 18F2455, 2550, 4455, and 4550 ; CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = OFF ; For 18F2420, and 4420 ; CONFIG MCLRE = ON, PBADEN = OFF, CCP2MX = PORTC ; For 18F2520, and 4520 CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC ;----- CONFIG4L Options ----- ; For 18F2455, 2550, 4455, and 4550 ; CONFIG STVREN = ON, LVP = OFF, ICPRT = OFF, DEBUG = OFF, XINST = OFF ; For 18F2420, and 4420 ; CONFIG STVREN = ON, LVP = OFF, ENHCPU = OFF, DEBUG = OFF ; For 18F2520, and 4520 CONFIG STVREN = ON, LVP = OFF, DEBUG = OFF, XINST = OFF ;----------------------------- PROGRAM --------------------------------- cblock 0 crc i cnt1 cnt2 cnt3 counter_hi counter_lo flag endc cblock 10 buffer:64 dummy4crc endc SendL macro car movlw car movwf TXREG endm ;0000000000000000000000000 RESET 00000000000000000000000000 ORG 0x0000 GOTO IntrareBootloader ;view with TabSize=4 ;&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&& ;---------------------- Bootloader ---------------------- ;PC_flash: C1h U H L x ... <64 bytes> ... crc ;PC_eeprom: C1h 40h EEADR EEDATA 0 crc ;PC_cfg C1h U OR 80h H L 1 byte crc ;PIC_response: type `K` ORG first_address ;space to deposit first 4 instr. of user prog. nop nop nop nop org first_address+8 IntrareBootloader ;init IntOSC, added by Nam Nguyen-Quang movlw 0x70 movwf OSCCON ; the above 2 lines should be commented out for designs not using the internal oscilator ; or for the chips without the internal oscilator ;init serial port movlw b'00100100' movwf TXSTA movlw spbrg_value movwf SPBRG movlw b'10010000' movwf RCSTA ;wait for computer rcall Receive sublw 0xC1 ;Expect C1h bnz way_to_exit SendL IdTypePIC ;send PIC type MainLoop SendL 'K' ; "-Everything OK, ready and waiting." mainl clrf crc rcall Receive ;Upper movwf TBLPTRU movwf flag ;(for EEPROM and CFG cases) rcall Receive ;Hi movwf TBLPTRH movwf EEADR ;(for EEPROM case) rcall Receive ;Lo movwf TBLPTRL movwf EEDATA ;(for EEPROM case) rcall Receive ;count movwf i incf i lfsr FSR0, (buffer-1) rcvoct ;read 64+1 bytes movwf TABLAT ;prepare for cfg; => store byte before crc rcall Receive movwf PREINC0 decfsz i bra rcvoct tstfsz crc ;check crc bra ziieroare btfss flag,6 ;is EEPROM data? bra noeeprom movlw b'00000100' ;Setup eeprom rcall Write bra waitwre noeeprom btfss flag,7 ;is CFG data? bra noconfig tblwt* ;write TABLAT(byte before crc) to TBLPTR*** movlw b'11000100' ;Setup cfg rcall Write bra waitwre noconfig ;write eraseloop movlw b'10010100' ; Setup erase rcall Write TBLRD*- ; point to adr-1 writebigloop movlw 2 ; 2groups movwf counter_hi lfsr FSR0,buffer writesloop movlw 32 ; 32bytes = 16instr movwf counter_lo writebyte movf POSTINC0,w ; put 1 byte movwf TABLAT tblwt+* decfsz counter_lo bra writebyte movlw b'10000100' ; Setup writes rcall Write decfsz counter_hi bra writesloop waitwre ;btfsc EECON1,WR ;for eeprom writes (wait to finish write) ;bra waitwre ;no need: round trip time with PC bigger than 4ms bcf EECON1,WREN ;disable writes bra MainLoop ziieroare ;CRC failed SendL 'N' bra mainl ;******** procedures ****************** Write movwf EECON1 movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 bsf EECON1,WR ;WRITE nop ;nop return Receive movlw xtal/2000000+1 ; for 20MHz => 11 => 1second delay ; for 18F2xxx chips, this should be xtal/1000000+1 movwf cnt1 rpt2 clrf cnt2 rpt3 clrf cnt3 rptc btfss PIR1,RCIF ;test RX bra notrcv movf RCREG,w ;return read data in W addwf crc,f ;compute crc return notrcv decfsz cnt3 bra rptc decfsz cnt2 bra rpt3 decfsz cnt1 bra rpt2 ;timeout: way_to_exit bcf RCSTA, SPEN ; deactivate UART bra first_address ;************************************************* ************ ; After reset ; Do not expect the memory to be zero, ; Do not expect registers to be initialised like in catalog. END |
Đường dẫn tuyệt đối của tập tin nguồn quá dài (hơn 62 ký tự), bạn nên giải nén tập tin nguồn vào một thư mục con nào đó của thư mục gốc chẳng hạn.
Bạn cũng chú ý đọc post #20 của luồng này nữa, vì các tập tin nguồn tôi đã gửi cho Claudiu đã bị định dạng lại theo format của Unix. Thân, |
Mấy anh cho em hỏi, quy trình tạo 1 file HEX mới nạp vào làm bootloader cho bất kì con PIC nào là sao(nghĩa là mỗi con 1 file riêng , như 4331, 4431, 877, hay con nào đó,chứ ko phải với mọi nhe, đừng hiểu nhầm em). Em thấy cứ phiền bác nam config dùm ngại quá,lủi này đó ko có net sao nhờ được.
|
Trích:
Code:
radix DEC Nếu bạn không hiểu phần hướng dẫn của tôi, tôi xin dịch thành tiếng Việt như sau: Với các loại PIC khác nhau, bỏ chú thích những dòng tương ứng của các directive CONFIG như đã chỉ ra, và chú thích tất cả những dòng khác, nếu cần thiết. Ví dụ, cấu hình sau là cho PIC18F4580, với thạch anh 8 MHz. Bạn có thể tìm thấy các ký hiệu cho chip trong tập tin include của nó (nằm trong thư mục Microchip\MPASM Suite). Tôi đã chỉ ra tập tin này áp dụng cho những PIC18F nào. Tất cả những từ cấu hình cần thiết đều đã được tôi làm mẫu, việc của bạn là thay thế những mẫu này với cấu hình phù hợp cho yêu cầu của bạn, sau đó biên dịch project. Chỉ cần copy tập tin nguồn .asm cùng với 2 tập tin "icdpictypes.inc" và "spbrgselect.inc" (chú ý, tôi có bổ sung các chip vào trong tập tin "icdpictypes.inc", do đó bạn nên dùng tập tin do tôi cung cấp). Thân, |
Hi,
BootLoader (BLD) là một phần rất hay của lập trình VDK, tui luôn tìm cách sử dụng BLD khi sử dụng với một loại VDK nào. Xem trong topic này, tui thấy các bác trao đổi về việc sử dụng BLD có sẵn, tui thì lại không thích như vậy vì thực sự tui muốn hiểu chi tiết hơn về nó và viết một cái BLD cho riêng mình để có thể làm chủ nó, làm cho nó hoạt động theo ý mình. Tui tiếp cận với PIC bằng CCS vì vậy đọc mã nguồn bằng ASM tui không hiểu, nếu muốn hiểu thì phải mất thời gian nghiên cứu tập lệnh, cái này không có lợi đối với tui. Tui cũng đã đọc mã nguồn BLD của CCS (trong mục Example) nhưng cũng không hiểu lắm và cách nó làm cũng khác với tinyBLD mà các bác đang trao đổi ở đây mà tui thích kiểu tinyBLD này, thấy nó tiện hơn. Vì vậy tui muốn dùng CCS để viết riêng một BLD theo kiểu tinyBLD mà các bác đang trao đổi. Tuy nhiên, để BLD có thể giao tiếp với phần mềm truyền file hex trên PC thì phải biết giao thức của nó. Đấy chính là cái tui cần hỏi các bác về cách thức mà BLD và phần mềm trên PC như thế nào? Để bắt tay thì nó phải truyền cái gì? cái gì được truyền đầu tiên và tiếp theo là cái gì cho đến khi quá trình kết thúc? Phải nắm được những thông tin đó thì mới có thể lập trình được. Một câu hỏi nữa cần các bác trả lời là: tại sao tui viết #org 0x1F00 void main(void) { // code for testing here } Nhưng khi biên dịch thì kết quả trong file Hex là mất khá nhiều byte (khoảng vài chục) mới đến lệnh nhảy tới địa chỉ của hàm main() (tức 0x1F00). Không phải như chúng ta nghĩ là hàm main là hàm được thực thi đầu tiên nên chỉ mất 4 byte (từ 0000 đến 0003) cho lệnh nhảy. Nếu như vậy thì có cách nào để cho CCS biên dịch ra lệnh đầu tiên là lệnh nhảy đến hàm main lập tức không? Nếu không thực hiện được điều này thì không thể viết BLD kiểu tinyBLD được. Tui mới tìm hiểu về CCS và PIC nên cũng chưa nắm rõ để giải quyết vấn đề này. Rất mong các cao thủ bỏ chút công sức giúp đỡ. Cảm ơn các bác đã đọc bài. Thân ái. |
Trước hết, bạn định dùng phần mềm trên host PC của Tiny Bootloader hay sẽ tự viết? Giao thức của Tiny Bootloader khá đơn giản, có thể thấy ngay trong phần chú thích của các mã nguồn firmware.
Về chuyện hàm main() được thực thi sau vài chục chu kỳ lệnh, đây là chuyện bình thường, vì các trình biên dịch cấp cao thường thiết lập một số điều kiện làm việc (ngăn xếp, biến được khởi tạo, ...) trước khi nhảy đến chương trình chính, trong giai đoạn startup. Nếu dùng C18 chẳng hạn, bạn có thể đọc mã nguồn startup. Với CCS C thì tôi không rõ bạn có thể can thiệp gì vào giai đoạn startup hay không, đơn giản vì tôi không dùng nó. Thân, |
Hi,
Đúng là ngôn ngữ bậc cao thì nó có làm một vài thao tác như vậy, nên tui muốn hỏi các bác là có cách nào để loại bỏ cái này không? Tui đã dùng cách như sau (xem đoạn code bên dưới) nhưng không được, khi biên dịch nó báo lỗi tùm lum, invalid org #org 0x0003, 0x1f00 {} // Báo cho trình biên dich biết là khi biên dịch không được bỏ bất kỳ mã lệnh nào vào vùng địa chỉ này. Nếu các bác để ý thì đó là phần bộ nhớ chương trình từ địa chỉ ngắt đầu tiên đến địa chỉ đầu tiên của BLD. Tuy nhiên, CCS chỉ cho phép bỏ trống từ địa chỉ 0x0033 trở đi thôi, xâm phạm vào vùng địa chỉ ngắt hay reset là không được. Có cách nào để giải quyết vấn đề này không nhỉ? Theo cách làm của CCS thì BLD của nó đặt ở phần đầu bộ nhớ chương trình nên các chương trình ứng dụng mình viết để nạp bằng BLD phải khai báo lại: #build(reset = BLD_END + 1, interrupt = BLD_END + 5) Tui không thích kiểu như vậy vì nếu làm thế thì không thể viết chương trình ứng dụng trên các trình biên dịch khác để dùng BLD được (vì địa chỉ reset luôn là 0x0000). Có ai có cao kiến nào không? Thân ái. |
Cám ơn các bạn rất nhiều !
|
ban ơi chỉ cho mình cách dịch lại firmware bootloader với sao mình dịch lại nó báo lỗi tùm num cả nhỉ
cám ơn nhiều |
Xin thầy Nam vui lòng xem qua và trợ giúp phần biên dịch bootloader cho pic18f4520
Xin thầy Nam vui lòng xem qua phần lỗi này dùm em, em thường sử dụng ccsc để lập trình nên em không nắm rõ được các thanh ghi và nội dung đoạn code trong file TinyB18F của thầy, tuy nhiên em cũng đọc được các hướng dẫn ngay trong đoạn code và làm theo, tuy nhiên khi biên dịch thì lại xảy ra lỗi bên dưới. Em đã copy toàn bộ các file header vào cùng thư mục của file ".asm". Em cũng đã kiểm tra file nguồn đúng chuẩn windows(em sử dụng folder thầy gửi sau này và đã mở bằng notepad).
---------------------------------------------------------------------- Debug build of project `D:\picsource\new\Pic18f4520_20MHz_38400bps.mcp' started. Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43 Preprocessor symbol `__DEBUG' is defined. Thu Jun 14 23:11:23 2012 ---------------------------------------------------------------------- Make: The target "D:\picsource\other\TinyB18F\TinyB18F.o" is out of date. Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F4520 "TinyB18F.asm" /l"TinyB18F.lst" /e"TinyB18F.err" /d__DEBUG=1 Error[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 35 : CONFIG Directive Error: (setting "OSCSError[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 57 : CONFIG Directive Error: (setting "BORError[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 80 : CONFIG Directive Error: (setting "CCP2MUXError[176] D:\PICSOURCE\OTHER\TINYB18F\TINYB18F.ASM 99 : CONFIG Directive Error: (setting "STVRHalting build on first failure as requested. ---------------------------------------------------------------------- Debug build of project `D:\picsource\new\Pic18f4520_20MHz_38400bps.mcp' failed. Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43 Preprocessor symbol `__DEBUG' is defined. Thu Jun 14 23:11:25 2012 ---------------------------------------------------------------------- BUILD FAILED ------------------------------------------------------------------------------------- ---------------------------------------- Đoạn config sửa lại file TinyB18F.asm của thầy như sau: ---------------------------------------- radix DEC LIST P=18F4520 xtal EQU 20000000 baud EQU 38400 #include "D:\picsource\new\icdpictypes.inc" #include "D:\picsource\new\spbrgselect.inc" #include "D:\picsource\new\bankswitch.inc" #define first_address max_flash-200 ;100 words CONFIG OSC = HS, OSCS = OFF CONFIG PWRT = ON, BOR = ON, BORV = 27 CONFIG WDT = OFF, WDTPS = 128 CONFIG CCP2MUX = OFF CONFIG STVR = ON, LVP = OFF, DEBUG = OFF -------------------------------------------------------------- |
Chắc đây là sản phẩm đầu tay của PICVN 6 năm về trước? Thời gian làm mạch này và thử đến khi có thể bắt đầu sử dụng được thì hết bao nhiêu thời gian? Mạch này có thể dùng breadboard được vì người làm nghiệp dư chắc khó có thể chế được mạch in, các linh kiện gồm:
1. IC MAX232x1 2. Tụ 1 uFx4 3. RS-232 connector x 1 4. J1 6-pin connector x 1 5. Breadboard x 1 6. RS-232 cable x 1 7. Một số dây nối và vài thứ lặt vặt khác Giá mua linh kiện trên ở Australia (có thể ở Mỹ rẻ hơn chút) ước chừng khoảng 30-40 AUD (gần tương đương 30-40 USD) đắt bằng 1 nửa giá mua PICKIT3 + bo mạch thử (khoảng 70 AUD). Còn mua thêm mạch thử nữa thì chắc sẽ mất khoảng 60-70 AUD, làm hỏng thì mất thêm chừng ít tiền nữa, vị chi cho project này hết chừng 100 AUD (gần tương đương 100 USD). >> Ở nước ngoài nhiều khi đi mua đồ về tự làm có khi đắt hơn là mua đồ làm sẵn. Nhưng có nhiều người thích DIY nên người ta vẫn mua đồ về tự làm lấy như là một hobby và như vậy có đất sống cho các cửa hàng hobby shops là vậy. Còn ở VN dường như ngược lại, ngoài chuyện hobby và thích làm thì mua linh kiện về làm giá rẻ hơn mua đồ làm sẵn thì phải??? |
Tôi nhìn thấy cái programmer sau trên eBay giá chưa đầy 14 AUD:
http://i1005.photobucket.com/albums/.../BI00049-2.jpg http://www.ebay.co.uk/itm/PIC-USB-Mi...50847177167%26 So với tiny bootloader chắc cái này khác nhiều. Nếu không muốn làm mạch nạp, có lẽ mua cái này và mua một con PIC, một breadboard và vài linh kiện cũng như motor và IC điều khiển mô tơ nữa là có công cụ học PIC một cách nhanh chóng. |
Múi giờ GMT. Hiện tại là 06:46 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