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 Trình điều khiển bước rời rạcbởi mèomướpDạ nếu chú đã viết được chương trình cho vđk thì thêm 1 chương trình con chạy động cơ bước chỉ đơn giản là copy phát. Về phần cứng thì vài con cách ly quang, vài con mosfet thôi ạ. thực sự là dễ dàng như bài tập bình thường của sinh viên thôi ạ...
-
Channel: Máy công cụ
Hôm qua, 12:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95vâng mình cảm ơn mn đã góp ý
-
Channel: Điện tử công suất
Hôm qua, 11:30 -
-
bởi tom22Xin chào
Tôi có một dự án trong đó một động cơ bước tích hợp được điều khiển bởi một bộ vi điều khiển.
Nhưng tôi thực sự không thích trả tiền cho trình điều khiển bước, khi tôi có một bộ vi điều khiển có khả năng thực...-
Channel: Máy công cụ
Hôm qua, 10:54 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú chủ thớt có thời gian và đam mê thì cứ từ từ ngâm cứu đi ạ đừng nghe chú Chú bq... dọa mà sợ ạ. Cái nguồn nhìn cũng lởm có khi hông bằng cái máy hàn tàu của chị hàng xóm hôm nọ tháo ra sửa với chú thợ thông ống nước suốt đêm mới xong. Chú ý an toàn xíu là được ạ...
-
Channel: Điện tử công suất
05-01-2025, 15:40 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi bqvietBộ nguồn xung ở tầm công suất 2700W này, gần 3 ký, không bao giờ đơn giản để mà sửa ngay cả đối với người có kinh nghiệm chứ đừng nói người không chuyên. Đám linh kiện công suất không tự nhiên cháy mà phải xuất phát từ nguyên nhân...
-
Channel: Điện tử công suất
04-01-2025, 22:09 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú kiểm tra đi ốt đầu vào, ra nữa ạ. Về phần kiểm tra dao động chú hỏi chị google ấy ạ, có nhìu cô chú đã hướng dẫn rồi ạ...
-
Channel: Điện tử công suất
04-01-2025, 16:53 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95mình đã kiểm tra phần công suất thấy hỏng cả 4 con IGBT mà mình muốn kiểm tra phần dao động và hồi tiếp khi chưa cấp điện cho mạch thì có cách nào không b, mình không phải dân trong nghề lên chưa có kinh nghiệm sửa. Cảm ơn b
-
Channel: Điện tử công suất
04-01-2025, 14:27 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú nhắm phần công suất dễ kiểm tra và hay hư hỏng nhất trước ạ. Rồi đến phần dao động nguồn, hồi tiếp...
-
Channel: Điện tử công suất
04-01-2025, 11:42 -
-
bởi Minhdai95mọi người đã ai sửa bộ nguồn này chưa ạ, cho e xin ít kinh nghiệm để sửa bộ nguồn. Em cảm ơn...
-
Channel: Điện tử công suất
04-01-2025, 11:22 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101
-
Channel: Điện tử dành cho người mới bắt đầu
31-12-2024, 17:39 -
Comment