GreatFET One چیست؟
GreatFET One یک پلتفرم متنباز برای Hardware Hacking، توسعه و Debug است. دو USB، تعداد زیاد Pin توسعه و API پایتون اجازه میدهند ابزار سفارشی برای ارتباط با دنیای فیزیکی بسازید.
قابلیتها
GPIO، SPI، I2C، UART، JTAG، Logic Analysis، ADC/DAC و قابلیتهای USB از نقاط اصلی آن هستند. بردهای توسعهای موسوم به Neighbor نیز میتوانند قابلیتهای تازه اضافه کنند.
مناسب چه کاری است؟
Bring-up برد، Debug Firmware، تحلیل رابطهای خودتان و ساخت Prototype ابزارهای آزمایشگاهی. در Reverse Engineering فقط روی سختافزاری کار کنید که مالک آن هستید یا مجوز بررسی دارید.
ابزار چندمنظوره را چگونه به یک آزمایش مشخص وصل کنیم؟
GreatFET One پلی قابل برنامهریزی میان رایانه و مدار است. ارزش آن در این است که میتوان برای یک وظیفه آزمایشگاهی، رابط و منطق کنترل متناسب ساخت. با این حال، داشتن فهرست بلند پروتکلها به معنی تشخیص خودکار هر برد ناشناس نیست. ابتدا پرسش آزمایش را روشن کنید: میخواهید مقدار یک حسگر را بخوانید، زمانبندی یک خط را مشاهده کنید یا رابطی برای firmware خود بسازید؟ پاسخ این پرسش تعیین میکند کدام پایه، سطح الکتریکی و قابلیت نرمافزاری لازم است.
یک پروژه شروع مناسب، ارتباط با یک قطعه آموزشی دارای دیتاشیت و تغذیه مشخص است. این انتخاب اجازه میدهد خروجی مورد انتظار را از قبل بدانید. وقتی ابزار روی مدار شناختهشده درست کار کرد، میتوانید آن را در عیبیابی مدار پیچیدهتر استفاده کنید. شروع مستقیم با برد نامعلوم، چند مجهول را همزمان وارد میکند: ممکن است pinout، ولتاژ، پروتکل یا تنظیم نرمافزار اشتباه باشد. حذف مجهولها به ترتیب، سرعت یادگیری را بیشتر میکند.
بررسی الکتریکی پیش از اتصال
پایههای دیجیتال را بدون بررسی سطح ولتاژ و جهت به هدف متصل نکنید. باید بدانید کدام پایه زمین است، کدام منبع تغذیه و کدام ورودی یا خروجی است. اتصال دو خروجی فعال به یکدیگر میتواند جریان نامناسب ایجاد کند. همچنین وجود برق روی برد هدف و تغذیه از ابزار ممکن است مسیر تغذیه ناخواسته بسازد. در حالت اولیه، سیمکشی را با برق قطع بررسی و سپس با منبع مناسب و محدودیت جریان راهاندازی کنید.
دیتاشیت GreatFET و قطعه هدف مرجع تعیین محدوده مجاز هستند. اگر سطوح منطقی متفاوتاند، مبدل سطح مناسب لازم است؛ هر مدار تقسیم مقاومتی برای همه سرعتها و جهتها مناسب نیست. زمین مشترک و طول کابل نیز بر کیفیت سیگنال اثر دارند. در گذرگاه سریع، سیمهای بلند آزمایشگاهی میتوانند لبهها را خراب کنند و خطاهایی شبیه مشکل پروتکل ایجاد کنند. شکل فیزیکی اتصال را در یادداشت آزمایش ثبت کنید، نه فقط نام پایهها را.
نرمافزار میزبان و firmware
نسخه کتابخانه میزبان و firmware برد باید با هم سازگار باشند. اگر ابزار در سیستم دیده میشود ولی فرمانها خطا میدهند، صرف وجود USB را نشانه کامل بودن نصب ندانید. تشخیص دستگاه، مجوز دسترسی و سازگاری API سه مرحله جدا هستند. ابتدا ابزار شناسایی رسمی را اجرا و مشخصات غیرمحرمانه دستگاه را ثبت کنید. سپس یک کار ساده مانند خواندن وضعیت یا کنترل LED را طبق راهنما آزمون کنید تا مسیر پایه میزبان تا برد ثابت شود.
در Linux، مجوز دستگاه ممکن است مانع دسترسی کاربر عادی شود. اجرای دائمی همه اسکریپتها با دسترسی مدیریتی راهحل مناسبی برای هر خطا نیست. قواعد دسترسی توصیهشده پروژه را بررسی کنید و به گروه یا کاربر لازم محدود کنید. اگر چند برد متصل است، انتخاب صریح دستگاه اهمیت دارد؛ اسکریپتی که اولین دستگاه پیدا شده را انتخاب میکند ممکن است روی مدار اشتباه عمل کند. شناسه برد و نام fixture را در خروجی آزمایش نشان دهید.
آزمایش UART با هدف شناختهشده
برای UART، نرخ baud، تعداد بیت، parity و stop bit باید با هدف سازگار باشد. داده بههمریخته لزوماً به معنی خراب بودن برد نیست؛ تنظیم نرخ یا سطح سیگنال ممکن است اشتباه باشد. در اتصال معمول، مسیر ارسال یک طرف به دریافت طرف دیگر میرود و زمین مرجع مشترک لازم است. UART منطقی را با رابط دارای سطوح الکتریکی متفاوت مانند RS-232 یکسان ندانید. وجود کانکتور مشابه، سازگاری الکتریکی را تضمین نمیکند.
یک هدف آموزشی بسازید که پیام ثابت و شمارنده ارسال کند. ابتدا فقط دریافت را بررسی کنید و سپس فرمان ساده مجاز را به هدف خود بفرستید. متن خام و زمان دریافت را نگه دارید تا از دست رفتن نویسه یا توقف دورهای دیده شود. اگر پاسخ فقط با کابل کوتاه درست است، مسئله کیفیت سیگنال را پیش از تغییر برنامه بررسی کنید. این تمرین برای ساخت کنسول توسعه firmware خودتان مفید است و نیازی به کار روی دستگاه دیگران ندارد.
I2C؛ آدرس و pull-up مهماند
I2C گذرگاهی با خط داده و کلاک مشترک است و رفتار آن به pull-up و سطح ولتاژ وابسته است. پیش از افزودن ابزار، بررسی کنید pull-up روی برد هدف وجود دارد یا خیر و به چه ولتاژی متصل است. چند مقاومت موازی ممکن است مقدار مؤثر را تغییر دهند. همچنین شیوه نمایش آدرس در دیتاشیتها میتواند موجب اشتباه شود؛ باید بدانید کتابخانه آدرس را با چه قرارداد و بدون یا با بیت خواندن و نوشتن انتظار دارد.
برای آزمون، یک حسگر شناختهشده را انتخاب و رجیستر شناسایی یا مقدار ثابتی را بخوانید. اسکن گسترده آدرسها روی هر مدار حساس الزاماً بیاثر نیست، بنابراین روی هدف واقعی رفتار قطعات را بررسی کنید. اگر پاسخ دریافت نمیشود، تغذیه، آدرس، سیمکشی و وضعیت خطها را به ترتیب چک کنید. پایین ماندن دائمی یک خط میتواند از اتصال کوتاه یا قطعهای باشد که گذرگاه را نگه داشته است؛ افزایش retry این مشکل را حل نمیکند.
SPI؛ همزمانی و انتخاب هدف
در SPI، تنظیم حالت کلاک، ترتیب بیت و chip select اهمیت دارد. اشتباه در CPOL یا CPHA ممکن است خروجی ظاهراً تصادفی بسازد، در حالی که اتصال فیزیکی درست است. ابتدا نرخ پایین و نمونهای با پاسخ معلوم انتخاب کنید. اگر چند هدف روی گذرگاه هستند، مطمئن شوید فقط هدف مورد نظر انتخاب شده و بقیه خروجی را رها میکنند. تداخل دو خروجی داده میتواند هم نتیجه را خراب کند و هم به مدار فشار وارد کند.
برای خواندن حافظه یا رجیستر قطعه خود، فرمان را از دیتاشیت استخراج و طول پاسخ را مشخص کنید. عملیات خواندن و نوشتن را در اسکریپت جدا نگه دارید تا یک آزمایش مشاهدهای ناخواسته داده را تغییر ندهد. پیش از نوشتن روی حافظه غیرموقت، نسخه پشتیبان و روش بازیابی داشته باشید. حتی در آزمایشگاه مجاز، یک فرمان اشتباه میتواند تنظیم راهاندازی هدف را عوض کند و روند توسعه را متوقف سازد.
مشاهده منطق با تولید سیگنال فرق دارد
وقتی GreatFET را برای logic analysis به کار میبرید، هدف ثبت سطح دیجیتال و زمانبندی است. نرخ نمونهبرداری و عمق ثبت باید با سرعت سیگنال سازگار باشند. نمونهبرداری ناکافی میتواند پالس را نبیند یا ترتیب لبهها را مبهم کند. همچنین ثبت دیجیتال دامنه آنالوگ، overshoot یا کیفیت دقیق لبه را نشان نمیدهد. برای مسائل مربوط به شکل موج و سطح ولتاژ ممکن است اسیلوسکوپ ابزار مناسبتری باشد.
یک الگوی معلوم با شمارنده یا پالس دورهای روی مدار آموزشی تولید کنید و نتیجه ثبت را با انتظار مقایسه کنید. این آزمون محدودیت ابزار و تنظیم را نشان میدهد. سپس روی گذرگاه واقعی هدف خود ثبت بگیرید و رخداد نرمافزاری را با لحظه سیگنال مرتبط کنید. اگر فقط خروجی decoder را نگه دارید، امکان بازبینی بعدی محدود میشود؛ داده خام و تنظیمات decode را نیز ذخیره کنید تا فرضهای تحلیل قابل بررسی باشند.
گسترش با Neighbor و طراحی fixture
بردهای توسعه Neighbor میتوانند قابلیتهای ویژه اضافه کنند، اما سازگاری مکانیکی و الکتریکی آنها باید بررسی شود. محل پایهها و نیاز توان را پیش از نصب مشخص کنید. در fixture آزمایش تولید یا توسعه، کابلها را برچسب بزنید و برای جلوگیری از اتصال وارونه راهکار مکانیکی داشته باشید. یک ابزار منعطف وقتی چند نفر از آن استفاده میکنند به مستندات دقیق نیاز دارد؛ دانستن ترتیب سیمها فقط توسط سازنده، ریسک خطای انسانی ایجاد میکند.
اسکریپت آزمایش باید وضعیت اولیه مدار را معلوم کند، نتیجه را با معیار مشخص بسنجد و در پایان خروجیها را به حالت ایمن برگرداند. در صورت خطا نیز cleanup لازم است؛ قطع اجرای اسکریپت نباید پایه کنترل را در وضعیت نامطلوب نگه دارد. برای آزمونهای تکراری، نسخه اسکریپت، firmware و شماره سختافزار هدف را در گزارش ثبت کنید. این اطلاعات کمک میکند تغییر نتیجه به تغییر مدار یا ابزار نسبت داده شود.
USB و محدودیت ادعای چندمنظوره بودن
قابلیتهای USB و برنامهپذیری GreatFET برای ساخت نمونه رابط و آزمایش میزبان خود مفیدند، ولی هر کاربرد نیاز به firmware و پشتیبانی مناسب دارد. از عبارت «قابل برنامهریزی» نباید نتیجه گرفت ابزار بدون توسعه اضافی جای هر analyzer تخصصی را میگیرد. نرخ، زمانبندی، buffer و قابلیت decode باید با وظیفه مقایسه شوند. برای خرید یا طراحی آزمایش، یک سناریوی واقعی را با زنجیره نرمافزاری مورد نیاز بررسی کنید و قابلیت اثباتنشده را فرض نگیرید.
در پایان کار، گزارش باید شامل پرسش آزمایش، نقشه سیمکشی، شرایط تغذیه، نسخه ابزار و داده خام باشد. اگر نتیجه غیرعادی است، آن را ابتدا روی هدف معلوم تکرار کنید تا خطای ابزار از خطای مدار جدا شود. GreatFET زمانی بیشترین ارزش را دارد که به بخشی از روش اندازهگیری دقیق تبدیل شود؛ انعطاف آن فرصت ساخت ابزار مناسب را میدهد، اما جای شناخت پروتکل و محدودیت الکتریکی را نمیگیرد.
برای حمل ابزار، پوشش و حفاظت در برابر تخلیه الکتریسیته ساکن را در نظر بگیرید. پایههای باز و سیمهای آزاد در کیف میتوانند آسیب مکانیکی ببینند. پیش از هر جلسه، اتصالها را دوباره بازبینی کنید؛ درست بودن آزمایش قبلی تضمین نمیکند کابل امروز در همان جای قبلی است. یک عکس واضح از سیمکشی و برچسب ولتاژ هدف، انتقال آزمایش به همکار را سادهتر میکند و احتمال اشتباه تکراری را کاهش میدهد.