Thông báo

Collapse
No announcement yet.

MegaLoad - Bootloader for AVR

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    Duyphi dạo này bị seo thế . Đang định chỉ cho cái app notes AVR230 nhưng chắc đọc rồi hả.
    AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
    Xem thêm tại Online Store ---> Click here
    Mob: 0982.083.106

    Comment


    • #32
      Nguyên văn bởi VNarmy Xem bài viết
      Duyphi dạo này bị seo thế . Đang định chỉ cho cái app notes AVR230 nhưng chắc đọc rồi hả.
      Hờ hờ, cũng may là mình có máu "TÒ MÒ" nhanh chóng tìm hiểu ngay cái mà mình chưa rõ nên mới biết thêm cái này chứ không thì.......đại ca CQ mà nhãy vào thấy chắc sẽ làm một trận rồi. he he, hú hồn

      Comment


      • #33
        Nguyên văn bởi VNarmy Xem bài viết
        Nghe các bạn cãi nhau mình cũng rút ra được vài điều. Mình có vài ý kiến thế này:
        Thứ nhất có thể NVT2 chưa làm cái Mega Load nên chưa biết.
        Thứ hai Sphinx không dùng bản mới nhất ở microsyl nên cũng chưa nắm được hết.
        Để mình giải thích rõ nhé:
        Cái bước 5 trong cái ảnh của NVT2 là reset bằng phần mềm Mega Load trên PC chứ không phải là reset bằng phần cứng như Sphinx nói đâu. Và Should see ATmega reset theo mình là nó nhận được trả lời khi bấm nút reset trên PC.
        Quy trình thực hiện của mình là:
        1. Sửa các #define ở file nguồn, dịch và nạp.
        2. Rút bộ nạp khỏi cổng USB. Chạy Mega Load. Cắm bộ nạp lại (vì nguồn của board lấy từ bộ nạp mà )
        3. Bấm nút reset trên Mega Load. Thì xảy ra hiện tượng trên.

        Mấy hôm nay bận nên chưa thử cách độ lại code của Sphinx. Mai sẽ thử.

        @Sphinx: Mấy hôm nay bận order đợt hàng mới. Hôm nào hàng về sẽ gửi báo giá cho PNLab. Đảm bảo giá rẻ giật mìn
        Hi hi mới gẹo các bác tí mà sao nóng thế !

        Do không có đủ trình độ cr**k cái trình dịch C mà nó yêu cầu nên không thử, chỉ xem các bác làm và có chút thắc mắc thui !

        Trên web microsyl nói là megaload có khả năng monitor cái cổng COM(kể cả các chân tín hiệu bắt tay) nhưng không hiểu tại sao lại bắt cái bootloader chờ cho tới khi nhận được tín hiệu từ PC xuống mới vào mode nạp hoặc thả cho chương trình chính chạy, còn không thì đơ luôn. Hình như cách đây khá lâu có ai bảo rằng megaload có thể detect tín hiệu reset và điều khiển thông qua một chân tín hiệu bắt tay ( giống như ponyProg ấy). Hơn nữa "Reset has been send" là thế nào nhỉ ?!, ý nghĩa không rỏ ràng -> hông hiểu

        Nào giờ vẫn phục MegaLoad vì nghỉ rằng megaload có khả năng đó, giờ theo các bác nói thế thì nó cũng chẵng hơn gì đa số các bootloader khác chạy với AVRProg ngoài việc nó có phần mềm riêng (AVRProg chạy block mode cũng nhanh không kém thì phải ) !

        NVT2
        Tín đồ AVR giáo.

        Comment


        • #34
          @NVT: Nóng, có nóng tí nèo đâu nhỉ. HN đợt này hơi lạnh, có SG thì có khi nóng

          Thưa các bác, em đã tìm đc cái lỗi của nó nhưng không hỉu chữa như nèo:
          Code:
          void main(void)
          {
          	unsigned char i;
          
          	PULLUPPORT = PULLUPPIN;           // Pull up on RX line
          
          	_UBRRL = (XTAL / (16 * BAUDRATE)) - 1;      //set baud rate;
          	_UCSRB = 0x18;                     // Rx enable Tx Enable
          	_UCSRC = 0x86;                     // Asyn,NoParity,1StopBit,8Bit	
          
          	#ifdef RS485DDR
          	RS485DDR |= RS485TXE;             // RS485 Tranceiver switch pin as output
          	RS485PORT &= ~RS485TXE;           // RS485 in Rx mode
          	#endif
          
          	do
          	i = _UDR;					// read and ignore data until buffer clear
          	while(_UCSRA & 0x80);
          
          	TxChar('>');
          
          	if (RxChar() == '<')
          	{
          		TxChar(DeviceID);
          		TxChar(FlashSize);
          		TxChar(BootSize);
          		TxChar(PageSize);
          		TxChar(EEpromSize);
          		TxChar('!');
          
          		while (1)
          		{
          			GetPageNumber();
          
          			if (RealPageAddress == 0xffff) break;
          
          			if (WriteFlash()) TxChar('!');
          			else TxChar('@');
          		}
          		
          		#ifdef EEPROM
          		EEpromLoad();
          		#endif
          		#ifdef LOCKBIT
          		LockBit();
          		#endif
          	}
          
          	#ifdef RAMPZ_FLAG
          	RAMPZ = 0;
          	#endif
          	#ifdef INTVECREG
          	INTVECREG = 0x01;                 // Enable interrupt vector select
          	INTVECREG = 0x00;                 // Move interrupt vector to flash
          	#endif
          	_UCSRA |=  (1<<_TXC);
          	TxChar('X');
          	asm("jmp 0x0000");                // Run application code
          }
          Các bác xem đoạn code ở trên. Nó là ở project bootloader. Khi chạy thì ở monitor của Megaload em nhận được chuỗi sau:
          IlcR1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%X
          IlcR1: là init các thông số của Mega8535
          40 dấu "!" tiếp theo tương ứng với nạp thành công 40 pages
          % là nạp lock bit
          X là từ cái lệnh
          Code:
          TxChar('X');
          Cái này là em thêm vào chứ code cũ không có. Các bác để ý cái đoạn mầu đỏ ở trên.
          Như vậy nó đã chạy qua đoạn đỏ sao nó lại không thực hiện lệnh Jmp 0x0000 (đoạn mầu vàng ở trên).
          Do vậy nó lại quay về từ đầu của Main.
          Ngoài ra, flash của mega8535 chỉ có 16 trang (theo datasheet). Sao ở đây lại nạp đến 40 trang. Hay cai init bị sai? Thật là khó hỉu quá.
          Last edited by VNarmy; 15-10-2007, 18:02.
          AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
          Xem thêm tại Online Store ---> Click here
          Mob: 0982.083.106

          Comment


          • #35
            Nguyên văn bởi VNarmy Xem bài viết
            @NVT: Nóng, có nóng tí nèo đâu nhỉ. HN đợt này hơi lạnh, có SG thì có khi nóng

            Thưa các bác, em đã tìm đc cái lỗi của nó nhưng không hỉu chữa như nèo:
            Code:
            void main(void)
            {
            	unsigned char i;
            
            	PULLUPPORT = PULLUPPIN;           // Pull up on RX line
            
            	_UBRRL = (XTAL / (16 * BAUDRATE)) - 1;      //set baud rate;
            	_UCSRB = 0x18;                     // Rx enable Tx Enable
            	_UCSRC = 0x86;                     // Asyn,NoParity,1StopBit,8Bit	
            
            	#ifdef RS485DDR
            	RS485DDR |= RS485TXE;             // RS485 Tranceiver switch pin as output
            	RS485PORT &= ~RS485TXE;           // RS485 in Rx mode
            	#endif
            
            	do
            	i = _UDR;					// read and ignore data until buffer clear
            	while(_UCSRA & 0x80);
            
            	TxChar('>');
            
            	if (RxChar() == '<')
            	{
            		TxChar(DeviceID);
            		TxChar(FlashSize);
            		TxChar(BootSize);
            		TxChar(PageSize);
            		TxChar(EEpromSize);
            		TxChar('!');
            
            		while (1)
            		{
            			GetPageNumber();
            
            			if (RealPageAddress == 0xffff) break;
            
            			if (WriteFlash()) TxChar('!');
            			else TxChar('@');
            		}
            		
            		#ifdef EEPROM
            		EEpromLoad();
            		#endif
            		#ifdef LOCKBIT
            		LockBit();
            		#endif
            	}
            
            	#ifdef RAMPZ_FLAG
            	RAMPZ = 0;
            	#endif
            	#ifdef INTVECREG
            	INTVECREG = 0x01;                 // Enable interrupt vector select
            	INTVECREG = 0x00;                 // Move interrupt vector to flash
            	#endif
            	_UCSRA |=  (1<<_TXC);
            	TxChar('X');
            	asm("jmp 0x0000");                // Run application code
            }
            Các bác xem đoạn code ở trên. Nó là ở project bootloader. Khi chạy thì ở monitor của Megaload em nhận được chuỗi sau:
            IlcR1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%X
            IlcR1: là init các thông số của Mega8535
            40 dấu "!" tiếp theo tương ứng với nạp thành công 40 pages
            % là nạp lock bit
            X là từ cái lệnh
            Code:
            TxChar('X');
            Cái này là em thêm vào chứ code cũ không có. Các bác để ý cái đoạn mầu đỏ ở trên.
            Như vậy nó đã chạy qua đoạn đỏ sao nó lại không thực hiện lệnh Jmp 0x0000 (đoạn mầu vàng ở trên).
            Do vậy nó lại quay về từ đầu của Main.
            Ngoài ra, flash của mega8535 chỉ có 16 trang (theo datasheet). Sao ở đây lại nạp đến 40 trang. Hay cai init bị sai? Thật là khó hỉu quá.
            1. Flash của con mega8535 có 128 page 64 byte, không phải 16 page.

            2. Trong tệp lệnh của mega8535 không có lệnh "jmp" nên lệnh đó nếu dịch ra thì coi như không có, bạn nên thay bằng lệnh "rjmp".
            3. Cẩn thận với hai dòng lệnh mov cái reset vector

            NVT2
            Tín đồ AVR giáo.

            Comment


            • #36
              Thêm tí : cái lệnh "rjmp" nếu trình dịch không chấp nhận thì tốt nhất là bạn chèn vào đó đoạn mã sau :
              Code:
              clr r30
              clr r31
              ijmp
              NVT2
              Tín đồ AVR giáo.

              Comment


              • #37
                Thanks NVT2 đã giúp. Tuy nhiên vẫn không được. Đang nản quá.
                Mình có cảm giác là 2 cái lệnh move vector ngắt không thực hiện đúng. Có lẽ quay lại với vấn đề này sau vậy.
                AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                Xem thêm tại Online Store ---> Click here
                Mob: 0982.083.106

                Comment


                • #38
                  Ngày trước em dùng MegaLoad với con 8535 mãi mà, có sao đâu nhỉ?
                  PNLab
                  Mạch nạp/debug ULink2, Jlink ARM USB
                  Mạch nạp AVR, PIC, 8051, MSP430 USB
                  Mạch phát triển STM32, ARM9, ARM11
                  more...www.pnlabvn.com

                  Comment


                  • #39
                    Nguyên văn bởi sphinx Xem bài viết
                    Ngày trước em dùng MegaLoad với con 8535 mãi mà, có sao đâu nhỉ?
                    Thế là lại phải thử à?
                    Chú sphinx này ác.
                    AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                    Xem thêm tại Online Store ---> Click here
                    Mob: 0982.083.106

                    Comment


                    • #40
                      Cứ xóa cái đoạn mã mov reset vector đi, không có nó cũng không sao đâu tại vì hình như trong source này không có đụng tới interrupt.

                      Bạn nên dùng đoạn mã thứ hai để thoát khỏi bootloader(vì lệnh "rjmp" thường không chuẩn, đặc biệt là với một số trình dịch, nó hiểu địa chỉ 0x00 là địa chỉ đầu tiên của chương trình chứ không phải là của bộ nhớ Flash,hơn nữa phạm vi hoạt động của lệnh "rjmp" chỉ có 2KB thôi, về lý thuyết thì không thể "nhảy" ngược về đầu bộ nhớ Flash được vì Mega8535 có 8K lận, nếu dịch với AVR-GCC thì coi chừng cái này), trước khi thoát,tốt nhất là khởi tạo lại các thanh ghi quan trọng như SREG(disable cái bit I). Ngoài việc cái bootloader nó không chụi thoát thì còn vấn đề gì không nữa nhỉ !

                      Protocol của MegaLoad đơn giản và không có quy tắc chung nên hơi khó kiểm tra.

                      NVT2
                      Tín đồ AVR giáo.

                      Comment


                      • #41
                        Lý do cực chuối

                        %^$%&%&$%^#$^$&%$$@$@%#^%$&$%%#%!$@$@#^$&%^&%!$!&^ $&%$
                        Làm vài câu cho hạ hỏa đã

                        Em đã giải quyết xong con Mega Load - bootloader này.

                        Lý do cho cái lỗi cứ nạp đi nạp lại ở trên là do cái file hex nạp cho phần app em để trong ổ flash. Copy nó sang ổ cứng là nạp ngon. Pó tay với cái lỗi này. (Các bác đọc xong đừng cười nhé. )

                        @Sphinx: Con STK500 tự nhiên hôm nay lại được. Đỡ tốn tiền xăng qua chỗ PNLab.
                        AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                        Xem thêm tại Online Store ---> Click here
                        Mob: 0982.083.106

                        Comment


                        • #42
                          Hix, cậu làm tớ quê độ !

                          NVT2
                          Tín đồ AVR giáo.

                          Comment


                          • #43
                            Đâu dám đâu dám.
                            Mặc dù giúp đỡ của các bác không phải trực tiếp nhưng cũng gián tiếp giải quyết lỗi của iem. Nếu không có các bác giúp iem là iem đã giải tán nó lâu rùi. Nếu diễn đàn này cho thanks nhiều lần thì iem đã gửi các bác cái nữa. Nhưng thui thanks ở đây cũng được.

                            Thanks các pác.
                            AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                            Xem thêm tại Online Store ---> Click here
                            Mob: 0982.083.106

                            Comment


                            • #44
                              Chào các bác,
                              Em thấy các bác cũng nghiên cứu nhiều về bootloader nhưng có ai đã thử ứng dụng này để cập nhật firmware cho các AVR trên các slave trong một mạng 485 chưa? Nếu có nhiều người quan tâm về vấn đề này chúng ta sẽ lập một box riêng để bàn về nó.

                              Comment


                              • #45
                                Bootloader voi ATMEGA8 TQFP

                                Mới rinh về mấy con ATMEGA8 TQFP. Thử nạp bằng ISP thấy khá nhon. Thế mà vẫn làm toi 1 con. Gửi ít kinh nghiệm để ai gặp thằng này đỡ phải trả giá. Con ATMEGA này giá 22K, rất tiện dụng.
                                Với AVR cần chú ý kô thiết kế chân output thẳng ra tải (Led, relay) vì một số chân mux với bên trong nên dòng sink/source của nó chỉ có khoảng 1mA thôi. Nếu không buffer thì rất dễ phải làm lại mạch in.
                                - Mạch nạp ISP: chỉ tốn 1 con 74LS/HC244. Nhớ thêm R 10k giữa MOSI và Vcc.
                                - Bootloader: MegaLoad, 512words, 8MHz internal, 9600.
                                Attached Files
                                Last edited by anhtuan133; 07-11-2007, 12:52.
                                ! ! you can win if you want ! !

                                Comment

                                Về tác giả

                                Collapse

                                RedRose Tìm hiểu thêm về RedRose

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X