Tự Chế Bộ Nạp USBasp Và Cấu Hình Trên Linux

Giới thiệu dự án phần cứng mở USBasp

USBasp là một giải pháp nạp firmware mã nguồn mở phổ biến cho các vi điều khiển thuộc dòng Atmel AVR. Bài viết này trình bày quy trình tự lắp ráp mạch phần cứng dựa trên thiết kế mở, đồng thời hướng dẫn nạp firmware và cấu hình môi trường làm việc trên hệ điều hành Linux.

Chuẩn bị phần cứng và linh kiện

Thiết kế mạch in (PCB) có thể được tìm thấy từ các kho lưu trữ mã nguồn mở uy tín, ví dụ như thiết kế sử dụng giấy phép MIT của yellobyte. Người dùng chỉ cần tải file Gerber và gửi đặt hàng tại các xưởng sản xuất mạch.

Danh sách linh kiện (BOM) thường được cung cấp kèm theo dưới dạng file bảng tính. Để thuận tiện cho việc xử lý trên dòng lệnh, có thể chuyển đổi định dạng file sang CSV:

unzip USBasp-BOM.zip
sudo pacman -S csvkit
in2csv USBasp-BOM.xlsx > USBasp-BOM.csv

Sau khi có file CSV, người dùng dễ dàng rà soát và mua sắm linh kiện tương ứng. Trong quá trình hàn lắp, cần đối chiếu kỹ vị trí các linh kiện với sơ đồ nguyên lý, đặc biệt chú ý đến cực tính của tụ điện, LED và hướng của vi điều khiển.

Thiết lập môi trường nạp firmware

Vi điều khiển chính trên mạch USBasp thường là ATmega8 hoặc ATmega88. Để nạp firmware lần đầu, cần sử dụng một bộ nạp ISP khác. Arduino Uno có thể được cấu hình để hoạt động như một bộ nạp ISP thông qua giao diện dòng lệnh.

Cài đặt công cụ hỗ trợ

Trên môi trường Arch Linux, cài đặt arduino-cliavrdude:

sudo pacman -S arduino-cli avrdude

Cấu hình Arduino làm ISP

Kết nối Arduino Uno qua cổng USB và xác định tên thiết bị:

arduino-cli board list

Giả sử thiết bị được nhận diện tại /dev/ttyACM0. Tiến hành biên dịch và nạp mã nguồn ArduinoISP vào board:

arduino-cli compile -b arduino:avr:uno ISP.ino
arduino-cli upload -b arduino:avr:uno -p /dev/ttyACM0 -v ISP.ino

Nạp firmware cho USBasp

Kết nối các chân giao tiếp SPI giữa Arduino và mạch USBasp theo sơ đồ:

  • Arduino Pin 11 (MOSI) → MOSI
  • Arduino Pin 12 (MISO) → MISO
  • Arduino Pin 13 (SCK) → SCK
  • Arduino Pin 10 (RESET) → RESET

Đồng thời, nối ngắn hai chân Self Program trên mạch USBasp để kích hoạt chế độ nạp.

Kiểm tra kết nối

Sử dụng avrdude để xác nhận vi điều khiển ATmega8 đã được nhận diện:

avrdude -c arduino_as_isp -p m8 -P /dev/ttyACM0 -vv

Kết quả trả về thông tin signature 1E 93 07 xác nhận kết nối thành công.

Flash firmware và cấu hình Fuse

Tải và giải nén firmware từ nguồn chính thức:

wget https://www.fischl.de/usbasp/usbasp.2011-05-28.tar.gz
tar -xvf usbasp.2011-05-28.tar.gz
cd usbasp.2011-05-28/bin/firmware

Định nghĩa biến đường dẫn file firmware để tiện thực thi:

FIRMWARE_HEX="usbasp.atmega8.2011-05-28.hex"
avrdude -c arduino_as_isp -p m8 -P /dev/ttyACM0 -U flash:w:$FIRMWARE_HEX -vv

Sau khi nạp xong bộ nhớ flash, cần cấu hình fuse bit để vi điều khiển sử dụng thạch anh ngoài 12MHz thay vì dao động nội:

avrdude -c arduino_as_isp -p m8 -P /dev/ttyACM0 -U hfuse:w:0xC9:m -U lfuse:w:0xEF:m -vv

Kiểm tra hoạt động và cấu hình quyền truy cập

Ngắt kết nối chân Self Program trên mạch USBasp. Cắm mạch vào cổng USB máy tính và kiểm tra log hệ thống:

sudo dmesg -w

Thông báo xuất hiện idVendor=16c0, idProduct=05dcProduct: USBasp cho thấy thiết bị đã được nhận diện.

Để sử dụng USBasp mà không cần quyền root, cần cấu hình udev rules. Copy file rules vào thư mục hệ thống:

sudo cp 99-USBasp.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules

Kiểm tra lại kết nối bằng lệnh:

avrdude -c usbasp -vv

Thử nghiệm nạp chương trình cho ATtiny85

Để验证 hiệu suất, tiến hành nạp firmware cho một board mục tiêu sử dụng chip ATtiny85. Kết nối các chân ISP tương ứng và đảm bảo nguồn điện ổn định (có thể thêm tụ lọc 10uF giữa Vcc và GND).

Kiểm tra nhận diện chip mục tiêu:

avrdude -p attiny85 -c usbasp -B 1 -vv

Thực hiện nạp file hex (ví dụ dự án TV-B-Gone):

TARGET_FW="tvbgone.hex"
avrdude -p attiny85 -c usbasp -B 1 -U flash:w:$TARGET_FW -vv

Cuối cùng, cấu hình fuse bit cho ATtiny85 để sử dụng xung nhịp 8MHz:

avrdude -p attiny85 -c usbasp -B 250 -U lfuse:w:0xfd:m -U hfuse:w:0xdf:m -vv

Quá trình xác minh thành công khi các byte bộ nhớ flash và fuse được ghi nhận chính xác.

Thẻ: usbasp avr avrdude arch-linux embedded-systems

Đăng vào ngày 10 tháng 7 lúc 05:34