شاید تا به حال برای پروگرام کردن میکروکنترلر AVR بارها به مشکلات بسیار زیادی برخورد کرده باشید. برای مثال، در پیدا کردن درایور یا نرم افزار فلش پروگرامر، یا اتصال آن به محیط برنامه نویسی به مشکل برخورده باشید. در این آموزش قصد داریم تا شما را با ابزاری به نام AVRDUDE معرفی کنیم که تا حد بسیار زیادی مشکلات شما را در ارتباط با پروگرامر بر طرف میسازد.
از avrprog تا AVRDUDE
AVRDUDE ابزاری برای بارگیری، بارگذاری و ویرایش محتوای ROM و EEPROM میکروکنترلرهای AVR با استفاده از تکنیک برنامه نویسی درون سیستم (ISP) است. AVRDUDE اولین بار توسط Brian S. Dean جهت پروگرام کردن میکروکنترلر های AVR ساخته شد. اصل این نرم افزار برای سیستم عامل FreeBSD و با نام avrprog ساخته شد. با گسترش نرم افزار و پورت شدن آن برای سیستم عاملهای مختلف، توجهات و استقبال از این نرم افزار بیشتر و بیشتر شد، تا جایی که برایان تصمیم گرفت پروژه خود را بهصورت عمومی در savannah.nongnu.org منتشر کند.
همچنین برایان نام آن را از avrprog به AVRDUDE تغییر داد، زیرا میخواست با avrprog.EXE که در اتمل استودیو وجود داشت، اشتباه نشود.
برخی ویژگی های AVRDUDE
- تمام عملیاتهای آپلود، دانلود و حتی تغییر فیوز بیتها با سادهترین دستورات در رابط کاربری محیط کامند لاین قابل اجرا هستند. این امر به برنامه نویس اجازه میدهد تا آن را به راحتی درون makefile اضافه کنید و عملیات کامپایل و پروگرام بهصورت خودکار صورت پذیرد.
- در حالت ترمینال شما به ویژگیهای بسیار زیادی برای عملیاتهای خود دسترسی دارید. همچنین پارامترهای عملیاتی پروگرام STK500 مثل target voltage, VAref, master clock frequency و… برای شما در دسترس هستند.
- پشتیبانی از گستره بسیار بزرگی از پروگرامرها، مثل: usbASP، STK500، پروگرامرهای پارالل و…
- پشتیبانی از سیستم عاملهای مختلف! همین امر باعث میشود کاربر تفاوت چندانی در کار میان سیستم عاملهای مختلف احساس نکند.
- پشتیبانی از فرمتهای مختلف فایل برای آپلود و دانلود، مثل Intel Hex, Motorola S-Record, binary files. همچنین فرمت فایلی که به عنوان ورودی به AVRDUDE داده شود، بهطور خودکار تشخیص داده میشود.
- در حالت ترمینال، شما میتوانید به مناطق مختلف حافظه (در صورت اجازه داشتن) دسترسی داشته باشید، آنها را بخوانید، بنویسید و دستکاری کنید. حتی فیوز بیتها و خانههای EEPROM را نیز میتوانید تغییر دهید.
دانلود AVRDUDE
این ابزار پس از دانلود نیازی به نصب نداشته و در محیط کامندلاین قابل اجرا میباشد، اما باید آن را در path ویندوز اضافه کنید. بنابراین بهتر است محتویات دانلودی را در درایو C مثلاَ در مسیر C:\AVRDUDE ذخیره کنید.
AVRDUDE در WINAVR، ATMEL STUDIO، آردوینو و بسیاری از بسته های نرم افزاری معروف AVR وجود دارد. شما میتوانید AVRDUDE را بدون دانلود کردن، از مسیر نصب این نرم افزار ها نیز پیدا کنید. برای مثال، اگر نرم افزار آردوینو را نصب دارید، ممکن است در مسیر زیر، AVRDUDE را پیدا کنید. (آدرس محل نصب، ممکن است با توجه به نسخه نصبی و نوع ویندوز شما (64 بیت یا 32 بیت) متفاوت باشد.)
1 | C:\Program Files\arduino\arduino-1.8.11\hardware\tools\avr\bin |
همچنین میتوانید از طریق این لینک بسته avrdude را دانلود کنید.
افزودن به path
بعد از دانلود AVRDUDE، برای این که محیطهای برنامه نویسی مختلف بتوانند از آن استفاده کنند، لازم است تا محل فولدر آن را در path ویندوز اضافه کنید. برای این کار بر روی this PC کلیک راست کرده و properties را بزنید.
سپس بر روی Advances Envirenment setting کلیک کنید.
از پنجره system properties و از تب Advanced، Envirenment Variables را انتخاب کنید.
سپس متغیر PATH را ویرایش کنید:
در پنجرهای که باز شد، گزینه NEW را بزنید تا بتوانید مسیر AVRDUDE را در path اضافه کنید:
پس از اضافه کردن مسیر، در تمام پنجره هایی که باز کردید، بر روی کلید OK کلیک کنید.
برای بررسی این که آیا به صورت صحیح PATH را وارد کردید، کامند لاین را باز کنید و درون آن دستور زیر را تایپ کنید: (اگر از قبل باز است، آن را بسته و مجدداَ باز کنید)
1 | avrdude |
و اگر همه چیز درست باشد، خروجی زیر را دریافت خواهید کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Usage: avrdude [options] Options: -p <partno> Required. Specify AVR device. -b <baudrate> Override RS-232 baud rate. -B <bitclock> Specify JTAG/STK500v2 bit clock period (us). -C <config-file> Specify location of configuration file. -c <programmer> Specify programmer type. -D Disable auto erase for flash memory -i <delay> ISP Clock Delay [in microseconds] -P <port> Specify connection port. -F Override invalid signature check. -e Perform a chip erase. -O Perform RC oscillator calibration (see AVR053). -U <memtype>:r|w|v:<filename>[:format] Memory operation specification. Multiple -U options are allowed, each request is performed in the order specified. -n Do not write anything to the device. -V Do not verify. -u Disable safemode, default when running from a script. -s Silent safemode operation, will not ask you if fuses should be changed back. -t Enter terminal mode. -E <exitspec>[,<exitspec>] List programmer exit specifications. -x <extended_param> Pass <extended_param> to programmer. -y Count # erase cycles in EEPROM. -Y <number> Initialize erase cycle # in EEPROM. -v Verbose output. -v -v for more. -q Quell progress output. -q -q for less. -l logfile Use logfile rather than stderr for diagnostics. -? Display this usage. |
گزینه (آپشن) های AVRDUDE
همان طور که در خروجی دستور بالا هم میبینید، گزینه یا آپشن های بسیاری برای سفارشی سازی و کار با AVRDUDE وجود دارد.
برخی از آپشن های مهم:
-p: شما به وسیله این پارامتر میتوانید نوع میکروکنترلر AVR خود را مشخص کنید. برای مثال، میروکنترلر ATmega32 با کد اختصاری m32 مشخص میشود. لیست کل میکروکنترلرها و علامت اختصاری آن را میتوانید از اینجا ببینید. پس، این آپشن بهصورت زیر به دستور ما اضافه میشود:
1 | -p m32 |
-P: دقت داشته باشید، AVRDUDE به حروف کوچک و بزرگ حساس است، بنابراین P بزرگ، برای تعیین پورت پروگرامر استفاده میشود. برای مثال، اگر پروگرامر خود را از طریق پورت usb متصل کرده باشید، به این صورت بکار میرود:
1 | -P usb |
-c: (با حرف کوچک) نوع پروگرامر را مشخص میکند. برای مثال، اگر از پروگرامر usbasp استفاده میکنید، باید دستور زیر را وارد کنید:
1 | -c usbasp |
برای دریافت لیست کامل پروگرامر هایی که توسط AVRDUDE پشتیبانی میشوند، میتوانید از دستور زیر استفاده کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | avrdude -c ? Valid programmers are: 2232HIO = FT2232H based generic programmer 4232h = FT4232H based generic programmer 89isp = Atmel at89isp cable abcmini = ABCmini Board, aka Dick Smith HOTCHIP alf = Nightshade ALF-PgmAVR, http://nightshade.homeip.net/ arduino = Arduino arduino-ft232r = Arduino: FT232R connected to ISP atisp = AT-ISP V1.1 programming cable for AVR-SDK1 from <http://micro-research.co.th/> atmelice = Atmel-ICE (ARM/AVR) in JTAG mode atmelice_dw = Atmel-ICE (ARM/AVR) in debugWIRE mode atmelice_isp = Atmel-ICE (ARM/AVR) in ISP mode atmelice_pdi = Atmel-ICE (ARM/AVR) in PDI mode avr109 = Atmel AppNote AVR109 Boot Loader avr910 = Atmel Low Cost Serial Programmer avr911 = Atmel AppNote AVR911 AVROSP avrftdi = FT2232D based generic programmer avrisp = Atmel AVR ISP avrisp2 = Atmel AVR ISP mkII avrispmkII = Atmel AVR ISP mkII avrispv2 = Atmel AVR ISP V2 bascom = Bascom SAMPLE programming cable blaster = Altera ByteBlaster bsd = Brian Dean's Programmer, http://www.bsdhome.com/avrdude/ buspirate = The Bus Pirate buspirate_bb = The Bus Pirate (bitbang interface, supports TPI) butterfly = Atmel Butterfly Development Board butterfly_mk = Mikrokopter.de Butterfly bwmega = BitWizard ftdi_atmega builtin programmer C232HM = FT232H based module from FTDI and Glyn.com.au c2n232i = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts dapa = Direct AVR Parallel Access cable dasa = serial port banging, reset=rts sck=dtr mosi=txd miso=cts dasa3 = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts diecimila = alias for arduino-ft232r dragon_dw = Atmel AVR Dragon in debugWire mode dragon_hvsp = Atmel AVR Dragon in HVSP mode dragon_isp = Atmel AVR Dragon in ISP mode dragon_jtag = Atmel AVR Dragon in JTAG mode dragon_pdi = Atmel AVR Dragon in PDI mode dragon_pp = Atmel AVR Dragon in PP mode dt006 = Dontronics DT006 ere-isp-avr = ERE ISP-AVR <http://www.ere.co.th/download/sch050713.pdf> flip1 = FLIP USB DFU protocol version 1 (doc7618) flip2 = FLIP USB DFU protocol version 2 (AVR4023) frank-stk200 = Frank STK200 ft232r = FT232R Synchronous BitBang ft245r = FT245R Synchronous BitBang futurlec = Futurlec.com programming cable. jtag1 = Atmel JTAG ICE (mkI) jtag1slow = Atmel JTAG ICE (mkI) jtag2 = Atmel JTAG ICE mkII jtag2avr32 = Atmel JTAG ICE mkII im AVR32 mode jtag2dw = Atmel JTAG ICE mkII in debugWire mode jtag2fast = Atmel JTAG ICE mkII jtag2isp = Atmel JTAG ICE mkII in ISP mode jtag2pdi = Atmel JTAG ICE mkII PDI mode jtag2slow = Atmel JTAG ICE mkII jtag3 = Atmel AVR JTAGICE3 in JTAG mode jtag3dw = Atmel AVR JTAGICE3 in debugWIRE mode jtag3isp = Atmel AVR JTAGICE3 in ISP mode jtag3pdi = Atmel AVR JTAGICE3 in PDI mode jtagkey = Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2 jtagmkI = Atmel JTAG ICE (mkI) jtagmkII = Atmel JTAG ICE mkII jtagmkII_avr32 = Atmel JTAG ICE mkII im AVR32 mode lm3s811 = Luminary Micro LM3S811 Eval Board (Rev. A) mib510 = Crossbow MIB510 programming board mkbutterfly = Mikrokopter.de Butterfly nibobee = NIBObee o-link = O-Link, OpenJTAG from www.100ask.net openmoko = Openmoko debug board (v3) pavr = Jason Kyle's pAVR Serial Programmer pickit2 = MicroChip's PICkit2 Programmer picoweb = Picoweb Programming Cable, http://www.picoweb.net/ pony-stk200 = Pony Prog STK200 ponyser = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts siprog = Lancos SI-Prog <http://www.lancos.com/siprogsch.html> sp12 = Steve Bolt's Programmer stk200 = STK200 stk500 = Atmel STK500 stk500hvsp = Atmel STK500 V2 in high-voltage serial programming mode stk500pp = Atmel STK500 V2 in parallel programming mode stk500v1 = Atmel STK500 Version 1.x firmware stk500v2 = Atmel STK500 Version 2.x firmware stk600 = Atmel STK600 stk600hvsp = Atmel STK600 in high-voltage serial programming mode stk600pp = Atmel STK600 in parallel programming mode ttl232r = FTDI TTL232R-5V with ICSP adapter tumpa = TIAO USB Multi-Protocol Adapter UM232H = FT232H based module from FTDI and Glyn.com.au uncompatino = uncompatino with all pairs of pins shorted usbasp = USBasp, http://www.fischl.de/usbasp/ usbasp-clone = Any usbasp clone with correct VID/PID usbtiny = USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/ wiring = Wiring xil = Xilinx JTAG cable xplainedmini = Atmel AVR XplainedMini in ISP mode xplainedmini_dw = Atmel AVR XplainedMini in debugWIRE mode xplainedpro = Atmel AVR XplainedPro in JTAG mode |
-b: با حرف کوچک، در صورتی که از پورت سریال برای پروگرامر استفاده میکنید، سرعت buadRate را مشخص میکند.
1 | -U <memtype>:r|w|v:<filename>[:format] |
شما به وسیله آپشن U میتوانید عملیات حافظه را انجام دهید. برای مقدار دهی به این آپشن، اولین عبارت یا پارامتر، نوع حافظه (مثلاً flash) را وارد میکنید، دومین پارامتر نوع عملیات (Read, Write, Verify)، سومین عبارت آدرس فایل و چهارمین عبارت نوع فایل (هگز دسیمال، اینتل هگز، خام و…) میباشد.
برای مثال، فرض کنید میخواهید فایل diag.hex را که در کنار AVRDUDE قرار دارد را به وسیله پروگرامر stk500 بر روی حافظه فلش تراشه stk500 بنویسید!
گزاره بالا در حالت دستوری، به شکل زیر در میآید:
1 | avrdude -p m128 -c stk500 -e -U flash:w:diag.hex |
آپشن های دیگر AVRDUDE را میتوانید از طریق help و یا مستندات آن مطالعه کنید. همچنین مثالهای دیگر را میتوانید اینجا مشاهده کنید.
آموزش نصب درایور USBASB را نیز در این آموزش می توانید ببینید.
رابط گرافیکی AVRDUDE GUI
اگر جزء افرادی هستید که از محیط ترمینال فراری هستید، خبر خوب اینکه رابط گرافیکی مختلفی نیز وجود دارد که شما با استفاده از چند کلیک، میتوانید عملیات پروگرام کردن و تنظیم فیوزبیت های AVR را به راحتی انجام دهید. برای مثال، AVRDUDE GUI نیز متن باز بوده و میتوانید آن را از اینجا دانلود کنید.
همچنین کار با رابط گرافیکی BitBurner نیز بسیار راحت و ساده است.
نصب درایور پروگرامر USBASP
در این آموزش از پروگرامر USBASP استفاده شده است. برای شناخته شدن آن توسط AVRDUDE باید مطمئن شویم که درایور آن به درستی نصب شده است. برای این کار، ابتدا USBASP را به کامپیوتر متصل کرده و سپس نرم افزار Zadig را از این قسمت دانلود کنید. از طریق منوی Options بر روی List all devices کلیک کنید و از لیست USBASP را انتخاب کنید. سپس در کادر جلوی آن، گزینه libusbK(v3.0.7.0) driver را انتخاب کرده و بر روی دکمه install کلیک کنید تا درایور USBASP نصب شود.
اتصال AVRDUDE به IDE
AVRDUDE را میتوانید به سادگی به بسیاری از محیطهای برنامه نویسی یکپارچه (IDE) متصل کنید. قبلاً در سیسوگ، مقالاتی در این زمینه منتشر شده است:
آماده سازی محیط Eclips برای برنامه نویسی میکروکنترلر های AVR
آماده سازی محیط VSCODE برای برنامه نویسی AVR
برنامهنویسی میکروکنترلر AVR در محیط ویژوال استودیو
لینکهای دانلود
اسم فایل
- avrdude.pdf
ببخشید من نتونستم ارتباط بگیرم. البته با پروگرمر ساده همون پورت پرینتر با کدویژن می تونم کار بکنم. یعنی سخت افزار من درست است.
ولی چند تا کامند رو تست کردم جواب نگرفتم.
میشه راهنمایی کنید برای تست مثلا خوندن امضائ میکرو یا فیوز بیتهاش به صورت ساده که بدونم ارتباط با سخت افزار دارم یک کامند بدید.
من این چند تا رو تست کردم جواب منفی بود.
AVRDUDE -c avrisp -p m8
AVRDUDE -c stk200 -p m8
سلام دوست عزیز
اول این که سخت افزار پروگرامر شما چی هشت، چون مثلا فکر میکنم STK200 توی ویندوز های ۷ به بعد بخاطر محدودیت درایور توی ویندوز مشکل ساز میشه میشه
ولی avrisp نباید مشکل خاصی داشته :
avrdude -c avrisp -p m328p -P com6 -b 19200 -U lfuse:r:-:i -v
سلام
من یه پروژه از اینترنت دانلود کرده بودم که داخلش فایل با پسوند هگز و eep داشت و توی سایتش با avrdude مراحل پروگرام کردن میکرو رو گذاشته بود.من با پروگرمر هاتل میتونم میکرو رو پروگرام کنم یا باید از avrdude استفاده کنم؟
اینم لینک سایت :
https://www.google.com/amp/s/www.instructables.com/Component-Tester-in-a-Keychain/%3famp_page=true
سلام دوست عزیز
اون فایل eep در واقع مقادیری هست که باید داخل eeprom میکروکنترلر ذخیره کنید – اگر هاتل این قابلیت رو داره بدون نگرانی میتونید این کار رو انجام بدید اگر نه avrdude حتما میتونه
سلام
این امکان وجود داره که مستقیما از طریق هاتل پروگرم بشه؟
ممنون
درود بر شما. بله، احتمالا باید بشه، باید از شرکت هاتل بپرسید.
یکی از ویژگیای جالبش اینه که میشه توی make اصافش کرد و بعد کامپایل شدن اتوماتیک روی میکرو آپلود میشه یادش بخیر
بله، به خاطر اجرا در حالت کامندلاین، استفادههای زیادی میتوان از آن کرد.
سلام.
خیلی جالب بود، برای اتمگا ۳۲A میزنم m32A ولی کار نمیده چکار باید کرد؟
درود بر شما، برای میکروکنترلر atmega32a از همان m32 استفاده کنید.
خوبی avrdude gui اینه که وقتی باهاش کار میکنی کامند هاش رو هم یاد میگیری. bitburner یکم راحت تره. مطلب خوبی بود متشکرم.
درود بر شما.
ممنون.
AVR BURN-O-MAT هم هست، اما برای کار کردن جاوا لازم داره. همین AVRDUDE GUI و BitBurner که دوستان معرفی کردند خیلی خوبه و خیلی بهتر از progisp مضخرفه که معمولا استفاده می شه. ممنون که برنامه های متن باز و خوب رو معرفی می کنید.
درود بر شما.
همین طور ممنون از شما بابت ارسال نظر و تجربیاتتون.
چه جالب من این avrdude.exe رو همش همه جا میدیم ولی نمیدونستم چیه. ممنون که توضیح دادید. خیلی جالب و کاربردی بود، مخصوصا اینکه توی لینوکس و ویندوز یکجور کار میکنه.
درود بر شما.
با سیسوگ همراه باشید، باز هم ابزار معرفی خواهیم کرد.
BitBurner AVR Programmer هم یک رابط گرافیکی خیلی خوب برای AVRDUDE هست.
درود بر شما دوست عزیز!
خیلی ممنون از اینکه معرفی کردید!
سلام.
خیلی عالیه. زود تر معرفی میکردید که انقدر با این نرم افزارای کرکی کار نکنیم همش ارور میدن. این avrdude خیلی عالیه.
درود بر شما.
ممنون. امیدوارم موفق باشید.