Thông báo

Collapse
No announcement yet.

MegaLoad - Bootloader for AVR

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

  • #16
    Em đang muốn tự làm một cái chương trình tương tự như Megaload nhưng đọc cái code Bootloader có một số chỗ không hiểu lắm có pác nào giúp em với không, nếu có pác nào cộng tác với em thì hay quá , viết chương trình bằng VB.net thì em OK nếu pác nào giúp em sau khi làm song em sẽ gởi biếu luôn chương trình mã nguồn viết bằng VB.net để các pác có thể nhúng nó vào phần mềm của mình

    Comment


    • #17
      Theo tớ ko nên viết bằng VB.net vì nó đòi .NET Framework khi cài đặt và chạy, trong khi phần lớn các máy tính ở VN ko cài đặt cái này, việc cài mới sẽ cõng theo bộ cài framework khá nặng (cỡ 20M), và thực tế là với ứng dụng này viết bằng .NET hay bằng VS6.0 là như nhau.
      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


      • #18
        Hôm nay mới động đến cái này. Avr thì dùng mega8535 16PU, thạch anh ngoài 110592, tốc độ baud 19200. Cài bản mới nhất roài nhưng không hiểu sao khi nạp nó cứ nạp từ trang 0 - trang 38 (mà không hiểu sao lại trang 38 ) rồi lại chạy lại cho đến khi treo báo lỗi Mega Load.
        Cao thủ nào làm rồi giúp tại hạ cái.
        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


        • #19
          đại ca mô tả quy trình thực hiện đê! vài cái ảnh nữa đàn em sẽ giúp cho!
          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


          • #20
            Có lẽ code của bác init USART ?
            Bác chèn thử 1 đoạn delay vào xem sao.
            Còn nó nạp đến page38 là firmware của bác chỉ đến đó thôi.

            Comment


            • #21
              Nếu code có sử dụng đến UART, thì phải tắt nguồn của mạch rồi mới bật MegaLoad, cấp nguồn cho mạch để nạp!

              Một cách khác là giữ nút Reset, bật megaload lên, nhả nút reset ra để bắt đầu nạp.
              Trong một số trường hợp, mã chỉ có thể nạp lần đầu tiên dù đã chọn BOOTRESET fuse. Để giải quyết cần lặp lại thêm 1 lần gửi lệnh 'v' trong bootloader do chữ 'v' đầu tiên gửi lên thường bị lỗi.
              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


              • #22
                Nguyên văn bởi sphinx Xem bài viết
                Nếu code có sử dụng đến UART, thì phải tắt nguồn của mạch rồi mới bật MegaLoad, cấp nguồn cho mạch để nạp!

                Một cách khác là giữ nút Reset, bật megaload lên, nhả nút reset ra để bắt đầu nạp.
                Trong một số trường hợp, mã chỉ có thể nạp lần đầu tiên dù đã chọn BOOTRESET fuse. Để giải quyết cần lặp lại thêm 1 lần gửi lệnh 'v' trong bootloader do chữ 'v' đầu tiên gửi lên thường bị lỗi.
                Nghe phức tạp quá nhỉ ! Mà rốt cuộc là phải làm thế nào mới "có thêm một lần gửi chử v vậy " !

                NVT2
                Tín đồ AVR giáo.

                Comment


                • #23
                  Viết hơi vội nên ko được kỹ! bản chất của nó thế này!

                  Khi AVR khởi động, tùy vào giá trị của fuse BOOTRST mà vector reset sẽ trỏ đến địa chỉ bootloader BOOTRST = 0) hoặc Application(địa chỉ 0000 khi BOOTRST = 1).

                  Trong lần đầu tiên nạp bootloader, phần Application hoàn toàn trống. Bootloader sẽ đương nhiên được gọi cho dù BOOTRST có như thế nào! Khi đó chắc chắn sẽ nạp được Flash bằng Bootloader.
                  Tuy nhiên sau lần nạp đầu tiên, Application đã có mã, lúc đó nếu BOOTRST = 1 thì Bootloader sẽ ko được gọi nữa. Bạn chỉ có thể nạp 1 lần duy nhất lúc ban đầu!

                  Nếu đã set BOOTRST = 0, phần mã trong vùng bootloader sẽ luôn được gọi khi khởi động, bạn cần tick fuse này.

                  Khi khởi động bootloader (ở đây là megaload) sẽ gửi một kí tự qua đường UART (ở đây là dấu '>' không phải chữ 'v', nhầm) và chờ phản hồi từ phía máy tính, nếu phần mềm trên máy tính đang chờ sẵn, bootloader và phần mềm sẽ bắt tay với nhau và thực hiện việc lập trình.

                  Ngược lại nếu ko có thông tin phản hồi (timeout khoảng vài trăm ms) bootloader sẽ đưa con trỏ chương trình về địa chỉ 0x0000 và thực thi ứng dụng như bình thường.

                  Do nguyên nhân trên, bạn luôn phải bật phần mềm Megaload sau đó reset AVR để bắt đầu quá trình nạp.
                  Nếu chương trình ứng dụng sử dụng cổng UART và có dữ liệu truyền ra ngoài, dữ liệu này sẽ làm rối loạn phần mềm Megaload (do sai baudrate, sai kí tự bắt tay....) dẫn đến không thể kết nối được khi reset AVR.

                  Chính vì thế ta cần giữ cho AVR không hoạt động trước khi được Reset (tắt nguồn hoặc giữ nút reset).

                  Về vấn đề sai kí tự bắt tay, đây là kinh nghiệm thực tế, trong một số trường hợp kí tự bắt tay đầu tiên gửi lên sau khi reset luôn sai, do đó Megaload không thể nhận ra bootloader. Giải pháp là thêm 1 lệnh truyền kí tự bắt tay nữa, sau lệnh thứ nhất.
                  File cần sửa là main.c

                  do
                  i = _UDR; // read and ignore data until buffer clear
                  while(_UCSRA & 0x80);

                  TxChar('>'); // Kí tự bắt tay gửi đi

                  // Vị trí chèn thêm

                  if (RxChar() == '<') // Kí tự bắt tay nhận về
                  {
                  TxChar(DeviceID);
                  TxChar(FlashSize);
                  TxChar(BootSize);
                  TxChar(PageSize);
                  TxChar(EEpromSize);
                  TxChar('!');
                  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


                  • #24
                    Nguyên văn bởi sphinx Xem bài viết
                    Viết hơi vội nên ko được kỹ! bản chất của nó thế này!

                    Khi AVR khởi động, tùy vào giá trị của fuse BOOTRST mà vector reset sẽ trỏ đến địa chỉ bootloader BOOTRST = 0) hoặc Application(địa chỉ 0000 khi BOOTRST = 1).

                    Trong lần đầu tiên nạp bootloader, phần Application hoàn toàn trống. Bootloader sẽ đương nhiên được gọi cho dù BOOTRST có như thế nào! Khi đó chắc chắn sẽ nạp được Flash bằng Bootloader.
                    Tuy nhiên sau lần nạp đầu tiên, Application đã có mã, lúc đó nếu BOOTRST = 1 thì Bootloader sẽ ko được gọi nữa. Bạn chỉ có thể nạp 1 lần duy nhất lúc ban đầu!

                    Nếu đã set BOOTRST = 0, phần mã trong vùng bootloader sẽ luôn được gọi khi khởi động, bạn cần tick fuse này.

                    Khi khởi động bootloader (ở đây là megaload) sẽ gửi một kí tự qua đường UART (ở đây là dấu '>' không phải chữ 'v', nhầm) và chờ phản hồi từ phía máy tính, nếu phần mềm trên máy tính đang chờ sẵn, bootloader và phần mềm sẽ bắt tay với nhau và thực hiện việc lập trình.

                    Ngược lại nếu ko có thông tin phản hồi (timeout khoảng vài trăm ms) bootloader sẽ đưa con trỏ chương trình về địa chỉ 0x0000 và thực thi ứng dụng như bình thường.

                    Do nguyên nhân trên, bạn luôn phải bật phần mềm Megaload sau đó reset AVR để bắt đầu quá trình nạp.
                    Nếu chương trình ứng dụng sử dụng cổng UART và có dữ liệu truyền ra ngoài, dữ liệu này sẽ làm rối loạn phần mềm Megaload (do sai baudrate, sai kí tự bắt tay....) dẫn đến không thể kết nối được khi reset AVR.

                    Chính vì thế ta cần giữ cho AVR không hoạt động trước khi được Reset (tắt nguồn hoặc giữ nút reset).

                    Về vấn đề sai kí tự bắt tay, đây là kinh nghiệm thực tế, trong một số trường hợp kí tự bắt tay đầu tiên gửi lên sau khi reset luôn sai, do đó Megaload không thể nhận ra bootloader. Giải pháp là thêm 1 lệnh truyền kí tự bắt tay nữa, sau lệnh thứ nhất.
                    File cần sửa là main.c
                    Nghe đồn megaload có khả năng check whenever bạn nhấn nút Reset cơ mà ! Check được như vậy thì cần gì phải lo lắng về chiện "rối" nữa nhỉ ! Hình như ai đó quên phần này thì phải !

                    Còn về chiện xung đột cỗng COM trên PC chẵng lẽ megaload nó không báo ah !

                    NVT2
                    Tín đồ AVR giáo.

                    Comment


                    • #25
                      Thứ nhất: Không ai đề cập đến chuyện xung đột cổng COM

                      Thứ hai: phần mềm Megaload chạy trên máy tính ko có cách nào biết được khi nào thì vi điều khiển bị reset. Nó chỉ biết chờ kí tự gửi lên mà thôi.

                      Nếu dữ liệu gửi lên có baudrate khác với xác lập trên Megaload, thì chắc chắn là nó đơ, không thể phản kháng gì trong trường hợp này.
                      còn nếu baudrate đúng, thì không có vấn đề gì, trừ khi gửi lên đúng kí tự bắt tay, lúc đó nó cũng sẽ đơ!
                      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


                      • #26
                        Nguyên văn bởi sphinx Xem bài viết
                        Thứ nhất: Không ai đề cập đến chuyện xung đột cổng COM

                        Thứ hai: phần mềm Megaload chạy trên máy tính ko có cách nào biết được khi nào thì vi điều khiển bị reset. Nó chỉ biết chờ kí tự gửi lên mà thôi.

                        Nếu dữ liệu gửi lên có baudrate khác với xác lập trên Megaload, thì chắc chắn là nó đơ, không thể phản kháng gì trong trường hợp này.
                        còn nếu baudrate đúng, thì không có vấn đề gì, trừ khi gửi lên đúng kí tự bắt tay, lúc đó nó cũng sẽ đơ!
                        Cái này là screenshot của web site microsyl nhá, nếu là dân chuyên nghiệp như sphinx mà còn phát biểu "phần mềm Megaload chạy trên máy tính ko có cách nào biết được khi nào thì vi điều khiển bị reset" thì hơi bị lạ ah nghen !

                        Cứ thử vừa chạy megaload vừa chạy chương trình terminal trên cùng một cổng COM xem nó có kêu la gì không !

                        NVT2
                        Attached Files
                        Tín đồ AVR giáo.

                        Comment


                        • #27
                          Qua những gì bạn phát biểu tôi nghĩ bạn hoàn toàn ko hiểu gì về cách thức hoạt động của Megaload thì phải! Tôi đã đề cập rất rõ ràng các khía cạnh của vấn đề! Tôi ko có thời gian giải thích cho bạn hiểu! Xin chào!
                          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


                          • #28
                            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
                            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


                            • #29
                              Nguyên văn bởi CuongQuay Xem bài viết
                              Muốn bảo mật code ứng dụng trong chip khi sử dụng Bootloader thì kiếm cái DES BootLoader. Ứng dụng được mã hóa dưới dạng DES nên khi đạo tặc chôm mắt hex code trong app thì còn cần phải giải mã ra mới sử dụng được. Nói chung Boot Loader chỉ dùng để học. Làm ứng dụng rất củ chuối nếu cần bảo mật code, else làm rất sướng khi bảo hành nạp lại hay nâng cấp firmware.
                              Anh Cường không biết có thức khuya không mà giải thích nghe mà thấy mấy cả hồn luôn! He he, không biết có cái nào là Des-BootLoader???? Hay do anh Cường tự sáng kiến ra vậy!??? Xin chỉ bảo thêm để anh em sáng thêm với.

                              Comment


                              • #30
                                oh hay thật, sau khi tìm hiểu quả nhiên là có desbootloader! đúng thật là với desbootloader thì khó có thể bị unlock.
                                Attached Files

                                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