مقدمة
في
مقال سابق ، تم النظر في آلية حماية المبرمج XELTEK SuperPro 6100 ضد الاستنساخ.
تصف هذه المقالة إنشاء وحدة برمجية خاصة بها لهذا المبرمج ، والتي ، من خلال تعديل معين للكود ، يمكن تكييفها للعمل مع أي أنواع أخرى من الدوائر المصغرة - غير مدعومة حاليًا ، أو كما هو الحال في حالتنا ، يتم ذكره رسميًا فقط.
الخلفية
مرة أخرى ، كانت لدينا مهمة تم حلها للوهلة الأولى بكل بساطة - كان من الضروري عمل نسخة من شريحة ذاكرة فلاش متخصصة - mDOC H3 SDED5-512M.
تم تطوير هذه الشريحة منذ أكثر من عشر سنوات. هنا هو ملف pdf
(1) مع وصفه. فيما يلي مقتطف قصير من إعلان باللغة الروسية:
... أعدت msystems عائلة mDOC للاستخدام كمحركات أقراص صلبة ...
يعمل برنامج TrueFFS المضمن ، المكلف بإدارة ذاكرة فلاش mDOC H3 ، على تشغيل وحدة التحكم الخاصة به ، مما يحولها إلى وحدة كاملة مستقلة ، يمكن إضافتها بسهولة إلى مجموعة متنوعة من الأجهزة المحمولة ...في قائمة SuperPro 6100 التي يدعمها المبرمج ، تم إدراج مثل هذه الشريحة ووجدت حتى محول DX5057 المقابل. ولكن بعد تجميع المصمم بأكمله واختيار هذه الشريحة ، أظهر البرنامج الصورة التالية مع العنصر الغامض "DimageMain" ، ولم يتم العثور على وصفه في الوثائق أو على موقع المطور.
بعد أن حاولت تنفيذ عملية "DimageMain" بدون شريحة في المحول ، تم تلقي تحذير حول غيابه ، وبعد تأكيد هذه الحقيقة ، عرض البرنامج المعلومات التالية:
إذا حكمنا من خلال النقش "mDOC H3 Write Image" ، فإن "Image" هي صورة يمكن كتابتها إلى شريحة باستخدام هذا المبرمج. ولكن كيف تقرأ هذه الصورة من دائرة صغيرة مسجلة بالفعل ، وكيفية محوها ، وما إلى ذلك؟
بعد ذلك بقليل على الإنترنت ، عثرت على ملف
(2) من شركة Dataman ، يظهر جزئيًا بنية الصورة أعلاه ويذكر البرنامج لإنشاءها.
وبالتالي ، تم بذل المزيد من الجهود للبحث عن أدوات مساعدة من M-Systems الموضحة في وثيقة Software Utilities لـ TrueFFS 7.1
(3) .
لم يسفر طلب الدعم الفني من "M-Systems" ، والذي أصبح الآن "SanDisk" ، عن نتيجة - لم يكن هناك ببساطة إجابة.
على الإنترنت ، كان من الممكن العثور فقط على المرافق القديمة التي لا تدعم إصدار رقائق H3. لم يتم العثور على حزمة SDK الكاملة من SanDisk ، فقط "شظاياها"
(5) من حيث تنفيذ برنامج تشغيل لنظام Linux.
بينما درسنا المعلومات المتراكمة ، جذب السطر التالي انتباه ملف Dataman: "يمكن إنشاء ملفات الصور باستخدام أداة SanDisk Docshell أو PG4UW."
لم تجد أدوات SanDisk Docshell نفسها بأي شكل من الأشكال ، لذلك كان عليّ معرفة كيفية عمل PG4UW
(4) مع هذه الشريحة. لم يقوموا بتضمين حزمة SanDisk SDK بالكامل في برامجهم ، ولكنهم قاموا بإنشاء مكون إضافي مع الأساليب المصدرة اللازمة لعمل أدوات TrueFFS ، والتي يتم استدعاؤها بعد ذلك من برنامجهم.
سنذهب بنفس الطريقة.
إنشاء وحدة البرامج الخاصة بك
في ما يلي بيان إخلاء المسؤولية ، أي أن المؤلف لا يتحمل أي مسؤولية عن استخدامك للمواد الواردة في هذه المقالة.
بعبارة أخرى - أنت وحدك المسؤول عن أفعالك ، والتي قد يتم تشجيعك على التعرف على هذه المواد.
نوافق ، كما في المقالة السابقة ، على استدعاء المبرمج المبرمج من SuperPro 6100 ببساطة "برمجيات" ، والكمبيوتر الذي يعمل عليه هذا البرنامج هو "مضيف". الآن لدينا برنامج آخر يعمل في المبرمج نفسه. سوف نسميها "وحدة البرامج".يصف برنامج Software Utilities for TrueFFS 7.1
(3) الوظائف التي تنفذها أدوات DOCSHELL المساعدة ، والتي تندرج في الفئات الأربع التالية:
- DFORMAT - الأدوات المساعدة لتنسيق جهاز mDOC.
- DINFO - أدوات للحصول على مجموعة متنوعة من المعلومات حول جهاز mDOC والأقسام الموجودة عليه.
- DIMAGE - أدوات مساعدة لقراءة وكتابة ومقارنة جهاز صورة mDOC.
- SPLITIMAGE - أدوات لتقسيم صورة جهاز mDOC إلى أجزاء.
كانت أدوات DOCSHELL مخصصة لسطر الأوامر ، وبالتالي ، تم تنفيذ واجهة الاتصال مع البرنامج المساعد DOCSHELL.dll باستخدام نفس آلية الأمر النصي.
قبل بدء الاتصال بـ "DOCSHELL.dll" ، من الضروري استدعاء كل من الأساليب المصدرة وتمريرها إلى الوظائف المنفذة في البرنامج للتبادل المادي مع شريحة mDOC. هذه هي الكتابة والقراءة (في العديد من التعديلات) ، بالإضافة إلى طرق استقبال الرسائل النصية حول تقدم العمليات الحالية وطرق العمل مع ملفات الصور.
إحدى طرق mainEntry المصدرة كوسيطة إدخال
يقبل سلسلة ASCIIZ - الأمر الموضح في Software Utilities for TrueFFS 7.1 manual
(3) .
يقوم المحلل اللغوي داخل "DOCSHELL.dll" بمعالجة الأمر المستلم ، واستنادًا إلى الأمر والوسيطات الخاصة به ، يستدعي طريقة أو أخرى من برنامج المبرمج الرئيسي باستخدام المؤشر المستلم أثناء التهيئة الأولية.
برنامج للمبرمج ، قررنا كتابة الخاصة بك. هذا النهج ، من ناحية ، أنقذنا من "الحفر" في الملفات الأصلية للامتثال للاتفاقيات المتعلقة بتبادل المعلومات بين المضيف والمبرمج ، ومن ناحية أخرى ، سهّل إلى حد كبير عملية التصحيح ، والتي ، إذا تم دمج الوحدة النمطية في البرنامج الأصلي ، جعلها مستحيلة في بعض الجوانب أو صعب للغاية.
تمت كتابة واجهة المستخدم الأصلية للمبرمج في C # في Visual Studio 2017. يتم تضمين المصادر
(6) .
بالطبع ، كان الوظيفية في المقام الأول ، لذلك لم يكن هناك أي شك في أي لقطة للمظهر ، بالإضافة إلى نص شفرة المصدر نفسها. لذلك ، فإن "التصميم" البسيط للبرنامج كما يلي.
في الجزء العلوي من النافذة الرئيسية (والوحيد) توجد قائمة بالأزرار التي يمكنك تعيين وظائف عشوائية لها. سيتم وصف عنصر القائمة "XILINX" لاحقًا.
فيما يلي نافذتان. يعرض الجزء العلوي الرسائل المرسلة من البرنامج إلى المكون الإضافي "DOCSHELL.dll" والمستلمة منه.
في النافذة السفلية ، يمكنك كتابة الأوامر التي تحتاجها والنقر نقرًا مزدوجًا عليها في السطر المقابل.
عندما يبدأ البرنامج ، سيتم عرض بعض الأوامر فيه.
إذا بدأت العمل فجأة مع شريحة حقيقية - كن حذرا ، لأن لا تحذيرات من أنك قد تفقد جميع البيانات عند التنسيق ، إلخ. لم يتم تنفيذ البرنامج.تم العثور على ملف "DOCSHELL.dll" في الدليل مع برنامج PG4UW
(4) المثبت من "Dataman" (يمكن ذلك من "Elnec").
لتتمكن من استخدام ملف DLL تابع لجهة خارجية في برنامجك ، تحتاج إلى ملف رأس يحتوي على وصف للأساليب المصدرة ووسائطها. بسبب غيابه ، كان عليّ استعادة هذه المعلومات بنفسي. إن طرق هذا الاسترداد خارج نطاق هذه المقالة ، لذلك يمكن العثور على الحجج الخاصة بالطرق المصدرة في المصادر المرفقة.
مع واجهة المستخدم من حيث تفاعلها مع المكون الإضافي ، يتم توضيح الأمر إلى حد ما. يمكنك الآن متابعة تنفيذ التواصل مع الدائرة المصغرة على المستوى المادي حتى تتمكن من تنفيذ أوامر القراءة / الكتابة من / إلى mDOC المستلمة من المكون الإضافي.
تمت كتابة وحدة البرنامج للمبرمج بلغة C في IDE "IAR Embedded Workbench for ARM". تم إرفاق المصادر
(7) .
تم تنفيذ عملية التصحيح باستخدام المصحح JTAG J-Link ، المتصل بالمبرمج عبر موصل JTAG المثبت على جانب العلبة ومتصل باللوحة الأم عن طريق كابل مسطح.
تم شراء مصحح JTAG J-Link v9 على Aliexpress. تعمل برامج التشغيل المثبتة مع "IAR Embedded Workbench for ARM" بشكل رائع معها ، وحتى نجاح تحديث البرامج الثابتة الأصلية من SEGGER كان ناجحًا.من الناحية الهيكلية ، تم صنع المبرمج على شكل ثماني لوحات تقع واحدة فوق الأخرى ومتصلة معًا بواسطة الموصلات.
توجد محولات DC-DC قابلة للتعديل على اللوحة الأقل لتوليد العديد من الفولتية اللازمة للعمل مع مختلف دوائر الذاكرة الصغيرة.
وفوقها عبارة عن لوحة أم يتم فيها استخدام متحكم ATMEL AT91SAM9G20 ARM ، SDRAM ، SPI FLASH مع البرامج الثابتة ، شريحة ID AE801 مع طراز المبرمج والرقم التسلسلي ، رقاقة USB ISP1582 ، TLC7226 محول رقمي إلى تناظري لإدارة الجهد لمحولات DC-DC ، عدد من الرقائق والموصلات الخارجية الأخرى لتوصيل مصدر طاقة وكابل USB للتوصيل بالمضيف.
على اللوحة السفلية الثالثة توجد رقاقة XILINX XC2S50E ، التي تتحكم في أرجل الشريحة على المحول المتصل بالمبرمج أثناء إجراءات القراءة / الكتابة ، إلخ.
على الألواح الخمسة الأخرى يتم تحميل السجلات والتجمعات المتسلسلة المتصلة بمخرجاتها باستخدام مفاتيح الترانزستور ، والتي من خلالها يمكن تطبيق الدوائر الصغيرة على واحدة أو أخرى من الرقاقة التي شكلتها محولات الجهد DC-DC ،
بما في ذلك "الأرض". نظرًا لأن السجلات التي تتحكم في مفاتيح الترانزستور يتم تحميلها بالتسلسل ، ويمكن أن يصل عدد الأرجل التي يتم التحكم فيها في المحول إلى 144 ، يستغرق الأمر وقتًا طويلاً لتحميل جميع كتل المفاتيح. لذلك ، بمساعدة مفاتيح الترانزستور ، يتم تغذية المستويات الثابتة فقط إلى الدائرة المصغرة: الأرض ، الطاقة ، إلخ. ومع XILINX - ديناميكي: العناوين ، البيانات ، CS ، OE ، RD ، WR ، إلخ.
للمضي قدمًا ، كان من الضروري ، كحد أدنى ، أن يكون لديك وسيلة لإنشاء برنامج ثابت للدائرة الدقيقة XILINX XC2S50E ومخطط الدائرة ، إن لم يكن للمبرمج بأكمله ، ثم على الأقل جزء منه CPU - FPGA - محول - مقبس.
بالنسبة إلى IDE لـ XILINX Spartan-IIE ، كان علي استخدام الإصدار القديم من ISE 10.1 ، لأن لا تدعم كافة IDE اللاحقة طراز Spartan-II FPGA.
مع مخطط الدائرة ، كان الوضع أكثر تعقيدًا. لتحديد المركبات التي تهمنا ، كان علينا "إزالة" معالج U4 و XILINX U12 من اللوحات للوصول إلى منصات تحت حالات BGA الخاصة بهم ، لأن ليس كلهم لديهم مفتاح في الاتجاه المعاكس.
يتواصل المضيف مع المبرمج عبر USB من خلال العديد من نقاط النهاية (نقاط النهاية). يعمل المضيف دائمًا كمضيف. من خلال إحدى نقاط النهاية ، يرسل المضيف أمرًا إلى المبرمج ومن خلاله يتلقى تأكيدًا ،
من خلال آخر يتبادلون البيانات مع بعضهم البعض.
يتم تنفيذ أوامر التحليل من المضيف في وحدة البرنامج بطريقة USB_ReceiveBuf_EP1RX_Parse ().
يتم وصف حزمة الأوامر بواسطة بنية CMD_PROG وتتكون من عدة حقول. إذا كان الحقل Cmd يحتوي على 1 ، فهذا أمر للعمل مع الدائرة المصغرة وحقل ProgProcNum في هذه الحالة هو فهرس في صفيف _progProcedures من هياكل PROG_PROC ، في أحد الحقول يتم تخزين مؤشر للأمر المراد تنفيذه.
في الدليل مع البرنامج المثبت "SUPERPRO 6100N" يوجد دليل فرعي "\ lib". مع الملحق "* .bin" يخزن ملفات البرامج الثابتة XILINX لجميع أنواع الرقائق التي يدعمها المبرمج. من بينها هناك برنامجان ثابتان عالميان للتحقق من ملامسة أرجل الدائرة المصغرة مع جهات اتصال المقابس في المحول.
هذا هو "GENERAL ~ .BIN" مع سحب داخلي لجميع أرجل السحب XILINX و "GENERAL_.BIN" مع سحب داخلي لأسفل.
يتم التحقق من ملامسة أرجل الشريحة بطريقة SOCKET_CkeckInsertIC () لوحدة البرنامج على النحو التالي.
أولاً ، يتم تحميل البرامج الثابتة "GENERAL_.BIN" في XILINX وبمساعدة مساعدتها ، يتم تكوين جميع أرجل FPGA المتصلة بالمقبس للإخراج ويتم توفير "1" المنطقي لها. ثم ، بدوره ، يتم إعادة تكوين كل ساق FPGA للإدخال ، ويتم قراءة المستوى المنطقي منه ، ثم يتم إخراج "1" مرة أخرى إلى هذه المحطة.
إذا كان لساق الدائرة المصغرة اتصال كهربائي بساق المقبس المقابلة ، فيجب قراءة "1" منه (من خلال الثنائيات الواقية الداخلية للدائرة المصغرة من جميع الأرجل الأخرى). وفي غياب الاتصال ، نظرًا لحقيقة أن جميع دبابيس FPGA يتم سحبها إلى الأرض ، سيتم قراءة "0" من هذا الإدخال. بعد ذلك ، يتم إرسال مجموعة من المستويات المنطقية التي يتم قراءتها بهذه الطريقة إلى المضيف ومعالجتها هناك. بعد ذلك ، يستمر تنفيذ العملية المحددة ، أو يتم عرض رسالة حول عدم الاتصال بالأرجل المقابلة من الدائرة المصغرة في المقبس.
بعد اجتياز هذا الاختبار بنجاح ، يرسل المضيف البرنامج الثابت لـ XILINX المطابق للشريحة المثبتة في المحول إلى المبرمج.
يؤدي تجميع برنامج لـ FPGA في ISE 10.1 (التنفيذ المتسلسل لإجراءات التوليف (توليف) وتنفيذ تصميم (تنفيذ التصميم) وإنشاء ملفات البرمجة (إنشاء ملف برمجة)) إلى إنشاء ملف تكوين ثنائي "xeltek.bin" من 78756 بايت في دليل المشروع.
لهذا ، في خصائص عملية "إنشاء ملف برمجة" في نافذة "العمليات" في فئة "خيارات عامة" ، يجب تعيين خيارين: "إنشاء ملف بت" و "إنشاء ملف تكوين مكتبة".ليس من المعروف ما هي الأسباب ، لكن مبرمجي XELTEK قرروا تعديل الملفات التي تم الحصول عليها عن طريق عكس جميع البتات في كل بايت.
إذا احتجت لأي سبب من الأسباب إلى "نسخ" ملفك بهذه الطريقة ، أو "عكس" الملف من دليل "\ lib" إلى العرض العادي ، في البرنامج الموجود في قائمة "XILINX" ، يوجد لهذا الغرض العنصر "محول Bitstream" (في نهاية الاسم) الملف الناتج مسطر).
للعمل مع شريحة SDED5 على المستوى المادي ، يتم تنفيذ الطرق الأربعة التالية في وحدة البرامج:
- PROGPROC_FLWRITE_IO_WORD () - تسجيل كلمة (16 بت) على العنوان المحدد
- PROGPROC_FLREAD_IO_WORD () - اقرأ كلمة (16 بت) على العنوان المحدد
- PROGPROC_hal_blk_write_nor () - كتابة قطاع واحد أو أكثر (512 بايت لكل منهما) على العنوان المحدد
- PROGPROC_hal_blk_read_nor () - قراءة قطاع واحد أو أكثر (512 بايت لكل منهما) على العنوان المحدد
للتفاعل مع FPGA XILINX في البرامج الثابتة لدينا ، حددنا أربعة سجلات (منافذ الإدخال / الإخراج ، موصوفة في ملف common.h لمصادر ARM).
- _IC_ADDR (0x30000010)
- _IC_DATA (0x30000012)
- _IC_CTRL (0x30000014) // Out: 0 - WE ، 1 - 0E ، 2 - CE ، 3 - RSTIN ؛ في: 0 - مشغول
- _IC_ENABLE (0x30000016) // In: 7 - تصريح عمل (0 - نشط ، 1 - جميع الأرجل على المقبس في Z)
_IC_ADDR و _IC_DATA عبارة عن عناوين 16 بت ومسجلات بيانات للرقاقة القابلة للبرمجة SDED5 ؛
_IC_CTRL - سجل تحكم 8 بت يتم من خلاله ضبط إشارات WE و OE و CE و RSTIN وقراءة إشارة BUSY من SDED5.
تستخدم وحدات البرامج الأصلية عناوين من 0x30000000 إلى 0x3000000E للتواصل مع FPGAs. يتم تثبيت CPLD مع نقش XELTEK كمفكك تشفير للعناوين في المبرمج ، وبما أننا لا نعرف برامجها الثابتة ، فقد استخدمنا العناوين من 0x30000010 فقط في حالة تقليل احتمالية عواقب غير متوقعة من إظهار منطق سلوك شخص آخر عند استخدام العناوين "القياسية".
بعد تحميل برنامجها الثابت في FPGA ، تكون جميع مخرجات FPGA المتصلة بأرجل الدائرة المصغرة في المقبس في الحالة Z ولبدء العمل معها ، يجب تمكين الدقة عن طريق كتابة صفر إلى البت السابع من السجل _IC_ENABLE.
قد تبدو خوارزمية النظام بأكمله كما يلي.
- بعد بدء تشغيل البرنامج على المضيف ، يتحقق من وجود اتصال بالمبرمج عبر USB ويعرض الرسالة المقابلة في شريط الحالة أسفل النافذة الرئيسية
(يمكن توصيل المبرمج بعد بدء البرنامج). - يختار المستخدم نوع الشريحة التي ينوي العمل بها.
- في قاعدة البيانات (في أبسط الحالات ، فقط في الملف) ، تتطابق الدائرة المصغرة المحددة مع نوع المحول المطلوب ويتم إرسال طلب إلى المبرمج لنوع المحول المثبت فيه.
- يطلب المبرمج من المحول نوعه ويرسل هذه المعلومات مرة أخرى إلى المضيف ، حيث تتم مقارنة هذه المعلومات مع تلك الموجودة في قاعدة البيانات ، وإذا كانت أنواع المحول متطابقة ، يستمر العمل.
- لكل نوع من الدوائر المصغرة المحددة في البرنامج ، يجب عرض قائمة مناظرة مع الأوامر المتوفرة لتلك الدائرة المصغرة (القراءة والكتابة والتحقق من النظافة والمقارنة وما إلى ذلك).
- عند تحديد عنصر قائمة للعمل مع الدائرة المصغرة ، يتم إرسال الأمر المقابل إلى المبرمج ، وبعد ذلك يتحقق المبرمج أولاً من الاتصال الكهربائي لجهات الاتصال الخاصة بالمقابس مع أرجل الدائرة المصغرة ، ثم ، في حالة نجاحها ، ينفذ هذا الأمر.
في رموز المصدر المرفقة بالمقال ، لتبسيط المهمة ، لا يتم تنفيذ النقاط من الثانية إلى الخامسة الشاملة.الملخص
لم نواجه مهمة دمج وحدة البرامج في البرنامج الأصلي ،
لذلك ، فإن المادة الموضحة في هذه المقالة لا تدعي أنها حل كامل.
نأمل أن تكون المعلومات المقدمة هنا مفيدة لفئة معينة من القراء ، وعلى قدر استطاعتنا وتوفر وقت الفراغ ، سنحاول الإجابة على أسئلتك.
شكرا لك على اهتمامك!
الموارد
1.
ملف PDF - محرك أقراص فلاش مدمج mDOC H3 (EFD) يتميز ببرنامج TrueFFS Flash Management المضمّن2.
PDF - برمجة ذكريات فلاش mDOC H3 باستخدام مبرمجي أجهزة Dataman3.
PDF - Software_Utilities_TrueFFS_7.14.
برنامج التحكم Dataman - PG4UW5.
تنفيذ برنامج تشغيل mDOC H3 لنظام التشغيل Linux (لم يتم اختبار الأداء)6.
استضافة ملفات المصدر للمبرمجين (Visual Studio 2017).7.
ملفات المصدر لوحدة البرامج (IAR Embedded Workbench for ARM v8.30.1).8.
ملفات المصدر لـ FPGA XILINX XC2S50E (XILINX ISE 10.1).