FLASHPROG(8) 2026-07-17 FLASHPROG(8)

flashprog - شناسایی، خواندن، نوشتن، اعتبارسنجی و پاک کردن تراشه‌های فلش

برنامه flashprog از حالت‌های دستوری گوناگون پشتیبانی می‌کند:

flashprog ([prog]|config|cfg|write-protect|wp)

با پیش‌فرض بودن prog که در این راهنما شرح داده شده است. برای دستورات دیگر، به flashprog-config(8)، و flashprog-write-protect(8) مراجعه کنید.

flashprog [-h|-R|-L|-z|
-p <programmername>[:<parameters>] [-c <chipname>]
(--flash-name|--flash-size|
[-E|-r <file>|-w <file>|-v <file>]
[(-l <file>|--ifd|--fmap|--fmap-file <file>)
[-i <include>]...]
[-n] [-N] [-f])]
[-V[V[V]]] [-o <logfile>] [--progress]

flashprog ابزاری برای شناسایی، خواندن، نوشتن، اعتبارسنجی و پاک کردن تراشه‌های فلش است. این ابزار اغلب برای فلش کردن ایمیج‌های BIOS/EFI/coreboot/میان‌افزار درون سیستم با استفاده از یک مادربرد پشتیبانی‌شده استفاده می‌شود. با این حال، از دستگاه‌های خارجی گوناگون مبتنی بر PCI/USB/درگاه موازی/درگاه سریال که قادر به برنامه‌ریزی تراشه‌های فلش هستند نیز پشتیبانی می‌کند؛ از جمله برخی کارت‌های شبکه (NIC)، کارت‌های کنترلر SATA/IDE، کارت‌های گرافیک، دستگاه Bus Pirate، دستگاه‌های مختلف USB مبتنی بر تراشه‌های FTDI FT2232/FT4232H/FT232H و موارد دیگر.

این برنامه از طیف گسترده‌ای از تراشه‌های DIP32، PLCC32، DIP8، SO8/SOIC8، TSOP32، TSOP40، TSOP48 و BGA که از پروتکل‌های گوناگونی همچون LPC، FWH، فلش موازی یا SPI استفاده می‌کنند، پشتیبانی می‌نماید.

می‌توانید یکی از گزینه‌های -h، -R، -L، -z، -E، -r، -w، -v یا هیچ عملیاتی را مشخص نکنید. اگر عملیاتی مشخص نشود، flashprog تنها تراشه‌های فلش را شناسایی و پویش می‌کند. توصیه می‌شود اگر برای نخستین بار flashprog را روی یک سیستم اجرا می‌کنید، آن را در حالت فقط‌شناسایی اجرا کرده و خروجی را بررسی نمایید. همچنین به شما توصیه می‌شود پیش از تلاش برای نوشتن یک ایمیج جدید، با گزینه -r از محتویات فعلی حافظه ROM خود پشتیبان بگیرید. تمام عملیاتی که به هر نحو با دسترسی به تراشه سر و کار دارند (پویش/خواندن/نوشتن/...) نیازمند استفاده از گزینه -p/--programmer هستند (لطفاً بخش زیر را مشاهده فرمایید).

محتویات حافظه فلش ROM را خوانده و در <file> مشخص‌شده ذخیره می‌کند. اگر فایل از قبل موجود باشد، بازنویسی خواهد شد.
فایل <file> را در حافظه فلش ROM می‌نویسد. اگر به‌جای فایل، - داده شود، محتوا از ورودی استاندارد (stdin) خوانده می‌شود. این کار ابتدا تراشه را به‌طور خودکار پاک کرده و سپس روی آن می‌نویسد.

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

صرف‌نظر از اعتبارسنجی خودکار محتویات فلش ROM پس از نوشتن. استفاده از این گزینه توصیه نمی‌شود و فقط در صورتی باید از آن استفاده کنید که کاملاً به کار خود آگاه باشید و زمان اعتبارسنجی بسیار طولانی باشد.

کاربرد معمول: flashprog -p prog -n -w <file>

این گزینه تنها همراه با گزینه --write مفید است.

صرف‌نظر از اعتبارسنجی نواحی گنجانده‌نشده در طول اعتبارسنجی خودکار پس از نوشتن (مقایسه کنید با -l و -i). تنها در صورتی باید از این گزینه استفاده کنید که مطمئن باشید ارتباط با تراشه فلش کاملاً پایدار و قابل اعتماد است (برای نمونه هنگام استفاده از پروگرمر internal). حتی اگر به flashprog دستور داده شود که بخش‌هایی از تراشه فلش را دستکاری نکند، ممکن است محتویات آن‌ها آسیب ببیند (مثلاً به دلیل تفسیر نادرست دستورات پاک‌سازی).

این گزینه برای فلش کردن یک سیستم اینتل با ناحیه فلش قفل‌شده ME با استفاده از پروگرمر internal الزامی است. ممکن است در آینده این گزینه در این حالت به‌طور پیش‌فرض فعال گردد.

اعتبارسنجی محتویات فلش ROM در برابر <file> مشخص‌شده. اگر - ارائه شود، محتوا از stdin خوانده می‌شود.
پاک کردن تراشه فلش ROM.
خروجی با جزئیات بیشتر. این گزینه می‌تواند چندین بار مشخص شود (حداکثر ۳ بار، یعنی -VVV) تا جزئیات اشکال‌زدایی حتی بیشتری ارائه دهد.
تنها برای تراشه فلش ROM مشخص‌شده پویش می‌کند. این گزینه نام تراشه را بدون نام سازنده دقیقاً همان‌گونه که توسط flashprog -L چاپ می‌شود به عنوان پارامتر می‌گیرد. توجه داشته باشید که نام تراشه به بزرگی و کوچکی حروف حساس است.
اجبار به انجام یک یا چند اقدام زیر:

* اجبار به خواندن تراشه و فرض این که تراشه وجود دارد.

* اجبار به دسترسی به تراشه حتی اگر تراشه بزرگتر از حداکثر اندازه پشتیبانی‌شده برای گذرگاه فلش باشد.

* اجبار به پاک‌سازی حتی در صورتی که عمل پاک‌سازی معیوب شناخته شده باشد.

* اجبار به نوشتن حتی در صورتی که عمل نوشتن معیوب شناخته شده باشد.

خواندن طرح‌بندی (Layout) حافظه ROM از <file>.

برنامه flashprog از طرح‌بندی‌های ROM پشتیبانی می‌کند. این ویژگی به شما اجازه می‌دهد تنها بخش‌های مشخصی از تراشه فلش را فلش کنید. یک فایل طرح‌بندی ROM شامل چندین خط با ساختار دستوری زیر است:

startaddr:endaddr imagename

مقدارهای startaddr و endaddr آدرس‌های هگزادسیمال درون فایل ROM هستند و به هیچ آدرس فیزیکی اشاره ندارند. توجه داشته باشید که استفاده از پیشوند 0x برای این اعداد هگزادسیمال الزامی نیست، اما نمی‌توانید اعداد دهدهی یا هشت‌هشتی مشخص کنید. imagename یک نام دلخواه برای ناحیه/ایمیج از startaddr تا endaddr است (هر دو آدرس شامل می‌شوند).

مثال:


00000000:00008fff gfxrom
00009000:0003ffff normal
00040000:0007ffff fallback

اگر فقط می‌خواهید ایمیج نام‌گذاری‌شده با normal را در یک ROM بر اساس طرح‌بندی بالا به‌روزرسانی کنید، دستور زیر را اجرا کنید:

flashprog -p prog --layout rom.layout --image normal -w some.rom

برای به‌روزرسانی تنها ایمیج‌های normal و fallback، دستور زیر را اجرا کنید:

flashprog -p prog -l rom.layout -i normal -i fallback -w some.rom

بخش‌های هم‌پوشان پشتیبانی نمی‌شوند.

خواندن طرح‌بندی از fmap موجود در تراشه فلش.

برنامه flashprog از قالب دودویی fmap که معمولاً توسط coreboot برای پارتیشن‌بندی تراشه فلش استفاده می‌شود، پشتیبانی می‌کند. fmap روی تراشه خوانده شده و برای تولید طرح‌بندی به کار می‌رود.

اگر فقط می‌خواهید ناحیه COREBOOT تعریف‌شده در fmap را به‌روزرسانی کنید، دستور زیر را اجرا فرمایید:

flashprog -p prog --fmap --image COREBOOT -w some.rom

خواندن طرح‌بندی از یک <file> حاوی fmap دودویی (مانند رام‌های coreboot).

برنامه flashprog از قالب دودویی fmap که معمولاً توسط coreboot برای پارتیشن‌بندی تراشه فلش استفاده می‌شود، پشتیبانی می‌کند. fmap موجود در فایل مشخص‌شده خوانده شده و برای تولید طرح‌بندی به کار می‌رود.

اگر فقط می‌خواهید ناحیه COREBOOT تعریف‌شده در فایل fmap دودویی را به‌روزرسانی کنید، دستور زیر را اجرا فرمایید:

flashprog -p prog --fmap-file some.rom --image COREBOOT -w some.rom

خواندن طرح‌بندی ROM از توصیف‌گر میان‌افزار اینتل (Intel Firmware Descriptor یا IFD).

برنامه flashprog از طرح‌بندی‌های ROM ارائه شده توسط توصیف‌گر میان‌افزار اینتل (IFD) پشتیبانی می‌کند. توصیف‌گر روی تراشه خوانده شده و برای تولید طرح‌بندی استفاده خواهد شد. اگر نیاز به تغییر طرح‌بندی دارید، ابتدا باید تنها IFD را به‌روزرسانی کنید.

ایمیج‌های ROM زیر ممکن است در یک IFD وجود داشته باشند:


fd خود توصیف‌گر IFD
bios میان‌افزار میزبان موسوم به BIOS
me میان‌افزار Intel Management Engine
gbe میان‌افزار شبکه گیگابیت اترنت
pd داده‌های خاص پلتفرم

تنها فلش کردن ناحیه/ایمیج <imagename> از طرح‌بندی فلش.
چاپ نام تراشه فلش شناسایی‌شده.
چاپ اندازه تراشه فلش شناسایی‌شده.
محتویات فایل <ref-file> برای تصمیم‌گیری در مورد این که کدام بخش‌های فلش نیاز به نوشتن دارند استفاده خواهد شد. ارائه این فایل شما را از خواندن اولیه کامل تراشه فلش بی‌نیاز می‌کند. مراقب باشید؛ اگر داده‌های ارائه‌شده با محتویات واقعی فلش مطابقت نداشته باشد، نتایج غیرقابل‌پیش‌بینی خواهد بود.
فهرست کردن تراشه‌های فلش، چیپست‌ها، مادربردها و پروگرمرهای خارجی (از جمله دستگاه‌های مبتنی بر PCI، USB، درگاه موازی و درگاه سریال) که توسط flashprog پشتیبانی می‌شوند.

بسیاری از بردهای فهرست‌نشده وجود دارند که بدون نیاز به پشتیبانی ویژه در flashprog به‌خوبی کار می‌کنند. لطفاً در صورت تایید کارکرد یا عدم کارکرد سایر بردها، به ما اطلاع دهید.

مهم: برای اعتبارسنجی باید یک عملیات ERASE و/یا WRITE را آزمایش کنید، بنابراین مطمئن شوید تنها در صورتی این کار را انجام می‌دهید که ابزارهای مناسب برای بازیابی پس از خرابی را در اختیار داشته باشید!

مشابه --list-supported، اما سخت‌افزارهای پشتیبانی‌شده را در ساختار MediaWiki خروجی می‌دهد تا بتوان آن را به‌راحتی در صفحه ویکی سخت‌افزارهای پشتیبانی‌شده ⟨https://flashprog.org/Supported_hardware⟩ جای‌گذاری کرد. توجه داشته باشید که خروجی MediaWiki به‌طور پیش‌فرض کامپایل نمی‌شود.
مشخص کردن دستگاه پروگرمر. این گزینه برای تمام عملیاتی که نیازمند دسترسی به تراشه هستند (پویش/خواندن/نوشتن/...) الزامی است. پروگرمرهای پشتیبانی‌شده فعلی عبارتند از:

* internal (برای فلش درون‌سیستمی روی مادربرد)

* dummy (پروگرمر مجازی برای آزمایش flashprog)

* nic3com (برای رام‌های فلش روی کارت‌های شبکه 3COM)

* nicrealtek (برای رام‌های فلش روی کارت‌های شبکه Realtek و SMC 1211)

* nicnatsemi (برای رام‌های فلش روی کارت‌های شبکه National Semiconductor DP838*)

* nicintel (برای رام‌های فلش موازی روی کارت‌های شبکه اینتل 10/100Mbit)

* nicamd (برای رام‌های فلش موازی روی کارت‌های شبکه AMD PCnet)

* gfxmatrox (برای رام‌های فلش روی کارت‌های گرافیک Matrox)

* gfxnvidia (برای رام‌های فلش روی کارت‌های گرافیک NVIDIA)

* drkaiser (برای رام‌های فلش روی کارت‌های PCI مدل Dr. Kaiser PC-Waechter)

* satasii (برای رام‌های فلش روی کنترلرهای SATA/IDE مدل Silicon Image)

* scsilsi (برای رام‌های فلش روی کنترلرهای SCSI مدل LSI)

* satamv (برای رام‌های فلش روی کنترلرهای SATA مدل Marvell)

* atahpt (برای رام‌های فلش روی کنترلرهای ATA/RAID مدل Highpoint)

* atavia (برای رام‌های فلش روی کنترلرهای SATA مدل VIA VT6421A)

* atapromise (برای رام‌های فلش روی کنترلرهای ATA/RAID مدل Promise PDC2026x)

* it8212 (برای رام‌های فلش روی کنترلر ATA/RAID مدل ITE IT8212F)

* ft2232_spi (برای رام‌های فلش SPI متصل به یک پروگرمر USB SPI مبتنی بر خانواده FT2232/FT4232H/FT232H).

* ft4222_spi (برای رام‌های فلش SPI و QPI متصل به یک پروگرمر USB مبتنی بر FT4222H).

* serprog (برای رام‌های فلش متصل به پروگرمری که با پروتکل serprog صحبت می‌کند، از جمله برخی دستگاه‌های مبتنی بر آردوینو).

* buspirate_spi (برای رام‌های فلش SPI متصل به Bus Pirate)

* dediprog (برای رام‌های فلش SPI متصل به Dediprog SF100/SF200/SF600/SF700)

* rayer_spi (برای رام‌های فلش SPI متصل به درگاه موازی توسط یکی از کابل‌های گوناگون)

* pony_spi (برای رام‌های فلش SPI متصل به یک آداپتور بیت‌بنگ درگاه سریال SI-Prog)

* nicintel_spi (برای رام‌های فلش SPI روی کارت‌های شبکه گیگابیت اینتل)

* ogp_spi (برای رام‌های فلش SPI روی کارت گرافیک Open Graphics Project)

* linux_gpio_spi (برای رام‌های فلش SPI متصل به دستگاه تراشه GPIO قابل دسترس از طریق /dev/gpiochipX در لینوکس)

* linux_mtd (برای رام‌های فلش SPI قابل دسترس از طریق /dev/mtdX در لینوکس)

* linux_spi (برای رام‌های فلش SPI قابل دسترس از طریق /dev/spidevX.Y در لینوکس)

* usbblaster_spi (برای رام‌های فلش SPI متصل به کابل سازگار با Altera USB-Blaster)

* nicintel_eeprom (برای EEPROMهای SPI روی کارت‌های شبکه گیگابیت اینتل)

* mstarddc_spi (برای رام‌های فلش SPI قابل دسترس از طریق DDC در نمایشگرهای مجهز به MSTAR)

* pickit2_spi (برای رام‌های فلش SPI قابل دسترس از طریق Microchip PICkit2)

* ch341a_spi (برای رام‌های فلش SPI متصل به WCH CH341A)

* ch347_spi (برای رام‌های فلش SPI متصل به WCH CH347)

* digilent_spi (برای رام‌های فلش SPI متصل به بردهای توسعه iCEblink40)

* jlink_spi (برای رام‌های فلش SPI متصل به SEGGER J-Link و دستگاه‌های سازگار)

* ni845x_spi (برای رام‌های فلش SPI متصل به National Instruments USB-8451 یا USB-8452)

* stlinkv3_spi (برای رام‌های فلش SPI متصل به دستگاه‌های STMicroelectronics STLINK V3)

* dirtyjtag_spi (برای رام‌های فلش SPI متصل به دستگاه‌های سازگار با DirtyJTAG)

برخی پروگرمرها پارامترهای اختیاری یا اجباری دارند که با جزئیات کامل در بخش اطلاعات ویژه پروگرمرها (PROGRAMMER-SPECIFIC INFORMATION) توضیح داده شده‌اند. پشتیبانی از برخی پروگرمرها را می‌توان در زمان کامپایل غیرفعال کرد. دستور flashprog -h فهرست تمامی پروگرمرهای پشتیبانی‌شده را نمایش می‌دهد.

نمایش متن راهنما و خروج.
ذخیره گزارش کامل اشکال‌زدایی در <logfile>. اگر فایل از قبل وجود داشته باشد، بازنویسی خواهد شد. این روش پیشنهادی برای جمع‌آوری گزارش‌ها از flashprog است، زیرا پیام‌ها حتی در صورت خلاصه بودن روی صفحه نمایش، با جزئیات کامل ثبت می‌شوند و نیازی به تغییر مسیر خروجی نیست.
نمایش درصد پیشرفت عملیات‌ها روی خروجی استاندارد.
نمایش اطلاعات نسخه و خروج.

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

فعال‌سازهای برد (Board Enables)

برخی از مادربردها برای فعال‌سازی پشتیبانی از پاک کردن و نوشتن فلش (و پشتیبانی از پویش در سیستم‌های قدیمی با فلش موازی) نیازمند اجرای کدهای اختصاصی مادربرد هستند. برند و مدل مادربرد (در صورتی که نیازمند کد خاصی باشد) معمولاً با یکی از سازوکارهای زیر به طور خودکار شناسایی می‌شود: اگر سیستم شما از coreboot استفاده می‌کند، نوع مادربرد از جدول coreboot تعیین می‌شود. در غیر این صورت، مادربرد با بررسی دستگاه‌های PCI روی برد و احتمالاً اطلاعات DMI شناسایی می‌گردد. اگر PCI و DMI حاوی اطلاعات کافی برای شناسایی یکتای مادربرد نباشند (که حالتی استثنایی است)، یا اگر بخواهید مدل مادربرد شناسایی‌شده را لغو و بازنویسی کنید، می‌توانید مادربرد را با ساختار دستوری زیر مشخص نمایید:

flashprog -p internal:mainboard=<vendor>:<board>

برای دیدن فهرستی از بردهایی که در صورت یافت نشدن جدول coreboot نیازمند مشخص کردن نام برد هستند، بخش 'Known boards' یا 'Known laptops' را در خروجی 'flashprog -L' ببینید.

برخی از این توابع فعال‌سازی فلش اختصاصی برد (که در flashprog board enables نامیده می‌شوند) هنوز آزمایش نشده‌اند. اگر مادربرد شما شناسایی شود و به یک تابع فعال‌ساز آزمایش‌نشده نیاز داشته باشد، یک پیام هشدار چاپ شده و فعال‌ساز اجرا نمی‌شود؛ زیرا یک تابع فعال‌ساز نادرست ممکن است به دلیل دستکاری بخش‌های سطح پایین مادربرد، سبب رفتار غیرعادی سیستم شود. اجرا نشدن تابع فعال‌ساز برد (در صورت نیاز به آن) ممکن است منجر به شکست در شناسایی یا پاک‌سازی گردد. اگر برد شما تنها از بخشی از فلش محافظت می‌کند (معمولاً بخش انتهایی بالا که بلوک بوت نام دارد)، flashprog ممکن است تنها پس از پاک کردن بخش محافظت‌نشده با خطا روبرو شود؛ بنابراین اجرا بدون تابع فعال‌ساز برد ممکن است برای پاک‌سازی و نوشتن (که شامل پاک‌سازی است) خطرناک باشد.

روش پیشنهادی برای مادربردی با کد اختصاصی آزمایش‌نشده این است که ابتدا سعی کنید ROM را بدون اجرای کد فعال‌ساز برد (یعنی بدون هیچ پارامتری) بررسی نمایید (تنها flashprog را فراخوانی کنید و بررسی کنید که آیا نوع تراشه فلش شما را شناسایی می‌کند یا خیر). اگر تراشه شما را پیدا کرد، عالی است. در غیر این صورت، با اجرای کد فعال‌ساز برد با استفاده از دستور زیر، مجدداً برای شناسایی تراشه تلاش کنید:

flashprog -p internal:boardenable=force

اگر تراشه شما همچنان شناسایی نشد، کد فعال‌ساز برد به نظر معیوب است یا تراشه فلش پشتیبانی نمی‌شود. در غیر این صورت، یک نسخه پشتیبان از محتویات فعلی ROM خود (با استفاده از -r) تهیه کرده و آن را در رسانه‌ای خارج از رایانه خود، مانند یک حافظه USB یا اشتراک شبکه ذخیره کنید. اگر برای شناسایی به اجرای کد فعال‌ساز نیاز داشتید، برای خواندن نیز از آن استفاده کنید. اگر خواندن با موفقیت انجام شد و محتویات فایل خوانده‌شده معتبر به نظر رسید، می‌توانید برای نوشتن ایمیج جدید تلاش کنید. اکنون در هر صورت باید کد فعال‌ساز برد را فعال کنید، زیرا این کد به این دلیل نوشته شده که مشخص است نوشتن/پاک‌سازی بدون فعال‌ساز برد با شکست مواجه می‌شود. در هر صورت (موفقیت یا شکست)، لطفاً گزارش آن را به فهرست پستی flashprog ارسال کنید (به بخش زیر مراجعه فرمایید).

کوربوت (Coreboot)

در سیستم‌هایی که coreboot را اجرا می‌کنند، flashprog بررسی می‌کند که آیا ایمیج مورد نظر با مادربرد شما مطابقت دارد یا خیر. این امر نیازمند وجود شناسه ویژه برد در ایمیج است. اگر flashprog تشخیص دهد ایمیجی که می‌خواهید بنویسید و برد فعلی همخوانی ندارند، از نوشتن ایمیج خودداری می‌کند مگر این که مورد زیر را مشخص کنید:

flashprog -p internal:boardmismatch=force

سوپر I/O سری ITE IT87

اگر مادربرد شما توسط گیگابایت ساخته شده و از DualBIOS پشتیبانی می‌کند، به احتمال بسیار زیاد از یک Super I/O سری ITE IT87 برای جابه‌جایی میان دو تراشه فلش استفاده می‌کند. در هر لحظه تنها به یکی از آن‌ها می‌توان دسترسی داشت و می‌توانید به صورت دستی با ساختار دستوری زیر انتخاب کنید که کدام یک استفاده شود:

flashprog -p internal:dualbiosindex=chip

که در آن chip شاخص تراشه مورد استفاده است (۰ = اصلی، ۱ = پشتیبان). با حذف پارامتر chip می‌توانید بررسی کنید که کدام تراشه هم‌اکنون انتخاب شده است.

اگر مادربرد شما از یک Super I/O سری ITE IT87 برای ترجمه گذرگاه فلش LPC<->SPI استفاده می‌کند، flashprog باید این پیکربندی را به طور خودکار شناسایی کند. اگر می‌خواهید درگاه پایه I/O کنترلر SPI سری IT87 را به صورت دستی به جای مقدار ارائه‌شده توسط BIOS تنظیم کنید، از ساختار دستوری زیر استفاده کنید:

flashprog -p internal:it87spiport=portnum

که در آن portnum شماره درگاه I/O است (باید مضربی از ۸ باشد). در موارد نادری که flashprog پل فعال IT87 LPC<->SPI را تشخیص نمی‌دهد، لطفاً گزارش اشکال ارسال کنید تا بتوانیم مشکل را بررسی نماییم.

چیپست‌های AMD

از چیپست SB700 به بعد، یک میکروکنترلر مجتمع (IMC) مبتنی بر 8051 در هر پل جنوبی (Southbridge) شرکت AMD تعبیه شده است. میان‌افزار آن در همان تراشه فلش میزبان قرار دارد که در صورت فعال بودن IMC، نوشتن روی فلش را پرخطر می‌سازد. برنامه flashprog تلاش می‌کند موقتاً IMC را غیرفعال کند، اما حتی در این حالت نیز تغییر محتویات فلش می‌تواند اثرات ناخواسته‌ای داشته باشد: هنگامی که IMC به کار خود ادامه می‌دهد (حداکثر پس از راه‌اندازی مجدد)، به اجرای کد از روی فلش ادامه خواهد داد. اگر کد به گونه‌ای نامناسب حذف یا تغییر یافته باشد، رفتار IMC غیرقابل پیش‌بینی خواهد بود. بنابراین، اگر flashprog یک IMC فعال را تشخیص دهد، پشتیبانی از نوشتن را غیرفعال می‌کند مگر این که کاربر با ساختار دستوری زیر آن را اجبار کند:

flashprog -p internal:amd_imc_force=yes

کاربر مسئول ارائه یک ایمیج مناسب یا کنار گذاشتن ناحیه IMC به کمک یک فایل طرح‌بندی است. این محدودیت ممکن است در آینده پس از درک بهتر جزئیات و دریافت بازخورد کافی از کاربران برطرف شود. لطفاً در صورتی که برای نوشتن روی تراشه مجبور به استفاده از این گزینه شدید، نتیجه را گزارش دهید.

یک پارامتر اختیاری spispeed فرکانس گذرگاه SPI را در صورت لزوم مشخص می‌کند (یعنی SB600 یا جدیدتر با یک تراشه فلش SPI که مستقیماً به چیپست متصل است). ساختار دستوری آن به صورت زیر است:

flashprog -p internal:spispeed=frequency

که در آن frequency می‌تواند یکی از مقدارهای '16.5 MHz'، '22 MHz'، '33 MHz'، '66 MHz'، '100 MHZ'، یا '800 kHz' باشد. پشتیبانی از فرکانس‌های خاص به نسل چیپست بستگی دارد:

* SB6xx, SB7xx, SP5xxx: از 16.5 مگاهرتز تا و شامل 33 مگاهرتز

* SB8xx, SB9xx, Hudson: از 16.5 مگاهرتز تا و شامل 66 مگاهرتز

* Yangtze (با موتور SPI 100 که در Kabini و Tamesh یافت می‌شود): همه موارد

حالت پیش‌فرض استفاده از 16.5 مگاهرتز و غیرفعال کردن خواندن سریع (Fast Reads) است.

چیپست‌های Intel

اگر چیپست اینتل با پل جنوبی ICH8 یا جدیدتر به همراه فلش SPI متصل دارید، و اگر یک توصیف‌گر معتبر روی آن نوشته شده باشد (مثلاً توسط سازنده)، چیپست روش دیگری برای دسترسی به تراشه(های) فلش موسوم به ترتیب‌سنجی سخت‌افزاری (Hardware Sequencing) ارائه می‌دهد. این روش بسیار ساده‌تر از روش دسترسی معمول (به نام ترتیب‌سنجی نرم‌افزاری (Software Sequencing)) است، اما به نرم‌افزار اجازه انتخاب دستورات SPI ارسالی را نمی‌دهد. می‌توانید از ساختار دستوری زیر استفاده کنید:

flashprog -p internal:ich_spi_mode=value

که در آن value می‌تواند auto، swseq یا hwseq باشد. به صورت پیش‌فرض (یا هنگام تنظیم ich_spi_mode=auto) این ماژول تلاش می‌کند از swseq استفاده کند و تنها در صورت نیاز (مثلاً اگر کدهای عملیاتی مهم به دلیل قفل‌شدگی غیرقابل دسترسی باشند؛ یا بیش از یک تراشه فلش متصل باشد) hwseq را فعال می‌کند. گزینه‌های دیگر (swseq, hwseq) حالت مربوطه را (در صورت امکان) انتخاب می‌کنند.

پل‌های جنوبی ICH8 و جدیدتر نیز در صورت نوشته شدن توصیف‌گر معتبر، ممکن است دارای محدوده‌های آدرس قفل‌شده از انواع گوناگون باشند. سپس فضای آدرس فلش به چندین ناحیه موسوم به "Flash Regions" تقسیم می‌شود که به ترتیب شامل میان‌افزار میزبان، میان‌افزار ME و غیره هستند. توصیف‌گر فلش همچنین می‌تواند تا ۵ ناحیه به اصطلاح "Protected Regions" را مشخص کند که محدوده‌های آدرس آزادانه انتخاب‌شده مستقل از "Flash Regions" پیش‌گفته هستند. تمامی آن‌ها را می‌توان به صورت جداگانه در برابر خواندن و/یا نوشتن محافظت کرد.

اگر چیپست اینتل با پل جنوبی ICH2 یا جدیدتر دارید و می‌خواهید مقادیر IDSEL خاصی را برای یک تراشه فلش غیرپیش‌فرض یا یک کنترلر جاسازی‌شده (EC) تنظیم کنید، می‌توانید از ساختار دستوری زیر استفاده کنید:

flashprog -p internal:fwh_idsel=value

که در آن value مقدار خام هگزادسیمال ۴۸ بیتی است که باید در ثبات‌های IDSEL پل جنوبی اینتل نوشته شود. ۳۲ بیت بالایی برای هر محدوده ۵۱۲ کیلوبایتی بین 0xffc00000 و 0xffffffff از یک رقم هگزادسیمال استفاده می‌کنند و ۱۶ بیت پایینی برای هر محدوده ۱۰۲۴ کیلوبایتی بین 0xff400000 و 0xff7fffff از یک رقم هگزادسیمال بهره می‌برند. راست‌ترین رقم هگزادسیمال با پایین‌ترین محدوده آدرس مطابقت دارد. تمام محدوده‌های آدرس دارای یک محدوده مشابه ۴ مگابایت پایین‌تر با تنظیمات IDSEL یکسان هستند. مقدار پیش‌فرض برای ICH7 در مثال زیر آورده شده است.

مثال: flashprog -p internal:fwh_idsel=0x001122334567

لپ‌تاپ‌ها (Laptops)

استفاده از flashprog روی لپ‌تاپ‌های قدیمی‌تری که از گذرگاه SPI بوت نمی‌شوند خطرناک است و می‌تواند به سادگی سخت‌افزار شما را غیرقابل استفاده کند (بخش اشکالات (BUGS) را نیز ببینید). کنترلر جاسازی‌شده (EC) در برخی دستگاه‌ها ممکن است در فرآیند فلش کردن تداخل نامناسب ایجاد کند. اطلاعات بیشتر در ویکی ما ⟨https://flashprog.org/Laptops⟩ موجود است. مشکلات زمانی بروز می‌کنند که تراشه فلش میان BIOS و میان‌افزار EC به اشتراک گذاشته شده باشد، و دومی انتظار دسترسی flashprog به تراشه را نداشته باشد. در حالی که flashprog تلاش می‌کند محتویات آن حافظه را تغییر دهد، EC ممکن است نیاز به واکشی دستورالعمل‌ها یا داده‌های جدید از آن داشته باشد و کارکرد صحیح آن متوقف شود. همچنین پویش و خواندن از تراشه ممکن است باعث اختلال در EC شده و منجر به خرابی فن، خرابی نور پس‌زمینه، خاموشی ناگهانی و سایر عوارض نامطلوب شود. برنامه flashprog تلاش می‌کند اجرا روی چنین لپ‌تاپ‌هایی را تشخیص داده و پویش را به گذرگاه‌های SPI محدود کند. اگر می‌خواهید با مسئولیت خودتان گذرگاه LPC را در هر صورت بررسی کنید، از گزینه زیر استفاده نمایید:

flashprog -p internal:laptop=force_I_want_a_brick

اگر فلش کردن را روی لپ‌تاپ به زور اجرا کنید، کمکی به شما نخواهیم کرد؛ چرا که این یک اقدام واقعاً نسنجیده است.

به شما هشدار داده شد.

در حال حاضر ما برای تشخیص لپ‌تاپ‌ها به نوع شاسی کدگذاری‌شده در داده‌های DMI/SMBIOS متکی هستیم. برخی سازندگان این بیت‌ها را به درستی پیاده‌سازی نکرده یا آن‌ها را روی مقادیر عمومی و/یا ساختگی تنظیم کرده‌اند. در این حالت flashprog یک هشدار صادر کرده و گذرگاه‌ها را مانند بالا محدود می‌کند. در این صورت می‌توانید با مسئولیت خود از دستور زیر استفاده کنید:

flashprog -p internal:laptop=this_is_not_a_laptop

تا به flashprog اعلام کنید که روی لپ‌تاپ اجرا نمی‌شود.

پروگرمر dummy تنها روی یک بافر در حافظه عمل می‌کند. این پروگرمر روشی امن و سریع برای آزمایش جنبه‌های مختلف flashprog فراهم می‌آورد و عمدتاً در توسعه و حین اشکال‌زدایی به کار می‌رود. این ابزار قادر است برخی تراشه‌ها را تا حدی شبیه‌سازی کند (عملیات پایه‌ای شناسایی/خواندن/پاک‌سازی/نوشتن کار می‌کنند).

یک پارامتر اختیاری انواع گذرگاه‌هایی را که باید پشتیبانی کند مشخص می‌سازد. برای این منظور باید از ساختار دستوری زیر استفاده کنید:

flashprog -p dummy:bus=[type[+type[+type]]]

که در آن type می‌تواند شامل parallel، lpc، fwh، spi به هر ترتیبی باشد. اگر bus را بدون type مشخص کنید، تمام گذرگاه‌ها غیرفعال خواهند شد. اگر bus را مشخص نکنید، تمام گذرگاه‌ها فعال خواهند بود.

مثال: flashprog -p dummy:bus=lpc+fwh

پروگرمر dummy از شبیه‌سازی تراشه فلش برای خودآزمایی‌های خودکار بدون دسترسی به سخت‌افزار پشتیبانی می‌کند. اگر می‌خواهید یک تراشه فلش را شبیه‌سازی کنید، از ساختار دستوری زیر استفاده فرمایید:

flashprog -p dummy:emulate=chip

که در آن chip یکی از تراشه‌های زیر است (لطفاً تنها نام تراشه را بدون نام سازنده قید کنید):

* تراشه فلش SPI مدل ST M25P10-A (اندازه ۱۲۸ کیلوبایت، RDID، نوشتن صفحه‌ای)

* تراشه فلش SPI مدل ST M25P10.RES (اندازه ۱۲۸ کیلوبایت، RES، نوشتن صفحه‌ای)

* تراشه فلش SPI مدل SST SST25VF040.REMS (اندازه ۵۱۲ کیلوبایت، REMS، نوشتن بایتی)

* تراشه فلش SPI مدل SST SST25VF032B (اندازه ۴۰۹۶ کیلوبایت، RDID، نوشتن AAI)

* تراشه فلش SPI مدل Macronix MX25L6436 (اندازه ۸۱۹۲ کیلوبایت، RDID، SFDP)

* تراشه فلش SPI مدل Winbond W25Q128FV (اندازه ۱۶۳۸۴ کیلوبایت، RDID)

* تراشه فلش SPI مدل Spansion S25FL128L (اندازه ۱۶۳۸۴ کیلوبایت، RDID)

مثال: flashprog -p dummy:emulate=SST25VF040.REMS

ایمیج‌های ماندگار (Persistent images)

اگر از شبیه‌سازی تراشه فلش استفاده می‌کنید، ماندگاری ایمیج فلش نیز با استفاده از ساختار دستوری زیر در دسترس است:

flashprog -p dummy:emulate=chip,image=image.rom

که در آن image.rom فایلی است که محتویات تراشه شبیه‌سازی‌شده در هنگام شروع flashprog از آن خوانده شده و در هنگام خروج flashprog روی آن نوشته می‌شود.

مثال: flashprog -p dummy:emulate=M25P10.RES,image=dummy.bin

اندازه تکه‌های نوشتن در SPI

اگر از شبیه‌سازی تراشه فلش SPI برای تراشه‌ای استفاده می‌کنید که از نوشتن صفحه‌ای SPI با کد عملیاتی پیش‌فرض پشتیبانی می‌کند، می‌توانید حداکثر اندازه مجاز تکه نوشتن را با ساختار دستوری زیر تعیین کنید:

flashprog -p dummy:emulate=chip,spi_write_256_chunksize=size

که در آن size تعداد بایت‌ها است (حداقل ۱، حداکثر ۲۵۶).

مثال:

flashprog -p dummy:emulate=M25P10.RES,spi_write_256_chunksize=5

لیست سیاه SPI

برای شبیه‌سازی پروگرمری که از ارسال دستورات خاص SPI به تراشه فلش خودداری می‌کند، می‌توانید یک لیست سیاه از دستورات SPI را با ساختار دستوری زیر مشخص نمایید:

flashprog -p dummy:spi_blacklist=commandlist

که در آن commandlist فهرستی از نمایش‌های هگزادسیمال دو رقمی دستورات SPI است. برای نمونه اگر commandlist برابر 0302 باشد، flashprog به گونه‌ای عمل می‌کند که گویی کنترلر SPI از اجرای دستور 0x03 (READ) و دستور 0x02 (WRITE) امتناع می‌ورزد. طول commandlist می‌تواند تا ۵۱۲ نویسه (۲۵۶ دستور) باشد. نکته پیاده‌سازی: flashprog در حین اجرای دستور متوجه خطا خواهد شد.

لیست نادیده‌گیری SPI

برای شبیه‌سازی تراشه فلشی که دستورات خاص SPI را نادیده می‌گیرد (پشتیبانی نمی‌کند)، می‌توانید یک لیست نادیده‌گیری از دستورات SPI با ساختار دستوری زیر مشخص کنید:

flashprog -p dummy:spi_ignorelist=commandlist

که در آن commandlist فهرستی از نمایش‌های هگزادسیمال دو رقمی دستورات SPI است. اگر commandlist برای نمونه 0302 باشد، تراشه فلش شبیه‌سازی‌شده دستور 0x03 (READ) و دستور 0x02 (WRITE) را نادیده می‌گیرد. طول commandlist می‌تواند تا ۵۱۲ نویسه (۲۵۶ دستور) باشد. نکته پیاده‌سازی: flashprog در حین اجرای دستور متوجه خطا نخواهد شد.

ثبات وضعیت SPI

می‌توانید محتوای اولیه ثبات وضعیت تراشه را با ساختار دستوری زیر مشخص فرمایید:

flashprog -p dummy:spi_status=content

که در آن content یک مقدار هگزادسیمال تا سقف ۲۴ بیت است. برای نمونه، 0x332211 مقدار 0x11 را به SR1، مقدار 0x22 را به SR2 و مقدار 0x33 را به SR3 تخصیص می‌دهد. مقادیر کوتاه‌تر با صفرهای سمت چپ تا ۲۴ بیت پر می‌شوند. برای جزئیات در مورد محتوای ثبات‌ها، برگه مشخصات تراشه انتخابی را مشاهده فرمایید.

محافظت در برابر نوشتن (Write protection)

تراشه‌های با شبیه‌سازی WP عبارتند از: W25Q128FV, S25FL128L.

می‌توانید وضعیت پایه حفاظت سخت‌افزاری (WP) را با ساختار دستوری زیر شبیه‌سازی کنید:

flashprog -p dummy:hwwp=state

که در آن state برابر "yes" یا "no" (مقدار پیش‌فرض) است. "yes" بدان معناست که حالت فعال پایه حاکی از محافظت تراشه در برابر نوشتن است (در سخت‌افزار واقعی این پایه معمولاً نفی می‌شود، اما در اینجا این‌گونه نیست).

این پروگرمرها گزینه‌ای برای تعیین آدرس PCI کارتی که می‌خواهید استفاده کنید دارند، که در صورت نصب بیش از یک کارت پشتیبانی‌شده توسط پروگرمر انتخابی در سیستم شما، باید مشخص شود. ساختار دستوری به صورت زیر است:

flashprog -p xxxx:pci=bb:dd.f،

که در آن xxxx نام پروگرمر، bb شماره گذرگاه PCI، dd شماره دستگاه PCI، و f شماره تابع PCI دستگاه مورد نظر است.

مثال: flashprog -p nic3com:pci=05:04.0

به دلیل نحوه آدرس‌دهی مبهم کنترلر VIA VT6421A، کاربر می‌تواند یک آفست را با ساختار دستوری زیر مشخص کند:

flashprog -p atavia:offset=addr

که در آن addr مطابق معمول تفسیر خواهد شد (پیشوند 0x یا 0 برای مقادیر هگزادسیمال یا هشت‌هشتی، و در غیر این صورت دهدهی). برای اطلاعات بیشتر لطفاً صفحه ویکی آن ⟨https://flashprog.org/VT6421A⟩ را ببینید.

این پروگرمر در حال حاضر بدون توجه به اندازه واقعی تراشه فلش، به ۳۲ کیلوبایت محدود شده است. این امر از این واقعیت ناشی می‌شود که در دستگاه آزمایش‌شده (مدل Promise Ultra100)، همه خطوط آدرس تراشه در عمل متصل نبودند. می‌توانید از این پروگرمر برای فلش کردن به‌روزرسانی‌های میان‌افزار استفاده کنید، زیرا حجم آن‌ها تنها ۱۶ کیلوبایت است (پر کردن فضا تا ۳۲ کیلوبایت الزامی است).

این نخستین ماژول پروگرمر در flashprog است که دسترسی به تراشه‌های فلش NOR را فراهم نمی‌کند، بلکه به EEPROMهای نصب‌شده روی کارت‌های شبکه گیگابیت اترنت مبتنی بر NIC مدل 82580 اینتل دسترسی دارد. از آنجا که EEPROMها معمولاً اندازه خود را اعلام نکرده و اجازه شناسایی خودکار نمی‌دهند، کنترلر به مقادیر اندازه صحیحی که در آدرس‌های از پیش تعریف‌شده درون تراشه نوشته شده‌اند تکیه می‌کند. برنامه flashprog از این طرح پیروی می‌کند، اما اگر یک EEPROM/کارت برنامه‌ریزی‌نشده شناسایی شود، حداقل اندازه ۱۶ کیلوبایت (۱۲۸ کیلوبیت) را در نظر می‌گیرد. اینتل EEPROMهای زیر را سازگار اعلام کرده است: Atmel AT25128، AT25256، Micron (ST) M95128، M95256 و OnSemi (Catalyst) CAT25CS128.

این ماژول پروگرمر از فلش موازی تا سقف ۱ مبی‌بایت متصل به کارت‌های AMD PCnet پشتیبانی می‌کند. از آنجا که نمی‌توان با اطمینان گفت همه ۲۰ خط آدرس موازی در یک کارت خاص متصل هستند یا خیر، flashprog تلاش می‌کند اندازه قابل آدرس‌دهی را بررسی و شناسایی کند. اگر این کار به طور مطمئن کار نکند، می‌توان منطق شناسایی را با پارامتر max_decode_kb بازنویسی کرد:

flashprog -p nicamd:max_decode_kb=128

این ماژول پروگرمر از فلش موازی تا سقف ۶۴ کیبی‌بایت متصل به کارت‌های گرافیک Matrox پشتیبانی می‌کند. از ROM BAR برای خواندن و نوشتن فلش استفاده می‌شود. اگرچه به دلیل غیرفعال بودن کل ثبات BAR به صورت پیش‌فرض، به احتمال زیاد باید خودمان آن را پیکربندی کنیم. رمزگشایی ROM BAR اولویت دارد، بنابراین می‌توانیم آدرس MMIO BAR را قرض بگیریم، اما باید کاملاً مطمئن شویم که هیچ درایور گرافیکی در حال اجرا نیست. از این رو، این قرض گرفتن باید صریحاً با آرگومان bar=no_gfx_driver_running فعال شود:

flashprog -p gfxmatrox:bar=no_gfx_driver_running

این ماژول از پروگرمرهای گوناگون مبتنی بر تراشه‌های FTDI FT2232/FT4232H/FT4233H/FT232H پشتیبانی می‌کند؛ از جمله: DLP Design DLP-USB1232H، openbiosprog-spi، Amontec JTAGkey/JTAGkey-tiny/JTAGkey-2، Dangerous Prototypes Bus Blaster، Olimex ARM-USB-TINY/-H، Olimex ARM-USB-OCD/-H، برد اشکال‌زدایی OpenMoko Neo1973 (نسخه V2+)، آداپتور چندپروتکله USB مدل TIAO/DIYGADGET (موسوم به TUMPA)، TUMPA Lite، GOEPEL PicoTAP، Google Servo v1/v2، Tin Can Tools Flyswatter/Flyswatter 2 و Kristech KT-LINK.

یک پارامتر اختیاری نوع کنترلر، کانال/واسط/درگاهی را که باید پشتیبانی شود تعیین می‌کند. برای این منظور باید از ساختار دستوری زیر استفاده کنید:

flashprog -p ft2232_spi:type=model,port=interface

که در آن model می‌تواند یکی از مقدارهای 2232H، 4232H، 232H، jtagkey، busblaster، openmoko، arm-usb-tiny، arm-usb-tiny-h، arm-usb-ocd، arm-usb-ocd-h، tumpa، tumpalite، picotap، google-servo، google-servo-v2، google-servo-v2-legacy یا kt-link باشد و interface می‌تواند A، B، C، یا D باشد. مدل پیش‌فرض 4232H و واسط پیش‌فرض A است و از GPIO به صورت پیش‌فرض استفاده نمی‌شود.

اگر بیش از یک دستگاه سازگار با ft2232_spi متصل باشد، می‌توانید با مشخص کردن شماره سریال آن با ساختار دستوری زیر انتخاب کنید که کدام دستگاه استفاده شود:

flashprog -p ft2232_spi:serial=number

که در آن number شماره سریال دستگاه است (که برای نمونه در خروجی lsusb -v یافت می‌شود).

تمامی مدل‌های پشتیبانی‌شده توسط درایور ft2232_spi می‌توانند نرخ ساعت SPI را با تنظیم یک مقسم پیکربندی کنند. مقسم‌های قابل بیان، همگی اعداد زوج بین ۲ و 2^17 (=131072) هستند که منجر به فرکانس‌های ساعت SPI از ۶ مگاهرتز تا حدود ۹۲ هرتز برای ورودی‌های ۱۲ مگاهرتز (تراشه‌های غیر H) و ۳۰ مگاهرتز تا حدود ۴۵۸ هرتز برای ورودی‌های ۶۰ مگاهرتز (تراشه‌های 'H') می‌شوند. مقسم پیش‌فرض روی ۲ تنظیم شده است، اما می‌توانید با تعیین پارامتر اختیاری divisor با ساختار دستوری زیر از مقسم دیگری استفاده کنید:

flashprog -p ft2232_spi:divisor=div

با استفاده از پارامتر csgpiol (منسوخ شده - به جای آن از gpiol استفاده کنید) می‌توان یک پایه CS# اضافی انتخاب کرد، که مقدار آن می‌تواند عددی بین 0 و 3 باشد که به ترتیب بیانگر GPIOL0-GPIOL3 است. مثال:

flashprog -p ft2232_spi:csgpiol=3

پارامتر gpiolX=[HLC] امکان استفاده از پایه‌های GPIOL را به عنوان gpioهای عمومی با مقدار ثابت در طول فلش کردن یا به عنوان سیگنال CS# اضافی فراهم می‌آورد، که در آن X می‌تواند عددی بین 0 و 3 باشد که به ترتیب بیانگر GPIOL0-GPIOL3 است. این پارامتر را می‌توان چندین بار، هر بار برای یک پایه GPIOL مشخص کرد. مقادیر معتبر عبارتند از H ، L و C :
H - تنظیم خروجی GPIOL روی سطح بالا (High)
L - تنظیم خروجی GPIOL روی سطح پایین (Low)
C - استفاده از GPIOL به عنوان خروجی CS# اضافی

مثال:

flashprog -p ft2232_spi:gpiol0=H

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

این درایور از پروگرمرهای مبتنی بر تراشه FTDI FT4222H پشتیبانی می‌کند.

از پارامتر اختیاری cs می‌توان برای انتخاب واسط USB و خروجی CS# مربوطه از 0..3 استفاده کرد، مانند:

flashprog -p ft4222_spi:cs=3

درایور ft4222_spi از تنظیم نرخ ساعت SPI بر حسب کیلوهرتز با پارامتر spispeed پشتیبانی می‌کند. نرخ ساعت واقعی به یک مقدار پشتیبانی‌شده (کسرهای توان ۲ از ساعت‌های پایه ۸۰، ۶۰ و ۴۸ مگاهرتز) گرد می‌شود. از این رو بالاترین نرخ‌های ساعت SPI پشتیبانی‌شده عبارتند از ۴۰، ۳۰، ۲۴، ۲۰، ۱۵، ۱۲ مگاهرتز و غیره. از آنجا که این موضوع ساعت پایه کنترلر و در نتیجه پهنای باند کلی را نیز تحت تاثیر قرار می‌دهد، نکته ظریفی وجود دارد: خواندن‌های ورودی/خروجی چهارگانه (Quad-i/o) در فرکانس ۲۰ مگاهرتز (ساعت پایه ۸۰ مگاهرتز) در عمل می‌توانند سریع‌تر از فرکانس‌های ۳۰ یا ۲۴ مگاهرتز با ساعت پایه پایین‌تر باشند.

flashprog -p ft4222_spi:spispeed=20000

مقدار پیش‌فرض ۱۰ مگاهرتز است.

از آنجا که FT4222H از ورودی/خروجی دوگانه و چهارگانه پشتیبانی می‌کند، پارامتر اضافی iomode برای تعیین تعداد خطوط قابل استفاده برای ورودی/خروجی دوطرفه وجود دارد. مقادیر معتبر عبارتند از single، dual، یا quad. حالت پیش‌فرض dual است زیرا دست‌کم دو خط همیشه متصل هستند (MOSI و MISO). حالت ورودی/خروجی چهارگانه بیشترین کاربرد را برای دستیابی به نرخ‌های انتقال بالا زمانی دارد که راه‌اندازی سخت‌افزاری برای نرخ‌های ساعت بالا به اندازه کافی پایدار نباشد؛ مانند:

flashprog -p ft4222_spi:spispeed=15000,iomode=quad

توجه داشته باشید که پهنای باند کلی FT4222H به ۵۲.۸ مگابیت بر ثانیه (با ساعت پایه ۸۰ مگاهرتز) محدود است. این پهنای باند تقریباً در 20MHz x4 به اشباع می‌رسد.

این ماژول از تمام پروگرمرهایی که با پروتکل serprog صحبت می‌کنند پشتیبانی می‌کند. این شامل برخی دستگاه‌های مبتنی بر آردوینو و همچنین پروگرمرهای گوناگون ساخته‌شده توسط Urja Rannikko، Juhana Helovuo، Stefan Tauner، Chi Zhang و بسیاری دیگر است.

یک پارامتر اجباری یا یک دستگاه سریال (و بادریت) یا یک ترکیب IP/درگاه را برای ارتباط با پروگرمر مشخص می‌کند. ترکیب دستگاه/بادریت باید با dev= شروع شده و نرخ باد اختیاری را با یک دونقطه جدا کند؛ برای نمونه:

flashprog -p serprog:dev=/dev/ttyS0:115200

اگر نرخ باد داده نشود، از مقادیر پیش‌فرض سیستم‌عامل/سخت‌افزار استفاده خواهد شد. برای اتصالات IP باید از ساختار دستوری زیر استفاده فرمایید:

flashprog -p serprog:ip=ipaddr:port

در صورتی که دستگاه پشتیبانی کند، می‌توانید فرکانس ساعت SPI را با پارامتر اختیاری spispeed تنظیم کنید. فرکانس به صورت هرتز تجزیه می‌شود، مگر این که پسوند M، یا k داده شود که در این صورت به ترتیب مگاهرتز یا کیلوهرتز استفاده می‌شود. مثالی که فرکانس را روی ۲ مگاهرتز تنظیم می‌کند:

flashprog -p serprog:dev=/dev/ttyACM0,spispeed=2M

در صورتی که دستگاه پشتیبانی کند، می‌توانید با پارامتر اختیاری cs تعیین کنید که کدام Chip Select مربوط به SPI استفاده شود. مثالی که به پروگرمر می‌گوید از تراشه‌گزین شماره ۰ استفاده کند:

flashprog -p serprog:dev=/dev/ttyACM0:cs=0

اطلاعات بیشتر درباره serprog در فایل serprog-protocol.txt در توزیع کد منبع موجود است.

پارامتر الزامی dev گره دستگاه Bus Pirate را مشخص می‌کند و پارامتر اختیاری spispeed فرکانس گذرگاه SPI را تعیین می‌نماید. جداکننده پارامترها کاما است. ساختار دستوری به صورت زیر است:

flashprog -p buspirate_spi:dev=/dev/device,spispeed=frequency

که در آن frequency می‌تواند یکی از مقدارهای 30k، 125k، 250k، 1M، 2M، 2.6M، 4M یا 8M (بر حسب هرتز) باشد. حالت پیش‌فرض حداکثر فرکانس ۸ مگاهرتز است.

نرخ باد برای ارتباط میان میزبان و Bus Pirate را می‌توان با پارامتر اختیاری serialspeed مشخص کرد. ساختار دستوری عبارت است از:

flashprog -p buspirate_spi:serialspeed=baud

که در آن baud می‌تواند 115200، 230400، 250000 یا 2000000 (2M) باشد. مقدار پیش‌فرض برای سخت‌افزار Bus Pirate نسخه ۳.۰ و بالاتر برابر 2M baud و در غیر این صورت ۱۱۵۲۰۰ است.

پارامتر اختیاری pullups استفاده از مقاومت‌های بالا‌کشنده (Pull-up) داخلی Bus Pirate را مشخص می‌کند. این ممکن است در صورتی که با یک تراشه فلش ROM کار می‌کنید که آن را به صورت فیزیکی از برد جدا کرده‌اید مورد نیاز باشد. ساختار دستوری به صورت زیر است:

flashprog -p buspirate_spi:pullups=state

که در آن state می‌تواند on یا off باشد. اطلاعات بیشتر درباره مقاومت‌های پول‌آپ Bus Pirate و هدف آن‌ها در راهنمایی توسط dangerousprototypes ⟨http://dangerousprototypes.com/docs/Practical_guide_to_Bus_Pirate_pull-up_resistors⟩ در دسترس است.

وضعیت پایه‌های منبع تغذیه Bus Pirate از طریق پارامتر اختیاری psus قابل کنترل است. ساختار دستوری به صورت زیر است:

flashprog -p buspirate_spi:psus=state

که در آن state می‌تواند on یا off باشد. این ویژگی به Bus Pirate امکان می‌دهد مستقیماً توان مورد نیاز تراشه ROM را تامین کند. همچنین با اتصال ورودی Vpu متعلق به Bus Pirate به پایه مناسب Vcc، می‌توان از این گزینه برای تامین ولتاژ پول‌آپ مورد نیاز (هنگام استفاده از گزینه pullups) استفاده کرد.

پارامتر اختیاری voltage ولتاژی را که PICkit2 باید استفاده کند مشخص می‌سازد. در صورت عدم ذکر واحد، واحد پیش‌فرض ولت است. می‌توانید از mV، millivolt، V یا Volt به عنوان مشخص‌کننده واحد استفاده کنید. ساختار دستوری به صورت زیر است:

flashprog -p pickit2_spi:voltage=value

که در آن value می‌تواند 0V، 1.8V، 2.5V، 3.5V یا معادل آن‌ها به میلی‌ولت باشد.

پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص می‌کند. ساختار دستوری به این صورت است:

flashprog -p pickit2_spi:spispeed=frequency

که در آن frequency می‌تواند شامل 250k، 333k، 500k یا 1M (بر حسب هرتز) باشد. حالت پیش‌فرض فرکانس ۱ مگاهرتز است.

پارامتر اختیاری voltage ولتاژ مورد استفاده توسط Dediprog را مشخص می‌کند. در صورت عدم تعیین واحد، واحد پیش‌فرض ولت است. می‌توانید از mV، milliVolt، V یا Volt به عنوان شناسه واحد استفاده کنید. ساختار دستوری به این صورت است:

flashprog -p dediprog:voltage=value

که در آن value می‌تواند 0V، 1.8V، 2.5V، 3.5V یا معادل آن‌ها به میلی‌ولت باشد.

پارامتر اختیاری device تعیین می‌کند که از میان چندین دستگاه Dediprog متصل، از کدام یک استفاده شود. لطفاً توجه داشته باشید که این ترتیب به تابع usb_get_busses() در libusb بستگی دارد و شماره‌گذاری از ۰ آغاز می‌شود. مثال کاربردی برای انتخاب دستگاه دوم:

flashprog -p dediprog:device=1

پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص می‌سازد. میان‌افزار دستگاه باید ۵.۰.۰ یا جدیدتر باشد. ساختار دستوری عبارت است از:

flashprog -p dediprog:spispeed=frequency

که در آن frequency می‌تواند 375k، 750k، 1.5M، 2.18M، 3M، 8M، 12M یا 24M (بر حسب هرتز) باشد. حالت پیش‌فرض فرکانس ۱۲ مگاهرتز است.

پارامتر اختیاری target تراشه هدف مورد استفاده را مشخص می‌کند. ساختار دستوری به این صورت است:

flashprog -p dediprog:target=value

که در آن value می‌تواند 1 یا 2 باشد تا به ترتیب تراشه هدف ۱ یا ۲ انتخاب شود. حالت پیش‌فرض تراشه هدف ۱ است.

مدل‌های پروگرمر Dediprog SF600 و SF700 از ورودی/خروجی دوگانه و چهارگانه پشتیبانی می‌کنند. حالت پیش‌فرض در مدل‌های جدیدتر با پروتکل نسخه ۳ برابر ورودی/خروجی دوگانه و در غیر این صورت تک‌خطی است. این حالت را می‌توان با پارامتر iomode تنظیم کرد. مقادیر معتبر عبارتند از single، dual، یا quad. برای نمونه، جهت فعال‌سازی ورودی/خروجی چهارگانه:

flashprog -p dediprog:iomode=quad

آدرس پایه ورودی/خروجی پیش‌فرض مورد استفاده برای درگاه موازی 0x378 است و می‌توانید با پارامتر اختیاری iobase یک آدرس پایه ورودی/خروجی جایگزین را با ساختار دستوری زیر مشخص کنید:

flashprog -p rayer_spi:iobase=baseaddr

که در آن baseaddr آدرس درگاه ورودی/خروجی پایه درگاه موازی است که باید مضربی از چهار باشد. اطمینان حاصل کنید که پیشوند "0x" را برای آدرس‌های درگاه هگزادسیمال فراموش نکنید.

نوع کابل پیش‌فرض، کابل RayeR است. می‌توانید با پارامتر اختیاری type نوع کابل را با ساختار دستوری زیر مشخص نمایید:

flashprog -p rayer_spi:type=model

که در آن model می‌تواند rayer برای کابل RayeR، byteblastermv برای کابل Altera ByteBlasterMV، stk200 برای Atmel STK200/300، wiggler برای Macraigor Wiggler، xilinx برای کابل موازی Xilinx III (DLC 5)، یا spi_tt برای سخت‌افزار سازگار با ابزارهای کوچک SPI باشد.

اطلاعات بیشتر درباره سخت‌افزار RayeR در وب‌سایت RayeR ⟨http://rayer.g6.cz/elektro/spipgm.htm⟩ در دسترس است. دیتاشیت Altera ByteBlasterMV را می‌توان از Altera ⟨http://www.altera.co.jp/literature/ds/dsbytemv.pdf⟩ دریافت کرد. برای اطلاعات بیشتر پیرامون Macraigor Wiggler به صفحه اصلی شرکت سازنده ⟨http://www.macraigor.com/wiggler.htm⟩ مراجعه فرمایید. شماتیک Xilinx DLC 5 در یک راهنمای کاربری زایلینکس ⟨http://www.xilinx.com/support/documentation/user_guides/xtp029.pdf⟩ منتشر شده است.

درگاه سریال (مانند /dev/ttyS0، /dev/ttyUSB0 در لینوکس یا COM3 در ویندوز) با استفاده از پارامتر اجباری dev مشخص می‌شود. نوع آداپتور بین SI-Prog (مورد استفاده برای دستگاه‌های SPI با PonyProg 2000) یا یک پروگرمر بیت‌بنگ سریال سفارشی با نام "serbang" قابل انتخاب است. پارامتر اختیاری type مقادیر "si_prog" (پیش‌فرض) یا "serbang" را می‌پذیرد.

اطلاعات پیرامون آداپتور SI-Prog را می‌توان در وب‌سایت آن ⟨http://www.lancos.com/siprogsch.html⟩ یافت.

یک نمونه فراخوانی flashprog به این صورت است:

flashprog -p pony_spi:dev=/dev/ttyS0,type=serbang

لطفاً توجه داشته باشید که هرچند آداپتورهای USB-to-serial تحت شرایط خاصی کار می‌کنند، اما این کار سرعت عملیات را به شدت کاهش می‌دهد.

تراشه فلش ROM برای دسترسی باید با پارامتر rom مشخص شود:

flashprog -p ogp_spi:rom=name

که در آن name برای ROM پیکربندی برابر cprom یا s3 و برای ROM مربوط به BIOS برابر bprom یا bios است. اگر بیش از یک کارت پشتیبانی‌شده توسط پروگرمر ogp_spi در سیستم شما نصب باشد، باید آدرس PCI کارت مورد نظر را با پارامتر pci= همان‌گونه که در بخش nic3com و غیره در بالا توضیح داده شد مشخص فرمایید.

یا گره دستگاه GPIO یا شماره تراشه و همچنین شماره‌های GPIO خطوط SPI باید مانند مثال‌های زیر مشخص شوند:

flashprog -p linux_gpio_spi:dev=/dev/gpiochip0,cs=8,sck=11,mosi=10,miso=9

یا

flashprog -p linux_gpio_spi:gpiochip=0,cs=8,sck=11,mosi=10,miso=9

در اینجا، gpiochip=0 تراشه 0 متعلق به GPIO را انتخاب می‌کند که از طریق گره دستگاه لینوکس /dev/gpiochip0 در دسترس است، و آرگومان‌های cs, sck, mosi, miso شماره‌های GPIO استفاده‌شده به عنوان خطوط SPI متصل به تراشه فلش ROM را مشخص می‌کنند. اگر libgpiod نسخه ۲.۰ یا جدیدتر موجود باشد، ورودی/خروجی دوگانه به طور پیش‌فرض با خطوط دوطرفه MOSI و MISO فعال می‌شود، و اگر تراشه‌ای با قابلیت ورودی/خروجی چهارگانه با چهار خط متصل شده باشد، GPIOهای اضافی را می‌توان از طریق پارامترهای io2 و io3 مشخص کرد.

در مثال بالا، شماره‌های GPIO خطوط سخت‌افزاری SPI در یک رایانه تک‌بردی Raspberry Pi مشخص شده‌اند. چهار پارامتر نخست GPIO اجباری هستند. توجه داشته باشید که این یک درایور بیت‌بنگ است و اگر دستگاه شما دارای کنترلر سخت‌افزاری SPI است، برای عملکرد بهتر به جای آن از درایور پروگرمر linux_spi استفاده کنید.

به خروجی ابزار gpioinfo مراجعه فرمایید تا اطمینان حاصل کنید شماره‌های GPIO صحیح بوده و استفاده نشده‌اند.

لطفاً توجه داشته باشید درایور linux_gpio_spi تنها روی لینوکس کار می‌کند و به libgpiod وابسته است.

می‌توانید دستگاه MTD مورد استفاده را با ساختار دستوری زیر مشخص کنید:

flashprog -p linux_mtd:dev=/dev/mtdX

که در آن /dev/mtdX گره دستگاه لینوکس برای دستگاه MTD شما است. در صورت مشخص نشدن، نخستین دستگاه MTD یافت‌شده (مانند /dev/mtd0) به طور پیش‌فرض استفاده خواهد شد.

لطفاً توجه داشته باشید که درایور linux_mtd تنها روی لینوکس کار می‌کند.

شما باید کنترلر SPI مورد استفاده را با ساختار دستوری زیر مشخص کنید:

flashprog -p linux_spi:dev=/dev/spidevX.Y

که در آن /dev/spidevX.Y گره دستگاه لینوکس برای کنترلر SPI شما است.

در صورتی که دستگاه پشتیبانی کند، می‌توانید فرکانس ساعت SPI را با پارامتر اختیاری spispeed تنظیم کنید. این فرکانس بر حسب کیلوهرتز تجزیه می‌شود. مثالی که فرکانس را روی ۸ مگاهرتز تنظیم می‌کند:

flashprog -p linux_spi:dev=/dev/spidevX.Y,spispeed=8000

لطفاً توجه داشته باشید که درایور linux_spi تنها روی لینوکس کار می‌کند.

کانال داده نمایشگر (Display Data Channel یا DDC) یک گذرگاه I2C موجود روی رابط‌های VGA و DVI است که امکان تبادل اطلاعات میان یک رایانه و نمایشگرهای متصل را فراهم می‌آورد. رایج‌ترین کاربردهای آن دریافت مشخصات نمایشگر از طریق EDID (در آدرس I2C برابر 0x50) و ارسال دستورات به نمایشگر با استفاده از پروتکل DDC/CI (در آدرس 0x37) است. در نمایشگرهایی که از تراشه‌های MSTAR SoC بهره می‌برند، دسترسی به حافظه فلش میان‌افزار SoC (که از طریق یک گذرگاه SPI دیگر به SoC متصل است) با استفاده از درگاه برنامه‌ریزی درون‌سیستمی (ISP) که معمولاً در آدرس 0x49 قرار دارد نیز امکان‌پذیر است. این ماژول flashprog امکان اخیر را از طریق درایور I2C لینوکس فراهم می‌کند.

مهم: پیش از استفاده از این پروگرمر، نمایشگر الزماً باید در حالت آماده‌به‌کار (Standby) باشد و تنها با کابل VGA به خروجی غیرفعال VGA رایانه‌ای که flashprog را اجرا می‌کند متصل شود. این نمایشگر به هیچ‌وجه نباید در طول این فرآیند به عنوان صفحه نمایش استفاده شود!

باید کنترلر DDC/I2C و آدرس I2C مورد استفاده را با ساختار دستوری زیر مشخص کنید:

flashprog -p mstarddc_spi:dev=/dev/i2c-X:YY

که در آن /dev/i2c-X گره دستگاه لینوکس برای کنترلر I2C شما متصل به کانال DDC نمایشگر است، و YY آدرس (هگزادسیمال) درگاه ISP متعلق به MSTAR است (معمولاً از آدرس 0x49 استفاده می‌شود). مثالی که از کنترلر I2C مسیر /dev/i2c-1 و آدرس 0x49 استفاده می‌کند:

flashprog -p mstarddc_spi:dev=/dev/i2c-1:49

همچنین با استفاده از پارامتر اختیاری noreset می‌توان از ارسال دستور بازنشانی (ریست) که معمولاً پس از اتمام عملیات flashprog به نمایشگر فرستاده می‌شود، جلوگیری کرد. مقدار 1 مانع از ارسال دستور بازنشانی توسط flashprog می‌شود. مثالی که در پایان عملیات نمایشگر را بازنشانی نمی‌کند:

flashprog -p mstarddc_spi:dev=/dev/i2c-1:49,noreset=1

لطفاً توجه داشته باشید در صورتی که در طول عملیات خطایی رخ دهد، ارسال دستور بازنشانی نیز متوقف می‌شود. برای ارسال دستور بازنشانی پس از آن، پس از اتمام موفقیت‌آمیز عملیات خواندن/نوشتن فلش، می‌توانید flashprog را یک بار دیگر در حالت پویش تراشه (بدون تعیین عملیات) و بدون پارامتر noreset اجرا کنید.

همچنین لطفاً توجه داشته باشید که درایور mstarddc_spi تنها روی لینوکس کار می‌کند.

پروگرمر WCH CH341A در حال حاضر از هیچ پارامتری پشتیبانی نمی‌کند. فرکانس SPI روی ۲ مگاهرتز ثابت است و CS0 طبق سخت‌افزار دستگاه استفاده می‌شود.

این درایور در حال حاضر به صورت ثابت برای استفاده از CS0 تنظیم شده است. یک پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص می‌کند:

flashprog -p ch347_spi:spispeed=frequency

که در آن frequency بر حسب kHz داده می‌شود و می‌تواند در محدوده ۴۶۸ تا ۶۰۰۰۰ باشد. این فرکانس به سمت پایین تا یک مقدار پشتیبانی‌شده (۶۰ مگاهرتز تقسیم بر توانی از ۲) گرد می‌شود. حالت پیش‌فرض فرکانس ۷.۵ مگاهرتز است. حالت SPI را نیز می‌توان با استفاده از پارامتر spimode تنظیم کرد:

flashprog -p ch347_spi:spimode=mode

که در آن mode در محدوده ۰ تا ۳ است. حالت پیش‌فرض، حالت ۰ است.

یک پارامتر اختیاری voltage می‌تواند برای مشخص کردن ولتاژ ورودی/خروجی استفاده شود. این پارامتر برای دستگاه NI USB-8452 موجود است. در صورت عدم تعیین واحد، واحد پیش‌فرض ولت است. می‌توانید از mV، milliVolt، V یا Volt به عنوان شناسه واحد استفاده فرمایید. ساختار دستوری به صورت زیر است:

flashprog -p ni845x_spi:voltage=value

که در آن value می‌تواند 1.2V، 1.5V، 1.8V، 2.5V، 3.3V یا معادل آن به میلی‌ولت باشد.

در صورتی که هیچ‌یک از ولتاژهای ورودی/خروجی پشتیبانی‌شده توسط پروگرمر در محدوده ولتاژ پشتیبانی‌شده توسط تراشه فلش شناسایی‌شده نباشد، flashprog عملیات را لغو می‌کند (برای جلوگیری از آسیب به تراشه فلش). می‌توانید با ارسال "yes" به پارامتر ignore_io_voltage_limits از این رفتار چشم‌پوشی کنید (مثلاً اگر از یک مدار مبدل ولتاژ خارجی استفاده می‌کنید). ساختار دستوری عبارت است از:

flashprog -p ni845x_spi:ignore_io_voltage_limits=yes

می‌توانید از پارامتر serial برای تعیین صریح این که کدام دستگاه متصل NI USB-845x باید استفاده شود، استفاده کنید. باید از شماره سریال هگزادسیمال ۷ رقمی دستگاه خود استفاده فرمایید. مثال کاربردی برای انتخاب دستگاه با شماره سریال 1230A12:

flashprog -p ni845x_spi:serial=1230A12

پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص می‌سازد. ساختار دستوری به این صورت است:

flashprog -p ni845x_spi:spispeed=frequency

که در آن frequency باید عددی متناسب با فرکانس مورد نظر بر حسب کیلوهرتز باشد. حداکثر frequency برای USB-8451 برابر ۱۲ مگاهرتز (۱۲۰۰۰ کیلوهرتز) و برای USB-8452 برابر ۵۰ مگاهرتز (۵۰۰۰۰ کیلوهرتز) است. حالت پیش‌فرض فرکانس ۱ مگاهرتز (۱۰۰۰ کیلوهرتز) است.

پارامتر اختیاری spispeed فرکانس گذرگاه SPI را تعیین می‌کند. ساختار دستوری عبارت است از:

flashprog -p digilent_spi:spispeed=frequency

که در آن frequency می‌تواند 62.5k، 125k، 250k، 500k، 1M، 2M یا 4M (بر حسب هرتز) باشد. حالت پیش‌فرض فرکانس ۴ مگاهرتز است.

پارامتر اختیاری spispeed فرکانس گذرگاه SPI را تعیین می‌کند. ساختار دستوری به صورت زیر است:

flashprog -p dirtyjtag_spi:spispeed=frequency

که در آن frequency می‌تواند هر مقداری بر حسب هرتز، کیلوهرتز یا مگاهرتز باشد که توسط پروگرمر پشتیبانی می‌شود. حالت پیش‌فرض فرکانس ۱۰۰ کیلوهرتز است.

این ماژول از دستگاه‌های SEGGER J-Link و موارد سازگار پشتیبانی می‌کند.

سیگنال MOSI تراشه فلش باید به پایه TDI پروگرمر متصل شود، MISO به TDO و SCK به TCK. سیگنال تراشه‌گزین (CS) تراشه فلش می‌تواند به پایه‌های مختلف پروگرمر متصل شود که با ساختار دستوری زیر قابل انتخاب است:

flashprog -p jlink_spi:cs=pin

که در آن pin می‌تواند TRST یا RESET باشد. پایه پیش‌فرض برای تراشه‌گزین RESET است. توجه داشته باشید که هنگام استفاده از RESET، چشمک زدن نشانگر LED به رنگ نارنجی یا قرمز طبیعی است.
علاوه بر این، پایه VTref پروگرمر باید به سطح منطقی تراشه فلش متصل شود. پروگرمر ولتاژ این پایه را اندازه‌گیری کرده و ولتاژ مرجع را برای مقایسه‌کننده‌های ورودی خود تولید می‌کند و ولتاژهای خروجی خود را با آن تطبیق می‌دهد.

پایه‌بندی دستگاه‌های دارای کانکتور ۲۰ پایه‌ای JTAG:

  +-------+
  |  1  2 |     1: VTref     2:
  |  3  4 |     3: TRST      4: GND
  |  5  6 |     5: TDI       6: GND
+-+  7  8 |     7:           8: GND
|    9 10 |     9: TCK      10: GND
|   11 12 |    11:          12: GND
+-+ 13 14 |    13: TDO      14:
  | 15 16 |    15: RESET    16:
  | 17 18 |    17:          18:
  | 19 20 |    19: PWR_5V   20:
  +-------+

اگر بیش از یک دستگاه سازگار متصل است، می‌توانید با تعیین شماره سریال آن با ساختار دستوری زیر دستگاه مورد استفاده را مشخص کنید:

flashprog -p jlink_spi:serial=number

که در آن number شماره سریال دستگاه است (که می‌توان آن را برای نمونه در خروجی lsusb -v یافت).

سرعت SPI را می‌توان با ساختار دستوری زیر انتخاب کرد:

flashprog -p jlink_spi:spispeed=frequency

که در آن frequency فرکانس ساعت SPI بر حسب کیلوهرتز است. حداکثر سرعت به دستگاه در حال استفاده بستگی دارد.

گزینه power=on می‌تواند برای فعال کردن منبع تغذیه ۵ ولت (PWR_5V) دستگاه J-Link در طول عملیات فلش استفاده شود.

این ماژول از برنامه‌ریزی فلش SPI از طریق واسط پل SPI پروگرمر/دیباگر STLINK V3 محصول شرکت STMicroelectronics پشتیبانی می‌کند:

flashprog -p stlinkv3_spi

اگر بیش از یک دستگاه سازگار متصل است، می‌توانید با تعیین شماره سریال آن با ساختار دستوری زیر انتخاب کنید که کدام دستگاه استفاده شود:

flashprog -p stlinkv3_spi:serial=number

که در آن number شماره سریال دستگاه است (که برای نمونه در خروجی lsusb -v یافت می‌شود).

سرعت SPI را می‌توان با استفاده از ساختار دستوری زیر انتخاب کرد:

flashprog -p stlinkv3_spi:spispeed=frequency

که در آن frequency فرکانس ساعت SPI بر حسب کیلوهرتز است. اگر فرکانس داده‌شده توسط آداپتور پشتیبانی نشود، نزدیک‌ترین فرکانس پشتیبانی‌شده پایین‌تر استفاده خواهد شد.

برای پشتیبان‌گیری و به‌روزرسانی BIOS خود، دستور زیر را اجرا کنید:

flashprog -p internal -r backup.rom -o backuplog.txt
flashprog -p internal -w newbios.rom -o writelog.txt

لطفاً اطمینان حاصل کنید که پیش از تلاش برای نوشتن، فایل backup.rom را در یک رسانه خارجی رونوشت کنید. این کار بازیابی آفلاین را آسان‌تر می‌کند.
اگر نوشتن با شکست مواجه شد و flashprog هشدار داد که تراشه در وضعیتی ناشناخته قرار دارد، می‌توانید با اجرای دستور زیر سعی کنید نسخه پشتیبان را بازیابی نمایید:

flashprog -p internal -w backup.rom -o restorelog.txt

اگر با مشکلی مواجه شدید، لطفاً با ما تماس گرفته و فایل‌های backuplog.txt، writelog.txt و restorelog.txt را ارسال فرمایید. برای اطلاعات تماس، بخش اشکالات (BUGS) را ببینید.

برنامه flashprog در صورت موفقیت با 0 خارج می‌شود، در بیشتر موارد شکست با 1، اما در صورت عدم موفقیت فراخوانی mmap() با 3 خارج می‌شود.

برنامه flashprog برای پروگرمرهای مختلف نیازمند مجوزهای دسترسی متفاوتی است.

پروگرمر internal نیازمند دسترسی مستقیم به حافظه (Raw memory)، دسترسی به فضای پیکربندی PCI، دسترسی مستقیم به درگاه‌های I/O (در x86) و دسترسی به MSR (در x86) است.

پروگرمر atavia نیازمند دسترسی به فضای پیکربندی PCI است.

پروگرمرهای nic3com، nicrealtek و nicnatsemi نیازمند دسترسی خواندن به فضای پیکربندی PCI و دسترسی مستقیم به درگاه I/O هستند.

پروگرمر atahpt نیازمند دسترسی به فضای پیکربندی PCI و دسترسی مستقیم به درگاه I/O است.

پروگرمرهای gfxmatrox، gfxnvidia، drkaiser و it8212 نیازمند دسترسی به فضای پیکربندی PCI و دسترسی مستقیم به حافظه هستند.

پروگرمر rayer_spi نیازمند دسترسی مستقیم به درگاه I/O است.

پروگرمرهای satasii، scsilsi، nicintel، nicintel_eeprom و nicintel_spi نیازمند دسترسی خواندن به فضای پیکربندی PCI و دسترسی مستقیم به حافظه هستند.

پروگرمرهای nicamd، satamv و atapromise نیازمند دسترسی خواندن به فضای پیکربندی PCI، دسترسی مستقیم به درگاه I/O و دسترسی مستقیم به حافظه هستند.

پروگرمر serprog نیازمند دسترسی TCP به شبکه یا دسترسی فضای کاربری به یک درگاه سریال است.

پروگرمر buspirate_spi نیازمند دسترسی فضای کاربری به یک درگاه سریال است.

پروگرمرهای ft2232_spi، usbblaster_spi و pickit2_spi از طریق API نسخه 0.1 کتابخانه libusb نیازمند دسترسی به دستگاه USB مربوطه هستند.

پروگرمرهای ch341a_spi و dediprog از طریق API نسخه 1.0 کتابخانه libusb نیازمند دسترسی به دستگاه USB مربوطه هستند.

پروگرمر dummy به هیچ‌گونه مجوز دسترسی نیاز ندارد.

پروگرمرهای internal، nicamd، nic3com، nicrealtek، nicnatsemi، gfxmatrox، gfxnvidia، drkaiser، satamv، satasii، scsilsi، atahpt، atavia و atapromise باید به عنوان مدیر سیستم/ریشه (superuser/root) اجرا شوند و به مجوز دسترسی مستقیم اضافی نیاز دارند.

پروگرمرهای serprog، buspirate_spi، dediprog، usbblaster_spi، ft2232_spi، pickit2_spi، ch341a_spi، digilent_spi و dirtyjtag_spi در صورت تنظیم مجوزهای دستگاه مناسب، در بیشتر سیستم‌عامل‌ها می‌توانند به عنوان یک کاربر عادی اجرا شوند.

پروگرمر ogp نیازمند دسترسی خواندن به فضای پیکربندی PCI و دسترسی مستقیم به حافظه است.

در OpenBSD، می‌توانید با تنظیم securelevel=-1 در /etc/rc.securelevel و راه‌اندازی مجدد، یا راه‌اندازی در حالت تک‌کاربره، مجوز دسترسی مستقیم را کسب کنید.

می‌توانید اشکالات را گزارش دهید، سؤالات خود را مطرح کنید یا گزارش‌های موفقیت را از طریق کانال‌های ارتباطی ما که در اینجا فهرست شده‌اند ارسال نمایید: https://www.flashprog.org/Contact.

همچنین، ما یک سرویس پیست‌بین (pastebin) ⟨https://paste.flashrom.org⟩ ارائه می‌دهیم که برای به اشتراک گذاشتن گزارش‌ها بدون شلوغ کردن کانال‌های ارتباطی بسیار مفید است.

استفاده از flashprog روی لپ‌تاپ‌های قدیمی خطرناک است و می‌تواند به راحتی سخت‌افزار شما را غیرقابل استفاده کند. برنامه flashprog تلاش می‌کند تشخیص دهد که آیا روی یک لپ‌تاپ حساس در حال اجراست یا خیر و به دلایل ایمنی پویش تراشه فلش را محدود می‌کند. لطفاً بحث دقیق پیرامون این موضوع و گزینه‌های مرتبط با flashprog را در پاراگراف لپ‌تاپ‌ها در زیربخش پروگرمر internal از بخش اطلاعات ویژه پروگرمرها (PROGRAMMER-SPECIFIC INFORMATION) و اطلاعات موجود در ویکی ما ⟨https://flashprog.org/Laptops⟩ مشاهده فرمایید.

برخی تراشه‌های فلش حاوی حافظه OTP هستند که اغلب با عنوان "ثبات‌های امنیتی (Security Registers)" شناخته می‌شوند. آن‌ها معمولاً ظرفیتی در محدوده چند بایت تا چند صد بایت دارند و می‌توان از آن‌ها برای دادن شناسه‌های یکتا به دستگاه‌ها و غیره استفاده کرد. برنامه flashprog قادر به خواندن یا نوشتن این حافظه‌ها نیست و بنابراین ممکن است نتواند یک تراشه را به طور کامل همانندسازی کند. برای انواع تراشه‌هایی که به داشتن حافظه‌های OTP شناخته می‌شوند، در صورت شناسایی هشداری چاپ می‌شود.

مشابه با حافظه‌های OTP، شناسه‌های یکتای برنامه‌ریزی‌شده در کارخانه و غیرقابل‌جعل هستند. این شناسه‌ها به هیچ وجه توسط کاربر قابل تغییر نیستند.

نرم‌افزار flashprog تحت مجوز عمومی گنو (GNU GPL) نسخه ۲ منتشر شده است. برخی فایل‌ها علاوه بر این تحت هر نسخه بعدی GPL نیز در دسترس هستند.

لطفاً فایل‌های جداگانه را ببینید.

Andrew Morgan
Carl-Daniel Hailfinger
Claus Gindhart
David Borg
David Hendricks
Dominik Geyer
Edward O'Callaghan
Eric Biederman
Giampiero Giancipoli
Helge Wagner
Idwer Vollering
Joe Bao
Joerg Fischer
Joshua Roys
Kyösti Mälkki
Luc Verhaegen
Li-Ta Lo
Mark Marshall
Markus Boas
Mattias Mattsson
Michael Karcher
Nikolay Petukhov
Patrick Georgi
Peter Lemenkov
Peter Stuge
Reinder E.N. de Haan
Ronald G. Minnich
Ronald Hoogenboom
Sean Nelson
Stefan Reinauer
Stefan Tauner
Stefan Wildemann
Stephan Guilloux
Steve Markgraf
Steven James
Urja Rannikko
Uwe Hermann
Wang Qingpei
Yinghai Lu
و چندین نفر دیگر؛ لطفاً برای جزئیات به تاریخچه گیت flashprog مراجعه فرمایید.
نگه‌دارندگان فعال از طریق فهرست پستی ⟨flashprog@flashprog.org⟩ در دسترس هستند.

این صفحه راهنما توسط Uwe Hermann ⟨uwe@hermann-uwe.de⟩، Carl-Daniel Hailfinger، Stefan Tauner و دیگران نوشته شده است. این راهنما تحت شرایط GNU GPL (نسخه ۲ یا بالاتر) دارای مجوز است.

flashprog-config(8), flashprog-write-protect(8)

2026-07-17 flashprog-v1.6-dirty