مراجعة عمليّة: لمحة عن محلل الإشارات المنطقية Saleae USB Logic Analyzer (24MHz 8CH Clone)
منذ أكثر من عام كانت لدي رغبة في تجربة محلل إشارة منطقي Logic Analyzer يكون متوافر لدي عند الحاجة له كون كثير من الأحيان نحتاج إليه وخاصة عند استخدام بروتوكولات أكثر تعقيداً ودقة من بروتوكول UART مثل بروتوكول I2C حيث من المفيد معرفة أن عملية الإرسال صحيحة وهذا يساعد في تنقيح الأخطاء أثناء تطوير برمجية المتحكم. وبالفعل كنت قد طلبت محلل منطقي عبر موقع Aliexpress بسعر حوالي 6 دولار وبالواقع هو نسخة مقلّدة من محلل إشارة اسمه Saleae USB Logic Analyzer ويبلغ سعر أرخص نسخة أصلية منه 100 دولار وهذا طبيعي فهذه كلفة جهد تطوير مثل هذه الأداة. على الرغم أني أعلم أن شراء نسخ مقلّدة يضر الشركات التي تعتاش على بيعها ولكن ليس باليد حيلة (أعتذر منكم فريق Saleae).
لقد حان وقت فحص ما وصلني من علي إكسبريس وأود مشاركتكم هذه المراجعة العمليّة.
الإلكترونيات Hardware
حصلت على غلاف يحوي على محلل الإشارة المنطقية ذاته ويحوي أيضاً وصلة USB وعدد 10 من أسلاك التوصيل Jumper Wires.
تبدو الدارة المطبوعة من داخل العلبة البلاستيكية كالتالي:
إن الدارة المطبوعة بسيطة وتحتوي:
- CY7C68013A وهو متحكم صغري بنواة 8051 وأيضاً واجهة تخاطب USB.
- AT24C01B ذاكرة EEPROM تسلسليّة بحجم 128 بايت من شركة ATMEL.
- 74HC245 دارة transceiver ثمانية خطوط النقل.
AT24C01B, CY7C68013A , 74HC245 من اليمين إلى اليسار
أجد من الممتع محاولة فهم مايجري خلف الستار بين البرنامج والدارة حيث وجدت أولاً أن المتحكم CYC68013A لا يحوي ذاكرة Flash ذات محتوى غير قابل للتلاشي وهذه الذاكرة عادة ما تحوي الكود الذي يُنفذ على المتحكم وعوضاً عن ذلك يتم تحميل الكود إلى ذاكرة الرام RAM عبر الـUSB أو من ذاكرة EEPROM موصولة بالمتحكم وطالما أن الذاكرة EEPROM المستخدمة هنا صغيرة ذات 128 بايت كنت متأكد أن البرنامج يتم تحميله عبر الـUSB. لذلك إن أول معلومة مفيدة ومثيرة هي أن الدارة لا تحوي برنامج مسبق عليها فعلياً. المعلومة الثانية أن الذاكرة EEPROM تحوي معلومات تتعلق بالجهاز ومعرّفاته عند الوصل مع الحاسب مثل (VID, PID .. إلخ) وهي معلومات مهمّة لكي تبدو الأداة “المزوّرة” وكأنها أصليّة بالنسبة للأداة البرمجية (أتكلم عن الأداة البرمجية التي تأتي من شركة Saleae). في ما يلي مثال عن خرج تنفيذ التعليمة lsusb -v في جهاز عليه نظام تشغيل لينكس مع وصل المحلل المنطقي.
Bus 001 Device 032: ID 0925:3881 Lakeview Research Saleae Logic Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 255 Vendor Specific Subclass bDeviceProtocol 255 Vendor Specific Protocol bMaxPacketSize0 64 idVendor 0x0925 Lakeview Research idProduct 0x3881 Saleae Logic
المعلومة الثالثة هي أن استخدام الـtransceiver هو لحماية مداخل المتحكم من الجهود العالية حيث أن مداخل الـtransceiver مزودة بديودات القص Clamping Diodes.
قد تجد أشكال أخرى من النسخ المزوّرة كما في هذه المقالة. للمهتمين: في ذات المقالة يشير الكاتب لطريقة لتغيير محتوى الذاكرة EEPROM دون فك تلحيم الذاكرة EEPROM.
وفي نهاية هذه الفقرة أود أن أقول أنه لو كنت أعلم الحقيقة الأولى قبل أن أشتري هذه الأداة المزوّرة ربما كنت سأفضل شراء دارة عامّة أكثر وتجربة محلل الإشارة عليها مثل هذه الدارة!
تجريب الدارة
فقط من أجل غرض التجربة، سوف أقوم بالتسمّع sniffing على خطوط الإرسال والاستقبال لدارة ESP8266 خلال رفع البرنامج باستخدام محمّل الإقلاع Bootloader الذي يعمل على بروتوكول الـUART.
على الرغم أنه من ناحية المبدأ يمكن إجراء التسمّع باستخدام الحاسب (بالتسمع على منفذ الـUSB) ولكن ليس هذا ما أبحث عنه.
البرمجيّة Software
sigrok Tool
منذ فترة جيّدة وأنا أسمع عن sigrok الأداة البرمجية مفتوحة المصدر عامة الاستخدام للمحللات المنطقيّة والتي تدعم الكثير من أنواع المحلّلات.
هذه الأداة تدعم نظم التشغيل الأربعة (ويندوز ولينكس وماك وأندرويد)؛ يمكنك تحميل ما يناسبك. ويتألف الـsigrok من عدة أدوات وأهمها( بالنسبة للمستخدم العادي):
- sigrok-cli وهو برنامج سطر الأوامر البرمجية.
- PulseView وهو الواجهة البرمجيّة للمستخدم.
بعد تنزيل الأدوات وقبل تشغيلهم يجب أن تؤمن البرنامج firmware الذي سيتم تحميله على ذاكرة الـRAM للمتحكم كما ذكرت في الفقرة السابقة. كون البرمجية غير مجانية وتتبع لرخص مختلفة فإنه لا يتم توزيعه مع الأداة البرمجيّة sigrok، لذلك يجب إضافته يدوياَ بعد تنصيب البرنامج. في حالتنا، يجب عليك أولاً تنزيل الأداة البرمجيّة الرسميّة من موقع Saleae ويجب تنزيل مجموعة من الملفات من موقع sigrok، والآن قم بنقل السكربتات إلى ملف برمجيّة Logic وقم بتشغيل السكربت (بايثون) sigrok-fwextract-saleae-logic16 بالشكل التالي:
sigrok-fwextract-saleae-logic16 Logic
هذا السكربت سيستخلص من البرنامج الرسمي الـfirmware الذي سيتم شحنه إلى الأداة من البرنامج وهذا مثال على تنفيذ السكربت:
$ sigrok-fwextract-saleae-logic16 Logic saved 5214 bytes to saleae-logic16-fx2.fw saved 149516 bytes to saleae-logic16-fpga-18.bitstream saved 149516 bytes to saleae-logic16-fpga-33.bitstream
والآن قم بنقل الملفات المستخلصة إلى مجلد sigrok-firmware (تجده في حالتي في جهاز اللينكس في المسار /usr/share/sigrok-firmware).
الآن يمكنك تشغيل الواجهة الرسوميّة PulseView والاتصال بالمحلّل.
وإذا كنت فضولياً مثلي يمكنك تفعيل رسائل التنقيح debug من البرنامج عبر الأمر pulseview -l 5 لتشاهد بعض المخرجات المفيدة وهذه أحدها:
sr: fx2lafw: fx2lafw: Closing device 0 on 1.26 interface 0. sr: ezusb: uploading firmware to device on 1.33 sr: ezusb: setting CPU reset mode on... sr: ezusb: Uploading firmware at /usr/share/sigrok-firmware/fx2lafw-saleae-logic.fw sr: ezusb: Uploaded 4096 bytes sr: ezusb: Uploaded 4024 bytes sr: ezusb: Firmware upload done
إن استخدام PulseView سهل ومباشر؛ عليك أولاً ضبط تردد أخذ العينات sampling rate وحجم العينات. يظهر في البرنامج 8 أقنية ويمكنك تغير اسماءهم من قيمة رقميَة لأي اسم معبر وذلك بالنقر على الرقم.
نأتي لأهم ميزة في أي برنامج محلل منطقي وهو “مفكّك البروتوكول” protocol decoder. يمكنك إضافة المفكّك من (decoders>add>UART) ويمكنك ضبط إعدادات المفكّك عبر النقر على اسمه الذي يظهر في الهامش اليساري للشاشة. كما يمكنك قياس الأزمنة بشكل دقيق وذلك عبر المؤشرات الزمنيّة من (view>Show Cursors).
ملاحظة: ارفع حجم العينات مع زيادة التردد. مثلاً: عند التردد 1 ميغا هرتز لا يعمل البرنامج بحجم عينات أقل من 1 غيغا.
Saleae Logic
هي الأداة الرسميّة من الشركة وقد استطعت استخدامها بنجاح مع النسخة المزوّرة ويوجد دليل مشروح بعناية عن كيفية استخدام البرمجية على موقع الشركة. وعلي أن أقول أن هذا البرنامج أفضل وأكثر سهولة ولديه أدوات مساعدة أكتر من sigrok.