DFU-PROGRAMMER(1) DFU-PROGRAMMER(1)

dfu-programmer - ارتقای سفت‌افزار مبتنی بر USB برای میکروکنترلرهای اتمل (Atmel)

dfu-programmer target[:usb-bus,usb-addr] command [options] [parameters]
dfu-programmer --help
dfu-programmer --targets
dfu-programmer --version

dfu-programmer یک پروگرمر خط فرمانی چندسکویی مبتنی بر ارتقای سفت‌افزار دستگاه (DFU) برای حافظه فلش میکروکنترلرهای اتمل سری AVR، AVR32، XMEGA و 8051 است که با یک بوت‌لودر USB عرضه می‌شوند. این ابزار از برنامه‌ریزی درون‌سیستمی (ISP) برای توسعه‌دهندگان و به‌روزرسانی‌های احتمالی محصول پشتیبانی می‌کند. این بوت‌لودرها از مشخصات استاندارد کلاس USB DFU 1.0 الگوبرداری شده‌اند، اما به الحاقاتی که توسط اتمل تعریف شده وابسته‌اند، تا جایی که درایورهای استاندارد DFU کار نخواهند کرد.

برای استفاده، ابتدا دستگاه مورد نظر را متصل کنید و مطمئن شوید در حالت DFU راه‌اندازی شده است. میکروکنترلرها هنگام ارسال از کارخانه اتمل در این حالت قرار دارند؛ یا ممکن است پس از یک بازنشانی سخت‌افزاری خاص مجدداً وارد این حالت شوند. سپس این برنامه را برای صدور یک یا چند دستور DFU اجرا کنید. معمولاً باید کار را با دستور "erase" آغاز کنید؛ سیاست‌های امنیتی پیش‌فرض مانع از استخراج سفت‌افزار می‌شوند تا از مهندسی معکوس کدهای اختصاصی جلوگیری به عمل آید.

این نام‌های تراشه به عنوان پارامتر "target" در خط فرمان استفاده می‌شوند.

کنترلرهای مبتنی بر 8051:
at89c51snd1c, at89c51snd2c, at89c5130, at89c5131, at89c5132
کنترلرهای مبتنی بر AVR:
at90usb1287, at90usb1286, at90usb1287-4k, at90usb1286-4k, at90usb647, at90usb646, at90usb162, at90usb82, atmega32u6, atmega32u4, atmega32u2, atmega16u4, atmega16u2, atmega8u2
کنترلرهای مبتنی بر AVR32:
at32uc3a0128, at32uc3a1128, at32uc3a0256, at32uc3a1256, at32uc3a0512, at32uc3a1512, at32uc3a0512es, at32uc3a1512es, at32uc3a364, at32uc3a364s, at32uc3a3128, at32uc3a3128s, at32uc3a3256, at32uc3a3256s, at32uc3a4256s, at32uc3b064, at32uc3b164, at32uc3b0128, at32uc3b1128, at32uc3b0256, at32uc3b1256, at32uc3b0256es, at32uc3b1256es, at32uc3b0512, at32uc3b1512, at32uc3c064, at32uc3c0128, at32uc3c0256, at32uc3c0512, at32uc3c164, at32uc3c1128, at32uc3c1256, at32uc3c1512, at32uc3c264, at32uc3c2128, at32uc3c2256, at32uc3c2512
کنترلرهای مبتنی بر XMEGA:
atxmega64a1u, atxmega128a1u, atxmega64a3u, atxmega128a3u, atxmega192a3u, atxmega256a3u, atxmega16a4u, atxmega32a4u, atxmega64a4u, atxmega128a4u, atxmega256a3bu, atxmega64b1, atxmega128b1, atxmega64b3, atxmega128b3, atxmega64c3, atxmega128c3, atxmega256c3, atxmega384c3, atxmega16c4, atxmega32c4
کنترلرهای STM32F4 (آزمایشی):
stm32f4_B, stm32f4_C, stm32f4_E, stm32f4_G

هیچ مکانیزمی برای برنامه‌ریزی همزمان چندگانه (gang programming) وجود ندارد. به‌طور پیش‌فرض، نخستین دستگاهی که با کدهای شناسه هدف مطابقت داشته باشد انتخاب می‌شود. بسیاری از اهداف کدهای شناسه یکسانی دارند. به همین دلیل، معمولاً باید از اتصال همزمان بیش از یک دستگاه از یک خانواده خاص (AVR، XMEGA، AVR32 یا 8051) خودداری کنید.

هدف را می‌توان با شماره گذرگاه USB و آدرس دستگاهی که مایل به برنامه‌ریزی آن هستید مشخص کرد. این کار برنامه‌ریزی چندین دستگاه از یک خانواده را به صورت همزمان امکان‌پذیر می‌سازد.

تمامی این دستورات از «گزینه‌های عمومی» پشتیبانی می‌کنند. مگر اینکه آن را لغو کنید، دستوراتی که روی میکروکنترلر می‌نویسند یک مرحله اعتبارسنجی را اجرا خواهند کرد که داده‌های نوشته‌شده را دوباره خوانده، با نتیجه مورد انتظار مقایسه می‌کند و خطاها را گزارش می‌دهد.

توجه داشته باشید که بر خلاف برنامه BatchISP اتمل، dfu-programmer در هر زمان تنها یک عملیات را اجرا می‌کند. پاک کردن و برنامه‌ریزی نیازمند دستورات جداگانه هستند.

configure register [--suppress-validation] data
بوت‌لودرهای کنترلرهای مبتنی بر 8051 از نوشتن برخی بایت‌های پیکربندی پشتیبانی می‌کنند.

dump [--force] [--bin] [(flash)|--user|--eeprom]
حافظه برنامه را در فلش می‌خواند و صفحات غیرخالی را با فرمت ihex در stdout خروجی می‌دهد. از --force برای خروجی گرفتن از کل حافظه و از --bin برای خروجی باینری استفاده کنید. صفحات کاربر (user page) و eeprom با استفاده از --user و --eeprom انتخاب می‌شوند.

erase [--force]
تمامی حافظه فلش را پاک می‌کند. برای دستگاه‌های نوع AT90 و ATmega باید پیش از دسترسی به سایر دستورات، پاک‌سازی کامل تراشه (chip erase) انجام شود. دستور erase ابتدا خالی بودن حافظه را بررسی می‌کند مگر آنکه فلگ --force تنظیم شده باشد.

flash [--force] [(flash)|--user|--eeprom] [--suppress-validation] [--suppress-bootloader-mem] [--validate-first] [--ignore-outside] [--serial=hexbytes:offset] file or STDIN
نوشتن حافظه فلش. فایل ورودی (یا stdin) باید از قرارداد قالب فایل "ihex" برای ایمیج حافظه استفاده کند. گزینه --suppress-bootloader-mem هرگونه داده نوشته‌شده در فضای حافظه بوت‌لودر را هنگام فلش کردن دستگاه نادیده می‌گیرد. این گزینه به ویژه برای تراشه‌های AVR32 مفید است. فلگ --force به برنامه اعلام می‌کند که خالی بودن یا نبودن حافظه درون ناحیه برنامه را نادیده بگیرد. صفحه کاربر و eeprom با استفاده از --user و --eeprom انتخاب می‌شوند. فلش فضای کاربر در تراشه‌های AVR32 خارج از محدوده عادی بلوک‌های فلش قرار دارد و برای ذخیره پارامترهای پیکربندی طراحی شده است. پیکربندی بوت‌لودر از ۴ تا ۸ بایت پایانی صفحه کاربر استفاده می‌کند. اگر این داده‌ها آسیب ببینند، دستگاه تا زمان استفاده از داده‌های معتبر مجدداً وارد بوت‌لودر خواهد شد (به doc7745 یا doc32166 اتمل مراجعه فرمایید). گزینه --force همیشه در اینجا الزامی است.

گزینه --serial راهکاری را برای تزریق شماره سریال یا توالی منحصربه‌فرد دیگری از بایت‌ها به ایمیج حافظه برنامه‌ریزی‌شده در دستگاه ارائه می‌دهد. این امکان اجازه می‌دهد تا با یک فایل .ihex بتوان چندین دستگاه را برنامه‌ریزی کرد و در عین حال به هر دستگاه شماره سریال اختصاصی داد. برای نمونه، --serial=ABCDEF01:0x6000 بایت موجود در 0x6000 را با مقدار هگز AB، بایت 0x6001 را با مقدار CD و به همین ترتیب برنامه‌ریزی می‌کند. تعداد ارقام هگزادسیمال باید زوج باشد، اما طول توالی می‌تواند دلخواه باشد. فرض می‌شود افست داده‌شده در صورتی که با پیشوند "0x" شروع شود هگز، اگر با "0" آغاز شود هشت‌هشتی (octal)، و در غیر این صورت ده‌دهی (decimal) است.

گزینه --validate-first یک مرحله اعتبارسنجی را پیش از نوشتن حافظه فلش اضافه می‌کند. اگر اعتبارسنجی موفقیت‌آمیز باشد (یعنی سفت‌افزار داخل تراشه با فایل ورودی یکسان باشد)، هیچ عملیات دیگری انجام نمی‌شود و نتیجه فلش موفق گزارش می‌گردد.

گزینه --ignore-outside رفتار اعتبارسنجی را به گونه‌ای تغییر می‌دهد که هر خطای خارج از ناحیه برنامه‌ریزی نادیده گرفته شود. این گزینه می‌تواند برای برنامه‌ریزی بخشی از تراشه (که خطا در خارج از ناحیه مورد انتظار است) بدون نادیده گرفتن نتیجه اعتبارسنجی مفید باشد.

setsecure
بیت امنیتی (security bit) را روی تراشه‌های AVR32 تنظیم می‌کند. این کار مانع از خواندن مجدد محتوا از تراشه می‌شود، مگر در همان نشست کاری که در آن برنامه‌ریزی شده است. هنگامی که فیوز امنیتی تنظیم شد، تقریباً هیچ فرمانی بدون اجرای ابتدایی دستور erase کار نخواهد کرد. تنها راه پاک کردن فیوز امنیتی پس از تنظیم، اجرای chip erase از طریق JTAG است که بوت‌لودر را نیز پاک خواهد کرد.

get register
بایت‌های مختلف شناسایی محصول را نمایش می‌دهد.

launch [--no-reset]
اجرای برنامه کاربردی با ریست کردن دستگاه. فلگ --no-reset می‌تواند برای اجرای دستگاه بدون ریست (پرش به آدرس شروع برنامه) به کار رود.

--quiet - به حداقل رساندن خروجی

--debug level - فعال‌سازی خروجی با جزئیات در سطح مشخص‌شده

بوت‌لودر استاندارد برای تراشه‌های مبتنی بر 8051 از نوشتن بایت‌های داده‌ای پشتیبانی می‌کند که برای تراشه‌های AVR مرتبط نیستند.

BSB - بایت وضعیت بوت
SBV - بردار نرم‌افزاری بوت
SSB - بایت امنیتی نرم‌افزاری
EB - بایت اضافی
HSB - بایت امنیتی سخت‌افزاری

bootloader-version - نگارش بوت‌لودر فعلی فلش‌شده
ID1 - شناسه اول بوت دستگاه
ID2 - شناسه دوم بوت دستگاه
manufacturer - کد سازنده سخت‌افزار
family - کد خانواده محصول
product-name - نام محصول
product-revision - بازبینی محصول
HSB - مشابه نسخه configure_register
BSB - مشابه نسخه configure_register
SBV - مشابه نسخه configure_register
SSB - مشابه نسخه configure_register
EB - مشابه نسخه configure_register

موردی شناخته نشده است.

تراشه‌های سری at90usb هیچ فلگ حفاظت خواندن/نوشتنی ارائه نمی‌دهند، بنابراین ممکن است دستورهای dump یا flash با پیام خطایی نه‌چندان واضح شکست بخورند.

برای حذف هرگونه حفاظت نوشتن یا خواندن از هر تراشه‌ای، پاک‌سازی کامل تراشه (full chip erasure) الزامی است. برای تراشه‌های AVR32 عملیات پاک‌سازی از طریق USB حفاظت را تا زمان راه‌اندازی مجدد دستگاه حذف می‌کند. برای حذف دائمی‌تر حفاظت، پاک‌سازی با JTAG نیاز است (که بوت‌لودر را نیز پاک خواهد کرد).

ممکن است لازم باشد عضو گروه uucp باشید تا بتوانید بدون دسترسی ریشه به دستگاه دسترسی داشته باشید.

Weston Schmidt <weston_schmidt@alumni.purdue.edu>

dfu-programmer.sourceforge.net
USB DFU Bootloader Datasheet (8052, AVR)
AVR32 UC3 USB DFU Bootloader Protocol
FLIP USB DFU Protocol
AVR32 UC3 USB DFU Bootloader

Copyright (C) 2005-2015 Weston Schmidt

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU GPL) همان‌گونه که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است بازتوزیع کرده یا تغییر دهید؛ چه نگارش ۲ مجوز یا (به انتخاب خودتان) هر نگارش بالاتری.

این برنامه به این امید توزیع می‌شود که سودمند باشد، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا تناسب برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه فرمایید.

شما باید یک نسخه از مجوز عمومی همگانی گنو را همراه با این برنامه دریافت کرده باشید؛ در غیر این صورت، به بنیاد نرم‌افزارهای آزاد بنویسید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA

May 28, 2014 DFU-PROGRAMMER