Arduino có thể dễ dàng nạp code và chạy chương trình chỉ với thao tác đơn giản cắm board mạch vào máy tính chọn cổng COM và nhấn nút Upload. Để làm được như vậy, bên trong chip vi xử lý được nạp sẵn một đoạn mã lệnh gọi là boot loader. Boot loader luôn luôn được chạy lên đầu tiên, sau đó mới chuyển quyền điều khiển lại cho phần mã của người dùng nạp vào.
Như vậy để các Chip Arduino có thể làm việc được với Arduino IDE thông qua giao tiếp USB-COM thì trong vi điều khiển phải được nạp sẵn boot loader. Các board mạch Arduino bán sẵn trên thị trường như Arduino Uno, Arduino Nano, Arduino Mega 2560,... đều được nạp sẵn boot loader. Như vậy ưu điểm của boot loader là để người dùng dễ dàng tiếp cận, thử nghiệm, và làm ra được sản phẩm nhanh chóng, dễ dàng. Nhưng nhược điểm là boot loader luôn luôn cần một khoảng thời gian từ 1.6s đến 2s để khởi động. Nếu bạn không muốn mất 1.6 - 2s đầu tiên mà muốn chương trình chạy gần như ngay lập tức khi cấp nguồn hoặc reset thì dùng mạch nạp USBasp để nạp code trực tiếp không thông qua boot loader. Ngoài ra mạch nạp USBasp có thể dùng để nạp boot loader cho những con chip chưa có boot loader hoặc là boot loader bị hỏng vì lý do nào đó.
Mạch nạp USBasp có giá vào khoảng 40k nhưng rất hữu ích có thể làm được nhiều thứ hay ho.
1. Driver cho mạch nạp USBasp
Mình dùng windows 10, vì vậy cần phải nạp WinUSB (v6.1.7600.16385) driver.
- Cắm USBasp vào máy tính, mở Device Manager sẽ thấy thiết bị USBasp chưa có driver như hình dưới
- Lưu ý nếu bạn cài đặt không đúng driver, như trường hợp mình cài đặt libusb phiên bản mới nhất thì khi dùng Arduino IDE để nạp code thông qua USBasp sẽ nhận được thông báo lỗi như sau:
Arduino: 1.8.13 (Windows 10), Board: "Arduino Uno"
Sketch uses 924 bytes (2%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: program enable: target doesn't answer. 0
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
the selected serial port does not exist or your board is not connected
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
- Ngoài ra có một lỗi khác với USBasp là thỉnh thoảng kết nối với máy tính bị lỗi và sẽ xuất hiện báo lỗi như sau khi nạp code cho arduino thông qua USBasp:
Sketch uses 924 bytes (2%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
An error occurred while uploading the sketch
avrdude: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'
Đối với tình trạng này, bạn hãy thử rút ra cắm lại USBasp và xem trong Device Manager có xuất hiện thiết bị không. Với các mạch chất lượng thấp, hãy kiểm tra các chân data chỗ đầu usb có được hàn cẩn thận vào vỉ mạch của USBasp không.
2. Kết nối USBasp với arduino
USBasp có jumper để chọn nguồn 3v3 hay 5v thì jumper này cần set ở mức 5v (lật USBasp qua mặt sau để xem chỗ nào là 5v chỗ nào là 3v3). Trong các hình dưới đây, jumper đang được đặt ở mức 5v.
Để tránh xung đột nguồn, không cùng lúc cắm USBasp và cổng USBA (cổng USB mà kết nối giữa board và PC)
Xem các hình dưới đây để biết cách kết nối USBasp với các board arduino uno, mega 2560, và nano.
3. Nạp chương trình cho arduino thông qua USBasp
- Mở Arduino IDE, trong Tools > Board, chọn đúng board tương ứng.
- Không nạp code bằng nút Upload như thông thường mà thay vào đó hãy upload bằng cách vào menu Sketch > Upload Using Programmer hoặc dùng tổ hợp phím tắt là Ctrl + Shift + U.
4. Nạp lại boot loader cho board arduino
Sau khi board được nạp code bằng cách sử dụng USBasp như trên, bạn không thể cắm board vào cổng usb máy tính để nạp code như ban đầu được nữa vì lúc này trong chip AVR đã không còn boot loader.
Để board arduino có thể nạp code lại bình thường bằng cổng USB-COM như ban đầu bạn cần phải nạp boot loader lại cho board mạch. Cách làm là vào Tools > Board chọn đúng board của bạn sau đó cũng trong menu Tools, chọn Burn Bootloader, chờ một chút để quá trình hoàn tất, sau đó bạn có thể rút giắc cắm ICSP ra ra và cắm board vào cổng usb máy tính và nạp code bằng cách như trước đây.
Lưu ý: Không cùng lúc cắm mạch nạp USBasp và cổng USB-PC vì có thể gây ra xung đột ngồn.
Với một số board arduino nano cũ, Atmega328 (Old Bootloader) thì có thể chọn Tools > Processor là Atmega328 sau đó chọn Tools > Burn Bootloader để cập nhật boot loader. Việc cập nhật này sẽ giúp cho board chạy với boot loader mới nhất và tránh được lỗi như đề cập ở bài viết "Arduino Nano nạp code không được"
Comments
Post a Comment