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
Thông báo
Collapse
No announcement yet.
MegaLoad - Bootloader for AVR
Collapse
X
-
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
-
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
-
đạ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
-
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
-
Nguyên văn bởi sphinx Xem bài viếtNế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.
NVT2Tín đồ AVR giáo.
Comment
-
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
-
Nguyên văn bởi sphinx Xem bài viếtViế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
Còn về chiện xung đột cỗng COM trên PC chẵng lẽ megaload nó không báo ah !
NVT2Tín đồ AVR giáo.
Comment
-
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
-
Nguyên văn bởi sphinx Xem bài viếtThứ 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ứ 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 !
NVT2Tín đồ AVR giáo.
Comment
-
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
-
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ìnAVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
Xem thêm tại Online Store ---> Click here
Mob: 0982.083.106
Comment
-
Nguyên văn bởi CuongQuay Xem bài viếtMuố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.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11vg, cám ơn bác...........
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 14:37 -
-
bởi khoine9899
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 11:22 -
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
27-11-2024, 20:26 -
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
27-11-2024, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
27-11-2024, 11:28 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 00:35 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:31 -
Comment