آردوینومقدماتی۹ دقیقه مطالعهArduino IDE 2.x / Uno R3

خطاهای آپلود و رفع آن‌ها

زنجیرهٔ آپلود آردوینو را می‌شناسید و خطاهای رایج avrdude را با متن دقیق پیام، علت و راه‌حل گام‌به‌گام رفع می‌کنید.

آنچه در این درس می‌آموزید

  • زنجیرهٔ کامپایل و avrdude و بوت‌لودر را توضیح دهید
  • خطاهای پرتکرار آپلود را با متن دقیقشان تشخیص دهید
  • چک‌لیست تفکیک کابل و پورت و برد و درایور را اجرا کنید
نویسنده: تیم داکنامه · بازبینی: ۲۰۲۶-۱۰-۳۱
فهرست مطالب

Verify سبز شد، اما دکمهٔ Upload خطای قرمز می‌دهد و برنامه روی برد نمی‌رود. این دسته از خطاها ربطی به کد شما ندارند؛ زنجیرهٔ ارتباط بین رایانه و برد جایی شکسته است. در این درس زنجیره را می‌شناسید تا بدانید کجا می‌شکند و بعد خطای اصلی را یکی‌یکی رفع می‌کنید.

آپلود چطور انجام می‌شود؟

وقتی Upload را می‌زنید سه اتفاق پشت هم می‌افتد:

  1. کامپایل — کد شما به کد ماشین ATmega ترجمه می‌شود (درس قبل).
  2. avrdude — برنامهٔ کوچکی به همین نام روی رایانه اجرا می‌شود و فایل ترجمه‌شده را از پورت سریال می‌فرستد.
  3. بوت‌لودر (Bootloader) — یک برنامهٔ کوچک که کارخانه داخل فلش برد نوشته است؛ avrdude به آن حرف می‌زند و بوت‌لودر بایت‌ها را در فلش می‌نویسد و سپس برد ریست و برنامهٔ شما اجرا می‌شود.

راه ارتباطی، همان تراشهٔ تبدیل USB به سریال روی برد است (روی Uno رسمی ATmega16U2 و روی بسیاری از برد سازگار CH340). هنگام آپلود باید دو LED کوچک با نام‌های TX و RX روی برد چند بار سریع چشمک بزنند؛ این دو یعنی داده در حال رفت‌وآمد است. اگر هنگام آپلود هیچ چشمکی ندیدید، داده اصلاً به برد نمی‌رسد — سرنخ مهمی است.

stk500_recv(): programmer is not responding

پیام کامل معمولاً چنین است:

text
avrdude: stk500_recv(): programmer is not responding

یعنی avrdude به بوت‌لودر سلام کرد اما جوابی نگرفت. علت‌ها به ترتیب شیوع:

  • پورت اشتباه — در Tools > Port پورت دیگری انتخاب شده است. با روش درس نصب، پورت واقعی را پیدا کنید: برد را جدا کنید، فهرست را ببینید، برد را وصل کنید و آیتم جدید را انتخاب کنید.
  • برد اشتباه — Tools > Board با برد واقعی شما نمی‌خواند.
  • کابل فقط شارژی — کابل‌های ارزان فقط دو سیم تغذیه دارند و داده رد نمی‌شود؛ ON روشن است اما پورت اصلاً ظاهر نمی‌شود. کابل دیگری امتحان کنید.
  • سریال مانیتور یا برنامهٔ دیگری پورت را گرفته — پورت سریال یک‌راهِ انحصاری است؛ مانیتور را ببندید و دوباره آپلود کنید.
  • درایور نصب نیست — ادامهٔ درس را ببینید.

Board at ... is not available

اگر پورت خاکستری باشد یا آپلود با این پیام متوقف شود:

text
Board at COM3 is not available

یعنی IDE آن پورت را در سیستم‌عامل نمی‌بیند: کابل جدا شده، برد ریست شده یا درایور نصب نیست. کابل را عوض کنید و برد را دوباره وصل کنید تا آیتم پورت در فهرست دوباره ظاهر شود.

not in sync و butterfly_recv

دو شکل دیگرِ همین «جواب نگرفتن»:

text
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
text
avrdude: butterfly_recv(): programmer is not responding

هیچ‌کدام علت جدیدی ندارند؛ همان پورت یا برد یا کابل یا درایور است. butterfly_recv معمولاً وقتی ظاهر می‌شود که برد انتخابی با پروتکل بوت‌لودر واقعی برد شما فرق دارد — یعنی در Tools > Board برد دیگری انتخاب شده است. روی برد سازگار هم ممکن است بوت‌لودر متفاوت باشد؛ برد درست را از فهرست انتخاب کنید.

invalid device signature

اگر این را دیدید:

text
avrdude: invalid device signature

یعنی برد به avrdude جواب داد اما امضای تراشه با انتظارش نخواند؛ علت کلاسیکش این است که برد اشتباهی انتخاب شده (مثلاً Mega در حالی که Uno وصل است). از Tools > Board برد واقعی را انتخاب کنید. اگر با برد درست هم تکرار شد، کابل را عوض کنید و پین‌های برد را بررسی کنید که چیزی روی RX و TX وصل نباشد؛ مدار وصل‌شده به پین ۰ و ۱ می‌تواند آپلود را مختل کند.

درایور CH340 روی برد سازگار

برد سازگار (Clone) اغلب به‌جای ATmega16U2 تراشهٔ CH340 دارد. ویندوز بدون درایور، هیچ پورتی برایش نمی‌سازد؛ در IDE هم پورتی ظاهر نمی‌شود. راه‌حل: درایور CH340/CH341 را از سایت سازندهٔ آن (WCH) نصب کنید، برد را جدا و دوباره وصل کنید و در Device Manager ویندوز دنبال آیتمی مثل USB-SERIAL CH340 (COMx) بگردید. خود برد رسمی Uno به درایور جداگانه نیاز ندارد؛ درایورش همراه نصب IDE می‌آید.

Access is denied

در ویندوز اگر برنامهٔ دیگری پورت را نگه داشته باشد:

text
avrdude: ser_open(): can't open device "\\.\COM3": Access is denied.

سریال مانیتور را ببندید؛ اگر باز هم شد، هر برنامهٔ دیگری که ممکن است سریال را باز کرده باشد (نرم‌افزارهای نمایشگر سریال یا همان پنجرهٔ مانیتور یک پنجرهٔ دیگرِ IDE) را ببندید و دوباره آپلود کنید. همین مشکل در سریال مانیتور با پیام port busy هم دیده می‌شود؛ رفعش یکی است.

چک‌لیست تفکیک گام‌به‌گام

همین ترتیب را اجرا کنید؛ هر گام فقط یک فرض را می‌آزماید:

  1. کابل — کابل USB داده‌دار دیگری بزنید (نه شارژ-فقط).
  2. پورت — برد را جدا و وصل کنید و پورت جدیدِ ظاهرشده را انتخاب کنید.
  3. برد — Tools > Board را با برد واقعی چک کنید.
  4. درایور — Device Manager را ببینید؛ اگر پورت نیست، درایور CH340 یا درایور رسمی را نصب کنید.
  5. اشغال پورت — سریال مانیتور و بقیهٔ برنامه‌های سریال را ببندید و دوباره آپلود کنید.

جدول مرجع سریع

پیام یا نشانه علت محتمل راه‌حل
avrdude: stk500_recv(): programmer is not responding پورت یا برد اشتباه، کابل شارژی، مانیتور باز پورت و برد را درست کنید؛ کابل داده‌دار بزنید
Board at COM3 is not available کابل جدا یا درایور نصب نیست برد را دوباره وصل کنید؛ درایور را نصب کنید
avrdude: ... not in sync: resp=0x00 همان علت‌های stk500_recv چک‌لیست پنج‌گامی را اجرا کنید
avrdude: butterfly_recv(): programmer is not responding برد انتخابی با بوت‌لودر واقعی نمی‌خواند برد درست را از Tools > Board انتخاب کنید
avrdude: invalid device signature برد اشتباه انتخاب شده یا تداخل روی پین ۰ و ۱ برد را اصلاح کنید؛ مدار RX/TX را جدا کنید
پورتی در فهرست نیست درایور CH340 نصب نیست درایور CH340 را نصب و برد را دوباره وصل کنید
avrdude: ser_open(): ... Access is denied. برنامهٔ دیگری پورت را گرفته سریال مانیتور و برنامه‌های سریال را ببندید

تمرین‌ها

تمرین

تمرین ۱ — رفع خطای آپلود به ترتیب

سناریو: اسکچ شما بدون خطا کامپایل می‌شود، اما هنگام آپلود این پیام را می‌بینید: avrdude: stk500_recv(): programmer is not responding. LED روشن (ON) برد روشن است و هنگام آپلود هیچ چشمکی از TX و RX نمی‌بینید. پنج گام چک‌لیست را به همان ترتیب بنویسید و بگویید در هر گام دقیقاً چه چیزی را می‌آزمایید.

نمایش راه‌حل

ترتیب درست: (۱) کابل — LED روشن یعنی برق می‌رسد، اما اگر کابل فقط شارژی باشد برق می‌رسد و داده نه؛ کابل داده‌دار دیگری امتحان می‌کنید. (۲) پورت — با جدا و وصل کردن برد، پورت واقعی را در Tools > Port پیدا و انتخاب می‌کنید. (۳) برد — مطمئن می‌شوید Tools > Board روی Arduino Uno است، نه برد دیگری. (۴) درایور — Device Manager را چک می‌کنید؛ اگر پورت اصلاً در فهرست نیست، درایور CH340 یا رسمی را نصب می‌کنید. (۵) اشغال پورت — سریال مانیتور و هر برنامهٔ سریال دیگری را می‌بندید و دوباره آپلود می‌کنید. نبود چشمک TX و RX یعنی داده به برد نمی‌رسد؛ پس گام‌های ۱ و ۲ محتمل‌ترین‌ها هستند و معمولاً همین‌ها مشکل را حل می‌کنند.

:::

خلاصه

  • آپلود سه حلقه دارد: کامپایل، ارسال با avrdude، نوشتن با بوت‌لودر؛ خطای آپلود یعنی یکی از حلقه‌های ارتباطی قطع است.
  • چشمک TX و RX هنگام آپلود نشانهٔ رسیدن داده است؛ نبودش یعنی مشکل قبل از برد است.
  • بیشتر خطاهای not responding و not in sync پورت یا برد یا کابل یا درایور دارند، نه کد.
  • برد سازگار معمولاً به درایور CH340 از سازندهٔ WCH نیاز دارد.
  • Access is denied یعنی پورت اشغال است؛ مانیتور و برنامه‌های سریال را ببندید.

زنجیرهٔ نرم‌افزار تا ارتباط، مرتب شد؛ در درس بعدی به خود برد می‌رویم و تغذیه و جریان را می‌سنجهیم.

منابع و ارجاع‌ها

درس‌های مرتبط