Tôi đã gạch Arduino Uno của tôi? Vấn đề với việc tải lên bảng


86

Tôi không thể tải bản phác thảo lên Arduino Uno của mình.

  • Tôi đã "gạch" nó?
  • Những bước tôi có thể thực hiện để tìm ra những gì sai?
  • Tôi có thể làm gì để khắc phục nó?

7
Đối với những người thắc mắc, đây không phải là một câu hỏi thực tế! Đó là nhiều hơn một câu hỏi tham khảo. Câu hỏi được thực hiện khá rộng về mục đích. Tuy nhiên, câu trả lời rất chi tiết và vì vậy câu hỏi này có thể được sử dụng làm tài liệu tham khảo.
Paul

2
Đó là nhiều hơn một câu hỏi tham khảo. Hoàn toàn chính xác. Xem OK để hỏi và trả lời câu hỏi của riêng bạn .
Nick Gammon

@Nick_Gammon Có. Nhưng tôi cảm thấy rằng bạn bằng cách nào đó nên đã lưu ý nó ở đâu đó. Ngay từ cái nhìn đầu tiên, tôi đã (hơi) bực mình vì câu hỏi quá rộng và dường như bạn chưa thực hiện bất kỳ nghiên cứu nào. Nhưng khi tôi thấy câu trả lời của bạn, tất cả đều có ý nghĩa. Ngoài ra, (khi bạn có thể) bạn không nên quên chấp nhận câu trả lời của chính mình, để những người khác đang cố gắng giúp đừng bắt đầu trả lời, xem xét hoặc bình luận các câu hỏi về điều này (điều này sẽ không thực sự giúp bạn, như bạn đã tìm thấy một cách khá tốt để gỡ lỗi vấn đề này).
Paul

Cảm ơn vì bạn đã phản hồi. Ban đầu tôi nghĩ sẽ đăng câu hỏi với một lưu ý rằng tôi sẽ đăng câu trả lời của riêng mình, nhưng sau đó tôi thấy hộp kiểm về "trả lời câu hỏi của riêng bạn" vì vậy tôi đã đánh dấu vào đó. Đối với việc chấp nhận nó, tôi không được phép trong 20 giờ. Tôi có vẻ hơi kỳ lạ khi chấp nhận câu trả lời của riêng bạn, nhưng chắc chắn tôi có thể làm điều đó khi tôi được phép. Tôi đã hỏi một câu hỏi trên Meta Arduino Một câu hỏi chính tắc là gì? để cố gắng thực hiện đúng quy trình nhưng không có phản hồi.
Nick Gammon

@FuaZe và Nick Gammon: Nhìn chung, điều này có vẻ tuyệt vời, gợi ý duy nhất tôi đưa ra là làm cho chủ đề trở nên gợi mở hơn về câu hỏi và câu trả lời thực sự là gì. Vì nó là, tôi nghĩ rằng tôi có thể đã bị cám dỗ để thổi nó đi vì quá mơ hồ. Có lẽ tiêu đề có thể là "Làm thế nào tôi có thể khắc phục sự cố tải lên không thành công?"
dlu

Câu trả lời:


115

Nó có lẽ không phải là cục gạch

Tôi đã có khá nhiều Arduinos, và trong vài năm qua chỉ có một "cục gạch", và tôi nghĩ đó là bằng cách hạ gục nó bằng tĩnh điện. Thật không may, một thiết bị đặc biệt có chip xử lý SM (gắn trên bề mặt), vì vậy không dễ để thử đổi nó với chip khác.

Giữ bình tĩnh và thử các bước sau ...


Bảng ví dụ

"Arduino Uno" không chỉ là một thứ có thể thất bại. Nó có nhiều thành phần chính, và có thể chỉ có một thành phần bị lỗi (nếu có). Xem ảnh tham khảo này:

Thành phần chính của Arduino Uno

Các thành phần chính là:

  • Bộ xử lý Atmega16U2 - điều này xử lý giao diện với kết nối USB
  • Bộ xử lý Atmega328P - đây là bộ xử lý "chính" có bản phác thảo của bạn về nó
  • Bộ điều chỉnh điện áp - điều này chuyển đổi nguồn đến từ giắc cắm điện thành 5 V
  • Đèn LED nguồn (màu xanh lá cây) - được đánh dấu "Bật"
  • Đèn LED chỉ báo (màu vàng) được đánh dấu "L" - được kết nối qua op-amp với pin kỹ thuật số 13
  • Đèn LED Rx và Tx (màu vàng) - những đèn này cho biết nếu chip USB (Atmega16U2) đang nhận hoặc truyền

Lưu ý rằng đèn LED Rx và Tx không được kết nối trực tiếp với chân kỹ thuật số 0 và 1 trên bảng (được đánh dấu Rx và Tx). Chúng chỉ sáng nếu bạn đang thực hiện liên lạc nối tiếp qua USB , chứ không phải nếu bạn có thứ gì đó (như GPS) cắm trực tiếp vào chân kỹ thuật số 0 và 1.

Cũng lưu ý rằng vì đèn LED "L" được kết nối qua op-amp, nó có thể phát sáng nếu chân 13 được đặt thành đầu vào trong bản phác thảo của bạn. Điều này là bình thường. Điều đó không có nghĩa là một cái gì đó đang gửi dữ liệu sai.


Kiểm tra nguồn điện

Nguồn USB

  • Cắm bảng vào máy tính của bạn bằng cáp USB và kiểm tra xem đèn LED "Bật" màu xanh lá cây có sáng lên không.

  • Sử dụng đồng hồ vạn năng và một vài bước nhảy để kiểm tra giữa chân 5V và chân GND (mũi tên ở phía dưới). Bạn sẽ nhận được khoảng 5.0 V (tôi có 5.04 V trên máy của tôi).

(Bạn có thể mua đồng hồ vạn năng giá rẻ với giá khoảng 10 đô la nếu bạn không có, nhưng tốt hơn hết là bạn nên mua một chiếc tốt hơn với giá khoảng 50 đô la - kiểm tra tất cả các trang web và cửa hàng điện tử.)

  • Đồng thời kiểm tra giữa chân 3,3 V và chân GND - bạn sẽ nhận được 3,3 V.

Nếu bạn không cắm 5 V với cáp USB được cắm, hãy đảm bảo đầu kia được kết nối với máy tính của bạn. Cũng thử một loại cáp khác.

Giắc cắm điện

  • Nếu bạn đang sử dụng hoặc dự định sử dụng, giắc cắm nguồn (được đánh dấu "cấp nguồn" trên ảnh) sẽ ngắt kết nối USB và cắm nguồn điện - phải là 7 đến 12 V DC với cực dương ở chân giữa .

  • Đo các chân 5 V và 3,3 V như trên. Bạn vẫn sẽ thấy các điện áp tương tự trên chúng.

Nếu bạn nhận được 5 V với USB được kết nối, nhưng không có nguồn điện thì bộ điều chỉnh điện áp (được đánh dấu trên ảnh) có thể bị hỏng. Hoặc, có thể việc cung cấp điện đã thất bại. Hãy thử một nguồn cung cấp năng lượng khác nhau để xác nhận đó là.


Kiểm tra đèn flash LED bật nguồn

Nếu bạn có bộ tải khởi động Optiboot (Uno thường đi cùng với nó) thì nếu bạn nhấn và nhả nút Reset, hoặc rút phích cắm và cắm lại USB hoặc cáp nguồn, đèn LED "L" sẽ nháy nhanh 3 lần. Thời gian "bật" và "tắt" là 50 ms mỗi lần, ba lần nhấp nháy sẽ kết thúc trong khoảng 1/3 giây.

Nếu không, bạn có thể gặp sự cố với bộ nạp khởi động hoặc chip xử lý chính (Atmega328P).


Hãy thử tải lên một bản phác thảo

Quan trọng: Nếu bạn gặp sự cố khi tải lên bản phác thảo, hãy xóa mọi thiết bị được kết nối (như tấm khiên). Cũng loại bỏ dây nhảy cắm vào ổ cắm bảng. Cụ thể, không nên cắm bất cứ thứ gì vào chân kỹ thuật số 0 và 1 (Rx và Tx) vì điều đó sẽ cản trở việc giao tiếp với máy tính đang tải lên.

Chọn một trong những bản phác thảo ví dụ đơn giản (ví dụ: Blink) và thử tải nó lên. Đây là những gì bạn sẽ thấy:

  • Đèn LED "L" sẽ nhấp nháy 3 lần. Điều này là do chip chính đang được thiết lập lại bằng lệnh từ quá trình tải lên.

  • Đèn LED "Rx" sẽ nhấp nháy nhanh. Đây là hướng dẫn từ quá trình tải lên cố gắng kích hoạt bộ nạp khởi động.

  • Đèn LED "Tx" sẽ nhấp nháy nhanh. Đây là bộ xử lý thừa nhận dữ liệu đã tải lên.

Bạn có thể thấy ở trên, ngay cả khi quá trình tải lên không thành công. Điều này có thể là do loại bảng sai được chọn.

Nếu chỉ đèn LED "Rx" nhấp nháy, có thể là do sự cố với bộ tải khởi động hoặc chip xử lý chính (Atmega328P). Có người đang gõ cửa, nhưng không có ai ở nhà!

Kiểm tra loại bảng

Nếu đèn LED nhấp nháy, nhưng bạn nhận được một thông báo như thế này:

avrdude: stk500_recv(): programmer is not responding

Kiểm tra loại bảng:

Menu loại bảng

Nếu bạn chọn loại bảng sai, nó có thể sẽ gửi hướng dẫn tải lên sai và hết thời gian hoặc không thành công. Nếu bạn giống như tôi và có các bảng khác nhau nằm xung quanh thì thật dễ quên rằng lần tải lên cuối cùng bạn đã làm là cho một loại bảng khác.

Kiểm tra cổng comm

Nếu đèn LED hoàn toàn không nhấp nháy, bạn có thể đã chọn cổng comm sai.

Kiểm tra cổng comm:

Menu cổng Comm

Hãy thử một PC / Mac khác nếu có thể

Hãy thử Arduino của bạn trên PC / Mac khác nếu bạn có một tay. Điều này có thể thu hẹp xem bạn có gặp sự cố với máy tính cụ thể mà bạn đã cắm hay máy tính nói chung hay không.

Làm một bài kiểm tra loopback

  • Ngắt kết nối tất cả các lá chắn và các dây khác
  • Tháo bo mạch khỏi nguồn điện
  • Kết nối dây nhảy từ RESET sang GND (dây màu cam trong ảnh)
  • Kết nối dây nhảy từ Rx đến Tx (dây trắng trong ảnh)

Đấu dây:

Kiểm tra vòng lặp

  • Cắm cáp USB và khởi động chương trình thiết bị đầu cuối - chẳng hạn như Terminal Monitor trong Arduino IDE. Nhập một cái gì đó và gửi nó (ví dụ: nhấn Enter trong Terminal Monitor).
  • Tất cả mọi thứ bạn gõ nên được lặp lại.

Nếu mọi thứ được lặp lại: Điều đó xác nhận bạn có cổng comm đúng, cáp USB vẫn ổn và chip giao diện USB (Atmega16U2) có thể ổn.

Nếu không có gì được lặp lại, kiểm tra:

  • Bạn có cổng comm chính xác.
  • Hãy thử một loại cáp khác. Một số cáp USB giá rẻ chỉ có dây nguồn và không có dây dữ liệu.
  • Kiểm tra trình điều khiển thiết bị cho Arduino được cài đặt. Bạn có thể không cần phải làm điều này nếu bảng đó hoạt động trước đây trên máy tính này, nhưng nó có thể đáng làm nếu đây là lần đầu tiên bạn cắm bảng này vào máy tính này.

Kiểm tra chip Atmega16U2

Nếu bo mạch của bạn không thực hiện kiểm tra vòng lặp ngược lại và bạn chắc chắn rằng cáp USB vẫn ổn, thì bạn có thể tự kiểm tra chip Atmega16U2. Có một tiêu đề ICSP (Lập trình nối tiếp mạch) trên bo mạch, liền kề với chip Atmega16U2 và gần ổ cắm USB.

Ngắt kết nối nguồn trước (rút cáp USB và bất kỳ cáp nguồn nào).

Sau đó, bạn có thể kết nối tiêu đề ICSP thông qua 6 dây nhảy với một Uno tốt đã biết, như trong ảnh:

Kiểm tra chip Atmega16U2

Pin-outs cho tiêu đề ICSP là (từ trên cùng):

Tiêu đề ICSP

Chân 1 trên tiêu đề ICSP gần chip Atmega16U2 được đánh dấu bằng một chấm trắng nhỏ, gần chữ "F" trong "ISF". Chân 1 trên tiêu đề ICSP gần chip ATmega328P được đánh dấu bằng một chấm trắng nhỏ, bên dưới chữ "N" trong "BẬT".

Kết nối:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Kiểm tra lại hệ thống dây điện của bạn.

Sau đó, trên bảng "được biết đến" cài đặt bản phác thảo "Atmega_Board_Detector" như được mô tả trên trang lập trình bộ tải khởi động Atmega . Mã này có tại GitHub - nickgammon / arduino_sketches . Nếu bạn nhấp vào nút Tải xuống trên trang đó, bạn sẽ nhận được một số bản phác thảo hữu ích. Người bạn muốn được gọi là "Atmega_Board_Detector".

Sau khi cài đặt, hãy mở màn hình nối tiếp, đặt thành 115200 baud và bạn sẽ thấy một cái gì đó như thế này:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

Tuy nhiên nếu bạn nhận được một tin nhắn như thế này:

"Failed to enter programming mode. Double-check wiring!"

Điều đó sẽ xuất hiện để chỉ ra rằng ATmega16U2 của bạn không hoạt động.


Kiểm tra chip ATmega328P

Ngắt kết nối nguồn từ Arduino Uno "đã biết" và tua lại bộ nhảy ICSP theo ảnh này, để kết nối chúng với bộ xử lý "chính" trên Uno của bạn:

Kiểm tra chip ATmega328P

Pin-outs cho tiêu đề ICSP là (từ trên cùng):

Tiêu đề ICSP

Chân 1 trên tiêu đề ICSP gần chip ATmega328P được đánh dấu bằng một chấm trắng nhỏ, bên dưới chữ "N" trong "BẬT".

Hệ thống dây vẫn giống như trước đây, ngoại trừ bạn đang kết nối với tiêu đề ICSP khác - cái ở cuối bảng, xa nhất từ ​​ổ cắm USB.

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Sau khi kết nối, hãy mở màn hình nối tiếp, đặt thành 115200 baud và bạn sẽ thấy một cái gì đó như thế này:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

Trong trường hợp này, nó xác nhận rằng bộ xử lý chính đang hoạt động và có bộ tải khởi động Optiboot trên đó.


Những điều bạn có thể sửa chữa

Điều chỉnh điện áp thất bại

Điều này không dễ thay thế, nhưng nó chỉ cần thiết nếu bạn sử dụng giắc cắm điện. Nếu bạn chạy từ USB thì không bắt buộc. Ngoài ra, bạn có thể sắp xếp nguồn cung cấp 4 đến 5 V (ví dụ: pin 3 x AA) và kết nối chúng với ổ cắm 5 V trên bo mạch trực tiếp.


Chip ATmega16U2 không thành công

Điều này chỉ cần thiết để tải lên bản phác thảo qua cổng USB và gỡ lỗi nối tiếp. Nó không đặc biệt dễ dàng để thay thế bởi vì nó là một SM (thiết bị gắn trên bề mặt). Tuy nhiên bạn có thể quản lý mà không có nó.

Bạn có thể tải lên bản phác thảo thông qua tiêu đề ICSP, nếu bạn mua thiết bị lập trình ICSP.

Ví dụ về các thiết bị như vậy được cắm vào ổ cắm ICSP:

USBtinyISP

AVRISP

(Những bức ảnh đó được chụp bởi một Ruggeduino, nhưng khái niệm này giống nhau).


Bạn cũng có thể nhận được cáp FTDI, như thế này:

Kết nối FTDI với Arduino

Kết nối nó với các cổng nối tiếp của bảng của bạn như thế này:

Cáp FTDI

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

Bây giờ bạn có thể tải các bản phác thảo trực tiếp lên bộ xử lý chính, bỏ qua chip USB.


Bạn cũng có thể sử dụng lập trình viên độc lập chip Atmega của tôi để tải lên các tệp .hex - điều này cho phép bạn sao chép tệp .hex để phác thảo vào thẻ SD, sau đó lập trình bảng thông qua tiêu đề ICSP.


Chip ATmega328P không thành công

Bộ xử lý chính có thể được thay thế khá dễ dàng nếu được gắn trong ổ cắm. Nhận một con chip thay thế từ một nơi nào đó như Adaf nhung với giá khoảng US $ 6. Ngoài ra, hãy thử eBay. Hãy thử lấy một con chip có bộ tải khởi động Optiboot trên đó, để tiết kiệm rắc rối.

Cẩn thận thưởng chip hiện có ra khỏi ổ cắm và cài đặt chip mới, lưu ý vị trí của pin 1. Chân 1 có một notch trên chip và hướng chính xác của nó được ghi chú trên ảnh đầu tiên trong bài này với màu vàng dấu chấm (gần cạnh của bảng). Bạn có thể sẽ cần phải duỗi thẳng chân một chút. Giữ chip ở hai đầu và nhẹ nhàng đẩy xuống một bề mặt phẳng, như bàn, cho đến khi được đẩy vào trong một chút. Cố gắng không chạm vào các chân kim loại, bạn có thể hạ gục chúng bằng tĩnh điện.


ATmega328P phản hồi nhưng không có bộ tải khởi động

Tôi có một bản phác thảo tại lập trình viên bộ nạp khởi động Atmega sẽ thay thế bộ tải khởi động Optiboot. Hệ thống dây cũng giống như đối với bản phác thảo máy dò chip. Mã này có tại GitHub - nickgammon / arduino_sketches . Nếu bạn nhấp vào nút Tải xuống trên trang đó, bạn sẽ nhận được một số bản phác thảo hữu ích. Người bạn muốn được gọi là "Atmega_Board_Programmer".

Cài đặt bản phác thảo trên Uno "đã biết" của bạn và kết nối nó với bảng mục tiêu với hệ thống dây được hiển thị trước đó.

Kiểm tra chip ATmega328P

Mở Trình giám sát nối tiếp trên Uno "tốt" của bạn và bạn sẽ thấy điều này:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

Nhập "U" cho trình tải Uno (Optiboot).

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...

Nhập "G" để lập trình chip.

Bạn nên thấy:

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

Điều này mất khoảng một giây. Bây giờ bộ nạp khởi động đã được cài đặt.


Vấn đề hẹn giờ

Đồng hồ bấm giờ (tắt theo mặc định) có thể được cấu hình để đặt lại bộ xử lý sau một thời gian nhất định. Mục đích là để phục hồi từ "treo" cho bộ xử lý được triển khai trong trường. Tuy nhiên, nếu bộ hẹn giờ được đặt trong một khoảng thời gian ngắn (như 16 ms) thì bộ xử lý có thể đặt lại lần nữa trước khi bộ tải khởi động có cơ hội làm bất cứ điều gì.

Các triệu chứng là bạn không thể tải lên bất kỳ bản phác thảo mới. Một số bộ tải khởi động hiện đại (như Optiboot) thực hiện các bước để ngăn chặn vấn đề này là một trong những điều đầu tiên họ làm. Tuy nhiên những người khác thì không.

Điều này có thể khó phục hồi, vì một khi bản phác thảo chạy, bạn có vấn đề về việc đặt lại và nếu bạn gặp vấn đề, bạn không thể thay thế bản phác thảo. Mọi người thường báo cáo rằng họ phải ghi một bộ tải khởi động mới để phục hồi. Tuy nhiên, đó chỉ là vì, như một hiệu ứng phụ, việc ghi bộ tải khởi động sẽ xóa bản phác thảo hiện tại.

một cách để hồi phục. Thực hiện các bước sau:

  • Tắt nguồn hoàn toàn bảng (tháo cáp USB).
  • Giữ nút Đặt lại và giữ nút giữ (hoặc, chạy dây nhảy từ chân RESET sang chân GND). Điều này ngăn bản phác thảo vấn đề bắt đầu và do đó kích hoạt bộ đếm thời gian theo dõi
  • Vẫn giữ phím Reset, kết nối lại cáp USB.
  • Bắt đầu tải lên một bản phác thảo không có vấn đề này (ví dụ: Blink)
  • Khi IDE báo cáo "Đang tải lên", hãy nhả nút Đặt lại (hoặc tháo dây nhảy).
  • Bây giờ nó sẽ tải lên OK - vì bản phác thảo kích hoạt đồng hồ bấm giờ không bao giờ bắt đầu.

Sự cố với tải lên Mega2560

Tôi đề cập đến vấn đề này ở đây, mặc dù bài đăng này thực sự nhắm mục tiêu vào bảng Uno, vì nó khá phổ biến.

Một số phiên bản của bộ tải khởi động Mega2560 tìm kiếm "!!!" trong tải lên đến từ PC và nếu họ thấy điều đó, hãy chuyển sang chế độ gỡ lỗi. Điều này khiến việc tải lên không thành công.

Mã ví dụ:

Serial.println ("Furnace overheating!!!");

Các giải pháp:

  • Cài đặt bộ tải khởi động gần đây hơn. Bản phác thảo "trình tải lên bộ tải khởi động" của tôi được đề cập trước đó trong bài trả lời này sẽ cài đặt bộ tải khởi động không có vấn đề đó.

Hoặc (đơn giản hơn):

  • Không được dùng "!!!" trong bản phác thảo của bạn.

Các vấn đề khi tải lên Leonardo / Micro / Esplora, v.v.

Các bo mạch với bộ xử lý ATmega32u4 là bộ xử lý chính (và duy nhất) của chúng có thể phức tạp hơn để tải lên. Điều này là do cùng một con chip phải xử lý tải lên và cũng chạy mã của bạn.

Có một cửa sổ cơ hội nhỏ, sau khi bảng được thiết lập lại, khi nó tìm kiếm một bản phác thảo mới sẽ được tải lên. Kỹ thuật để tải lên các bảng này là:

  • Biên dịch bản phác thảo của bạn mà không có lỗi.
  • Bắt đầu tải lên
  • Ngay khi IDE báo cáo "Đang tải lên", nhấn và thả nút Đặt lại.

Bạn chỉ có một giây hoặc lâu hơn để làm điều này, trước khi bản phác thảo cũ bắt đầu chạy. Đừng nản lòng nếu bạn phải lặp lại quá trình này một vài lần. Đó là bình thường.


Người giới thiệu


5
Ồ Đây là một câu trả lời tuyệt vời tuyệt vời
rpax

1
Đó là một câu trả lời tuyệt vời thưa ông.
Mert Gülsoy

"Nếu bạn nhận được 5 V với USB được kết nối, nhưng không có nguồn điện thì bộ điều chỉnh điện áp (được đánh dấu trên ảnh) có thể bị hỏng. Hoặc, có thể nguồn điện bị hỏng. Hãy thử một nguồn cung cấp năng lượng khác để xác nhận đó là nguồn nào . " - tại sao điều này sẽ ngăn bạn tải lên bản phác thảo?
dùng2813274

Bạn hoàn toàn đúng, nó sẽ không. Tuy nhiên, danh sách kiểm tra được cho là một danh sách kiểm tra chung cho các thất bại. Trong trường hợp này, nó sẽ giống như "Tôi có thể tải lên một bản phác thảo, nhưng khi được triển khai trên thực địa, với nguồn cung cấp năng lượng (mụn cóc trên tường) thì nó không hoạt động".
Nick Gammon

1
Gần đây tôi đã gặp một vấn đề với các trình điều khiển FTDI mới rằng "cục gạch" "tương thích FTDI" của Trung Quốc (cũng có thể nói là giả). Họ đặt PID của thiết bị về 0x0000, điều này sẽ làm cho các trình điều khiển không hợp lệ. Bạn có thể chọn thay đổi trở lại PID bằng công cụ M_PROG trên FTDI hoặc thay đổi trình điều khiển (và thiết lập các cửa sổ để cho phép trình điều khiển chưa được xác minh).
Paul

14

Ít nhất - như tôi giả sử bạn tải lên bản phác thảo của mình qua avrdude - vui lòng cung cấp thêm thông tin về lỗi tải lên (ví dụ: đầu ra của trình tải lên bản phác thảo) để mọi người ở đây có thể giúp bạn tốt hơn.

Ngoài câu trả lời tuyệt vời của Nick Gammon, vui lòng tìm kiếm dấu chấm than trong bản phác thảo của bạn. Nếu bản phác thảo của bạn chứa một chuỗi có nhiều hơn hoặc bằng 3 dấu chấm than, quá trình tải lên sẽ thất bại, vì các phiên bản cũ của Arduino Bootloader sẽ diễn giải các dấu chấm than này là một chức năng khác và quá trình tải lên sẽ dừng lại.

Một ví dụ để dừng tải lên:

char* test = "This will stop the upload!!!";

Xem vấn đề về Mã Google .


1
Điểm tốt. Điều này áp dụng chủ yếu cho Mega2560, nhưng tôi thừa nhận tôi đã bỏ qua điều đó. :)
Nick Gammon

1
Đã thêm một phần để đối phó với vấn đề này.
Nick Gammon

2

Tôi đã gạch 2 lần ATMega328P trên bo mạch Arduino Uno của mình do tĩnh (tôi nghĩ vậy).

Tĩnh dường như đã giết chết pin TX và do đó chương trình không thể được tải xuống bằng cáp USB.

Giải pháp đơn giản nhất là thay thế vi điều khiển. Bạn có thể mua một ATMega328P DIP mới được lập trình với bộ tải khởi động Arduino ( chẳng hạn như cái này từ Adaf nhung ) và bạn đã sẵn sàng để đi lại.

Ngoài ra, bạn vẫn có thể lập trình ATMega328P bằng cách sử dụng trình lập trình AVRISPmkII. Khi bạn làm, tất cả trừ pin Tx hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.