تصحيح أخطاء USB Remote Wakeup و Suspend Resume

كيفية تصحيح أخطاء remote wakeup USB، وحالات فشل تعليق/استئناف، وانفصالات التعليق الانتقائي، وأحداث الاستيقاظ المفقودة، وأخطاء إدارة الطاقة، وإشارات الاستئناف بالتقاطات USB.

USB remote wakeup, USB suspend resume, التعليق الانتقائي, إدارة الطاقة, حدث استيقاظ مفقود, تشخيص USB, محلل الناقل

أخطاء إدارة الطاقة في USB صعبة التشخيص لأن الجهاز قد يعمل بشكل مثالي بينما النظام نشط ويفشل فقط بعد الخمول، أو النوم، أو التعليق الانتقائي، أو نوم القاعدة، أو إغلاق غطاء laptop، أو إيقاف تشغيل الشاشة. يبحث المستخدمون عن "USB remote wakeup not working"، و"USB selective suspend disconnect"، و"USB device does not wake computer"، و"USB resume failure"، و"USB suspend resume bug"، و"HID keyboard wake from sleep not working".

يكون Bus Scope مفيدًا لأن التعليق والاستئناف أحداث على مستوى الناقل، وليس فقط أخطاء تطبيق. تحتاج إلى معرفة ما إذا كان المضيف قد علق الجهاز، وما إذا كان remote wakeup ممكّنًا، وما إذا كان الجهاز قد أشار إلى الاستئناف، وما إذا كان المضيف قد استأنف الحركة، وما إذا كان الجهاز قد أعد تعداده بدلاً من الاستئناف.

ما يعنيه Remote Wakeup

يسمح remote wakeup لجهاز USB معلق بطلب أن يستأنف المضيف الاتصال. تشمل الأمثلة الشائعة:

  • لوحة المفاتيح تستيقظ سطح المكتب النائم.
  • الفأرة تستيقظ laptop من الخمول.
  • زر قاعدة يستيقظ محطة العمل.
  • ماسح ضوئي يستيقظ kiosk.
  • متحكم صناعي يستيقظ panel PC.
  • مستشعر HID يستيقظ المضيف بعد حدث خارجي.

Remote wakeup ليس مجرد "الجهاز لديه طاقة". يجب أن يسمح المضيف به، ويجب أن يعلن الجهاز دعمه، ويجب تمكين الميزة، ويجب أن تحدث إشارة الاستئناف في الوقت المناسب.

الأعراض الشائعة

تبدو مشكلات remote wakeup و suspend كـ:

  • يعمل الجهاز حتى ينام PC.
  • الجهاز لا يستيقظ الكمبيوتر.
  • الجهاز يستيقظ النظام فورًا بعد التعليق.
  • يختفي الجهاز بعد الاستئناف.
  • يعيد الجهاز التعداد بعنوان جديد.
  • يُفقد إدخال HID بعد الخمول.
  • يتوقف الجهاز التسلسلي عن الإرسال بعد التعليق الانتقائي.
  • يعود الجهاز الصوتي أو الكاميرا من النوم بدون بيانات.
  • تستعيد البرامج الثابتة فقط بعد فصل/إعادة توصيل.

غالبًا ما يُلقى اللوم على برامج التشغيل لهذه الأعراض، لكن الالتقاط قد يُظهر مشكلة حالة طاقة البرامج الثابتة.

أدلة الواصفات والميزات

يمكن لواصف التهيئة الإعلان عن قدرة remote wakeup. يمكن للمضيف بعد ذلك تمكين أو تعطيل ميزة remote wakeup. يجب أن يجيب تتبع تشخيص USB المفيد:

  • هل يعلن الجهاز remote wakeup؟
  • هل أرسل المضيف SET_FEATURE(DEVICE_REMOTE_WAKEUP)؟
  • هل مسح المضيف الميزة لاحقًا؟
  • هل حدث التعليق بعد الخمول؟
  • هل حاول الجهاز إشارة استئناف؟
  • هل استأنف المضيف عمليات النقل العادية؟

بدون هذه الحقائق، التشخيص تخمين.

التعليق الانتقائي

يسمح التعليق الانتقائي لنظام التشغيل بتعليق جهاز USB خامل دون وضع النظام بأكمله في النوم. هذا يوفر الطاقة، لكنه يكشف أخطاء البرامج الثابتة.

أنماط الفشل:

  • يدخل الجهاز حالة الطاقة المنخفضة لكن لا يستعيد حالة نقطة النهاية.
  • تفقد البرامج الثابتة حالة IN للمقاطعة المعلقة.
  • يوقف الجهاز NAK إلى الأبد بعد الاستئناف.
  • يعيد المضيف تعيين الجهاز بعد المهلة.
  • يرى التطبيق مهلة أو إزالة الجهاز.
  • يستأنف الجهاز المركب واجهة واحدة لكن ليس أخرى.

غالبًا ما يكتب الباحثون "USB selective suspend random disconnect" لأن الجهاز يبدو أنه ينفصل على الرغم من أن الحدث الحقيقي هو فشل تعليق/استئناف.

الاستئناف مقابل إعادة التعداد

بعد النوم، هناك نتيجتان مختلفتان تمامًا:

  • الاستئناف: يستمر نفس الجهاز بالتهيئة الموجودة.
  • إعادة التعداد: يعيد المضيف تعيين الجهاز وتعداده مرة أخرى.

قد تكون إعادة التعداد مقبولة بعد الفصل الفعلي، لكنها مشبوهة بعد التعليق العادي. يمكن أن تكسر التطبيقات التي تحتفظ بمقابض مفتوحة، أو أسماء منافذ تسلسلية، أو مسارات HID، أو جلسات التقاط الكاميرا.

يجب أن يساعد Bus Scope في تحديد ما إذا كان التتبع يحتوي على حركة استئناف عادية أو تسلسل تعداد جديد مع GET_DESCRIPTOR وSET_ADDRESS وSET_CONFIGURATION.

أحداث الاستيقاظ المفقودة

أحيانًا يرى الجهاز الحدث الخارجي لكن المضيف لا يستيقظ. تشمل الأسباب:

  • لم يُعلن remote wakeup.
  • لم يُمكّن المضيف remote wakeup.
  • يرسل الجهاز استئنافًا في وقت مبكر جدًا.
  • يرسل الجهاز استئنافًا متأخرًا جدًا.
  • يحجب الموزع إشارات الاستيقاظ أو يسيء التعامل معها.
  • BIOS أو سياسة استيقاظ نظام التشغيل يعطل المنفذ.
  • تدخل البرامج الثابتة للجهاز في نوم أعمق من المتوقع.
  • يحدث الحدث قبل اكتمال التعليق.

لا يحل الدليل على مستوى الحزمة محل سياسة طاقة نظام التشغيل، لكنه يضيق السؤال. هل كان لدى الجهاز إذن لاستيقاظ المضيف، وهل حاول فعل ذلك؟

الاستيقاظ الفوري بعد التعليق

المشكلة المعاكسة شائعة أيضًا: يعلّق النظام ثم يستيقظ فورًا مرة أخرى. يمكن لأجهزة USB أن تسبب هذا عندما تشير إلى الاستيقاظ بسبب إدخال قديم، أو حالة مقاطعة صاخبة، أو أخطاء debounce، أو برامج ثابتة تعامل التعليق كحدث جديد.

الأدلة التي يجب جمعها:

  • آخر تقرير مقاطعة قبل التعليق.
  • ما إذا كان المضيف قد مكن الاستيقاظ.
  • التوقيت بين التعليق والاستئناف.
  • فئة الجهاز والواجهة.
  • ما إذا كانت نفس نقطة النهاية لديها بيانات معلقة.
  • ما إذا كان الحدث يتكرر في كل محاولة تعليق.

هذا شائع بشكل خاص مع لوحات المفاتيح والفئران ولوحات اللمس وأذرع التحكم وأجهزة HID المخصصة.

قائمة مراجعة التصحيح

استخدم هذه العملية:

  1. التقط التعداد من التوصيل.
  2. تأكد من قدرة remote wakeup في الواصفات.
  3. تحقق مما إذا كان المضيف مكن remote wakeup.
  4. سجّل فترة الخمول قبل التعليق.
  5. حدد توقيت التعليق.
  6. ابحث عن إشارة استئناف أو حركة استئناف المضيف.
  7. افصل الاستئناف عن إعادة التعداد الكاملة.
  8. تحقق من سلوك نقطة النهاية بعد الاستئناف.
  9. قارن نفس الجهاز على منفذ مباشر وعبر موزع.
  10. حافظ على حزم ما قبل التعليق وما بعد الاستئناف.

التشخيص النهائي

أخطاء remote wakeup و suspend/resume في USB هي مشكلات بروتوكول حالة الطاقة. الدليل المفيد هو قدرة الواصف، واختيار ميزة المضيف، وتوقيت التعليق، وإشارة الاستئناف، واستعادة نقطة النهاية، وما إذا كان المضيف قد استأنف أو أعد تعداد الجهاز.

يساعد Bus Scope في جعل هذا الدليل مرئيًا بحيث يصبح "USB wake not working" تشخيصًا ملموسًا بدلاً من حلقة لوم على برنامج التشغيل.