Trong khi tôi rất thích đi sâu vào các phương pháp lập trình khác nhau có sẵn, một người khác đã có. Dưới đây là hướng dẫn của Dean Camera về AVRFreaks, Phương pháp lập trình AVR :
Có nhiều cách để lập trình vi điều khiển AVR. Vì nhiều người hỏi về những người khác nhau lúc này hay lúc khác, tôi nghĩ tôi nên phác thảo họ ở đây để câu hỏi của họ có thể được trả lời nhanh chóng và hiệu quả. Xin vui lòng tha thứ cho tôi nếu tôi bỏ lỡ một phương pháp hoặc gây ra lỗi.
PHƯƠNG PHÁP 1: Trong lập trình hệ thống (ISP)
Được hỗ trợ bởi: Phần lớn các AVR (xem bài viết bên dưới)
Các lập trình viên được hỗ trợ: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, bản sao AVRISP, Lập trình viên AVR910, AVRONE
Trong Lập trình hệ thống có lẽ là phương pháp phổ biến nhất để lập trình flash, EEPROM, cầu chì và lockbyte của toàn bộ dòng AVR. ISP có thể lập trình các AVR với tốc độ xung nhịp cực cao (giả sử rằng mục tiêu AVR đang chạy ở tần số cao và lập trình viên hỗ trợ nó) và là phương pháp được lựa chọn cho hầu hết tất cả những người có sở thích về AVR. Có rất nhiều, rất nhiều bản sao AVRISP và lập trình viên AVR910 trên thị trường ngoài các khóa tự làm đơn giản kết nối với cổng song song của máy tính của bạn.
Các thiết kế dongle mới gần đây có thể sử dụng cổng nối tiếp của máy tính, tuy nhiên bằng chứng giai thoại đã nói rằng phương pháp này cực kỳ chậm do những hạn chế kỹ thuật.
ISP yêu cầu rằng mục tiêu AVR đang chạy ở tốc độ xung nhịp ít nhất bốn lần so với đồng hồ ISP. Đây là một cạm bẫy phổ biến và là một nguồn gây nhầm lẫn cho nhiều người mới sử dụng AVR.
PHƯƠNG PHÁP 2: JTAG
Được hỗ trợ bởi: Xem phần trợ giúp của Công cụ AVRStudio để hỗ trợ thiết bị MKI và MKII
Các lập trình viên được hỗ trợ: JTAG-ICE, JTAG-ICE MKII, Dragon, JTAG-ICE, AVRone, STK600 (chỉ lập trình)
Về mặt kỹ thuật JTAG là một hệ thống gỡ lỗi, không phải là một phương pháp lập trình. Tuy nhiên, giao diện JTAG cho phép lập trình một AVR hỗ trợ nó.
JTAG là một công cụ gỡ lỗi trong hệ thống cho phép bạn thao tác và kiểm tra trạng thái của một AVR được hỗ trợ trong khi nó đang chạy trong một mạch. JTAG cho phép người dùng dừng thực thi bất cứ lúc nào, thao tác đăng ký nội bộ của AVR và nhiều hơn nữa.
Các đơn vị JTAG-ICE chính thức từ ATMEL đã được thay thế bởi JTAG-ICE MKII, hỗ trợ giao thức gỡ lỗi mới hơn và được hỗ trợ rộng rãi hơn trên giao thức gỡ lỗi DebugWire trong phạm vi AVR cũng như lập trình thông qua phương thức ISP (xem ở trên).
Bản sao JTAG-ICE có sẵn với giá thấp, tuy nhiên khả năng tương thích hạn chế của chúng chỉ với một số ít AVR giới hạn tính hữu dụng của chúng. Bất kể điều này, nếu AVR của bạn hỗ trợ giao diện JTAG, JTAG-ICE vẫn là một phương pháp và lập trình gỡ lỗi rất hay và hiệu quả.
PHƯƠNG PHÁP 3: Gỡ lỗi
Được hỗ trợ bởi: Nhiều
lập trình viên nhỏ hơn được hỗ trợ bởi các lập trình viên: JTAG-ICE MKII, Dragon, AVRONE
Một lần nữa, DebugWire là một gỡ lỗi thay vì giao diện lập trình, nhưng có thể được sử dụng để tải các chương trình vào các AVR được hỗ trợ. Giao diện dW sử dụng một chân AVR duy nhất (dòng / RESET) cho tất cả các giao tiếp, làm cho nó trở nên lý tưởng cho các thiết bị AVR có số lượng pin thấp.
PHƯƠNG PHÁP 4: Bộ tải khởi động
Được hỗ trợ bởi: Hầu hết các AVR mới hơn
Các lập trình viên được hỗ trợ: Không có
Một lần nữa về mặt kỹ thuật không phải là một phương pháp lập trình. Bộ tải khởi động là một chương trình AVR nhỏ nằm trong phần dành riêng cho người dùng có thể cài đặt của đèn flash thông thường. Bộ tải khởi động sử dụng các tính năng tự sửa đổi flash có sẵn trong các bộ AVR mới hơn để cho phép AVR tự lập trình thông qua dữ liệu chương trình được tải từ nguồn bên ngoài. Bộ tải khởi động có thể lấy dữ liệu của họ từ bất kỳ vị trí nào (ví dụ: thẻ dữ liệu ngoài hoặc thẻ SD), tuy nhiên cho đến nay, loại Bộ tải khởi động phổ biến nhất giao tiếp với PC thông qua cổng RS-232 (nối tiếp) của AVR.
Bộ tải khởi động bị hạn chế ở chỗ chúng tiêu thụ không gian flash (giới hạn kích thước của đèn flash có sẵn cho ứng dụng của AVR) và chúng không thể thay đổi các fusebits của AVR.
Bộ tải khởi động có sẵn rộng rãi trên internet để tải xuống, nhưng chúng gặp phải vấn đề "gà và trứng"; bạn cần một loại lập trình viên khác được liệt kê ở đây để lập trình trong bộ nạp khởi động ở vị trí đầu tiên. Điều này thường được giải quyết bằng cách xây dựng một dongle cổng song song đơn giản (Xem phần ISP) hoặc bằng cách mua một AVR đã được tải sẵn với bộ tải khởi động (ví dụ: bo mạch AVRButoston).
PHƯƠNG PHÁP 5: Lập trình song song điện áp cao (HVPP)
Được hỗ trợ bởi: Hầu hết các AVR không TINY (ngoại trừ)
Các lập trình viên được hỗ trợ: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
Lập trình song song điện áp cao là một phương pháp lập trình hiếm khi được sử dụng, vì những rắc rối cần thiết để thiết lập. Mặc dù vậy, lập trình HVPP thường được sử dụng để "hồi sinh" các AVR có fusebits bị cấu hình sai thông qua một phương pháp lập trình khác.
Cả STK500 và Dragon đều hỗ trợ HVPP. Trong HVPP, chân / RESET của mục tiêu được nâng lên giá trị cao bất thường của 12V, tham gia vào mạch lập trình song song bên trong. Chân / RESET là chân duy nhất của AVR (trên các AVR được hỗ trợ HVPP) có thể được nâng lên một cách an toàn đến mức này.
Bạn có thể tạo khóa HVPP của riêng mình bằng các gói trực tuyến như gói này.
PHƯƠNG PHÁP 6: Lập trình nối tiếp điện áp cao (HVSP)
Được hỗ trợ bởi: Nhiều máy chủ TINY (có ngoại lệ)
Các lập trình viên được hỗ trợ: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
HVSP tương tự như HVPP, ngoại trừ việc truyền dữ liệu được thực hiện một cách thanh thản hơn là song song. Đây là phương pháp lập trình thay thế được sử dụng trên nhiều máy phát điện dòng TINY thiếu chân cho HVPP.
PHƯƠNG PHÁP 7: PDI
Được hỗ trợ bởi: XMEGA AVRs
Các lập trình viên được hỗ trợ: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII
PDI là giao diện lập trình mới dựa trên giao thức debugWire, dành cho dòng XMEGA của AVR. Hiện tại nó không được sử dụng trên bất kỳ bộ vi điều khiển AVR 8 bit nào khác.
PHƯƠNG PHÁP 8: TPI
Được hỗ trợ bởi: 6-pin TINY AVR (ATTINY10, v.v.)
Các lập trình viên được hỗ trợ: STK600, Dragon, AVRISP MKII
TPI là một giao diện lập trình rất nhỏ cho dòng AVRY mới hơn với các chân bị giới hạn, như ATTINY10 6 pin. Giống như dW, TPI sử dụng dòng / RESET của thiết bị như một phần của giao diện truyền thông, nhưng ở đó sự tương tự kết thúc. Do các TINY AVR có kích thước nhỏ không có mạch gỡ lỗi trên chip, giao thức TPI sử dụng giao diện lập trình mới gồm ba chân, trong giao thức bán song công. Vì dòng / RESET cần được nâng lên + 12V để lập trình khi chân RSTDSB của thiết bị được đặt, nên hiện tại chỉ được hỗ trợ bởi bảng lập trình STK600 mới hơn.
Phần Hỏi đáp Phần thưởng!
Đó là phương pháp tốt nhất?
Không có phương pháp "tốt nhất" phổ quát. Lập trình ISP rất đơn giản và cực kỳ phổ biến, tuy nhiên tất cả các phương pháp trên sẽ hoạt động. Hai chế độ lập trình điện áp cao (tùy theo áp dụng cho thiết bị của bạn) là những tính năng phong phú nhất, vì chúng cho phép sửa chữa một bộ điều khiển đã bị hỏng cấu hình. Tuy nhiên, những phương pháp đó là một nỗi đau để thiết lập, do đó lý do hầu hết người dùng đi với ISP.
Tôi đã tạo ra một cổng song song. Tôi có thể sử dụng nó với AVRStudio không?
Tôi không sợ. AVRStudio không thể giao tiếp với bất kỳ khóa "câm" nào - nó yêu cầu một thiết bị lập trình thông minh - chứa chính vi điều khiển - để giải mã giao thức truyền thông mà nó gửi. Các khóa đơn giản không có vi điều khiển phải là "bit-banged" (nghĩa là các tín hiệu thích hợp được mô phỏng qua khóa thông qua máy tính).
Vậy dongle của tôi là vô dụng?
Không. Bạn vẫn có thể lập trình thông qua một dongle làm tại nhà với công cụ phần mềm lập trình của bên thứ ba. AVRDude là một tiện ích dòng lệnh miễn phí tốt, được biết đến - và nó đi kèm với gói WinAVR.
Lựa chọn của tôi là gì nếu tôi muốn lập trình viên của mình làm việc với AVRStudio?
Chọn một lập trình viên sử dụng giao thức hỗ trợ AVRStudio. Đây có thể là giao thức "AVR910" đơn giản (không dùng nữa) hoặc triển khai tùy chỉnh giao thức được sử dụng bởi STK500 / AVRISP. Lưu ý rằng các lập trình viên này yêu cầu một bộ điều khiển vi mô trong đó, dẫn đến tình huống bắt-22. Điều này có thể được giải quyết bằng cách lập trình sẵn chương trình AVR của lập trình viên tại thời điểm mua với phần sụn phù hợp hoặc bằng cách lập trình sẵn chương trình AVR với bộ tải khởi động.
Ok, tôi muốn sử dụng một bộ tải khởi động. Làm thế nào để tôi có được nó ở đó ngay từ đầu?!
Để sử dụng bộ tải khởi động trong một bộ khởi động, trước tiên bạn phải lập trình bộ tải khởi động. Nếu bạn không có một lập trình viên hiện tại (ngay cả một khóa câm đơn giản cũng đủ để lập trình ban đầu), bạn có thể mua các chương trình thay thế được lập trình sẵn bằng một bootloader từ một số nhà cung cấp.
Atmel cũng sản xuất bảng thử nghiệm Butterfly, có MEGA169 AVR được cài sẵn bộ tải khởi động tương thích AVR-Studio.
Cứu giúp! Tôi đã nhầm lẫn với các cầu chì và làm hỏng máy AVR của tôi khi sử dụng ISP!
Lỗi phổ biến nhất là thay đổi cầu chì lựa chọn đồng hồ thành một cài đặt không hợp lệ. Hãy thử đặt đồng hồ bên ngoài vào chân XTAL1 của AVR và xem điều đó có giúp ích không.
Không, nếu có thể, hãy sử dụng một trong các phương pháp điện áp cao. Những cái này sẽ sửa bất kỳ cấu hình sai nào, bao gồm cả những cấu hình liên quan đến nguồn đồng hồ vì các phương thức điện áp cao cung cấp đồng hồ riêng cho AVR để lập trình.
Làm thế nào để tôi giao tiếp với lập trình viên của tôi?
Phần mềm nào bạn sử dụng để giao tiếp với lập trình viên của bạn phụ thuộc vào loại lập trình viên bạn đang sử dụng.
Các dongle "câm" đơn giản yêu cầu phần mềm của bên thứ ba, chẳng hạn như PonyProg hoặc AVRDude. Đây có thể là dòng lệnh hoặc công cụ GUI - nhìn xung quanh trên web và bạn sẽ ổn một cái để phù hợp với nhu cầu của bạn.
Các lập trình viên và bộ tải khởi động dựa trên giao thức AVR910 có thể được sử dụng trong AVRStudio. Từ menu Công cụ, chọn tùy chọn "AVRProg" để mở màn hình GUI để giao tiếp với lập trình viên của bạn. Thay vào đó, các công cụ của bên thứ ba như AVRDude cũng tương thích với AVR910.
Các công cụ chính thức được tích hợp chặt chẽ vào AVRStudio, đặc biệt là trong trường hợp các biến thể gỡ lỗi (JTAG / Dragon / etc). Từ menu Công cụ AVRStudio, chọn menu con "Chương trình AVR ..." và nhấp vào mục "Kết nối". Từ cửa sổ mới, chọn công cụ của bạn và giao diện kết nối của nó và nhấp vào ok.
Như trường hợp của các lập trình viên câm và lập trình viên AVR910, các công cụ chính thức cũng có thể được sử dụng với phần mềm lập trình của bên thứ ba.
(C) Dean Camera, 2009. Tất cả quyền được bảo lưu. Không được sao chép trên bất kỳ trang web nào khác ngoài AVRFreaks.net mà không có sự cho phép rõ ràng trước đó.