عدم تطابق حجم الحزمة الأقصى لنقطة نهاية USB

كيفية تصحيح أخطاء عدم تطابق حجم الحزمة الأقصى لنقطة نهاية USB، وأخطاء واصف wMaxPacketSize، والحزم القصيرة، وتوقف نقل bulk، واختلافات السرعة العالية مقابل الكاملة، وأخطاء مخزن البرامج الثابتة المؤقت.

حجم الحزمة الأقصى لنقطة نهاية USB, wmaxpacketsize, حزمة قصيرة, نقل bulk, عدم تطابق الواصف, خطأ برامج ثابتة, تشخيص USB

يبدو wMaxPacketSize لنقطة نهاية USB كحقل واصف صغير، لكن القيمة الخاطئة يمكن أن تكسر عمليات نقل bulk وتقارير المقاطعة وتشغيل السرعة العالية وتخزين البرامج الثابتة المؤقت وافتراضات برنامج تشغيل المضيف. يبحث المستخدمون عن "عدم تطابق wMaxPacketSize USB"، و"مشكلة الحزمة القصيرة في USB"، و"نقل bulk يتوقف عند 64 بايت"، و"حجم حزمة نقطة نهاية USB السرعة العالية السرعة الكاملة"، و"خطأ حجم الحزمة الأقصى لواصف USB" عندما تفشل عمليات النقل فقط عند أحجام أو سرعات معينة.

يكون Bus Scope مفيدًا لأن الفشل مرئي فقط عند مقارنة الواصفات وحزم النقل معًا. قد يدعي الواصف حجم حزمة واحد بينما تتصرف البرامج الثابتة أو كود المضيف أو أجهزة نقطة النهاية كحجم آخر.

ما يتحكم فيه wMaxPacketSize

يتضمن كل واصف نقطة نهاية wMaxPacketSize. يخبر المضيف بحجم حمولة الحزمة الأقصى لنقطة النهاية تلك. تعتمد القيم النموذجية على السرعة ونوع نقطة النهاية.

أمثلة:

  • نقطة نهاية bulk كاملة السرعة غالبًا تستخدم 64 بايتًا.
  • نقطة نهاية bulk عالية السرعة غالبًا تستخدم 512 بايتًا.
  • تختلف نقاط نهاية interrupt حسب السرعة والفاصل الزمني.
  • تستخدم نقاط نهاية isochronous أحجام حزم خاصة بعرض النطاق الترددي.

إذا كانت البرامج الثابتة تكوّن مخازن نقطة نهاية لـ 64 بايتًا لكنها تعلن 512 بايتًا، فقد يرسل المضيف عمليات نقل لا يمكن للجهاز التعامل معها بشكل صحيح.

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

يمكن أن تظهر أخطاء حجم الحزمة الأقصى لنقطة النهاية كـ:

  • ينجح نقل bulk للرسائل الصغيرة لكنه يفشل للرسائل الكبيرة.
  • يعمل الجهاز بسرعة كاملة لكنه يفشل عند السرعة العالية.
  • يتوقف النقل بعد 64 بايتًا بالضبط.
  • ينتظر المضيف إلى الأبد حزمة قصيرة.
  • تتلقى البرامج الثابتة بيانات مقسمة بشكل غير متوقع.
  • يوقف الجهاز عمليات نقل OUT.
  • تُرجع عمليات نقل IN بيانات مقتطعة.
  • يُبلغ برنامج التشغيل عن مهلة على الرغم من وجود الحركة.
  • يعمل الجهاز المركب على واجهة واحدة لكن ليس أخرى.

عدد البايتات الدقيق هو غالبًا القرينة.

سلوك الحزمة القصيرة

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

على سبيل المثال:

max packet size: 64
payload length: 128
packets: 64 + 64
end condition: ambiguous unless length is known or ZLP is sent

هذا هو السبب في أن "حزمة قصيرة USB" و"حزمة ذات طول صفري USB" مصطلحات بحث قوية. قد يجتاز الجهاز اختبارات بسيطة ثم يتعطل عندما يقع طول الحمولة بالضبط على حدود الحزمة.

عدم تطابق السرعة العالية مقابل السرعة الكاملة

تتصرف بعض الأجهزة بشكل صحيح عند السرعة الكاملة لكنها تفشل عند السرعة العالية. تشمل الأسباب:

  • واصف السرعة العالية يعلن 512 بايتًا.
  • يظل مخزن البرامج الثابتة المؤقت 64 بايتًا.
  • يتغير محاذاة DMA عند السرعة العالية.
  • نقطة نهاية FIFO صغيرة جدًا.
  • يفترض برنامج تشغيل المضيف تجزئة عالية السرعة.
  • يختلف واصف الجهاز بين أوضاع السرعة.

يجب أن يساعد Bus Scope في مقارنة سرعة التعداد وقيم واصف نقطة النهاية وتجزئة النقل الفعلية.

أخطاء نسخ الواصفات ولصقها

غالبًا ما تنسخ فرق البرامج الثابتة واصفات نقطة النهاية عبر الواجهات أو الأوضاع. يمكن أن يخلق ذلك أخطاء خفية:

  • نقطة نهاية interrupt تعلن حجمًا شبيهًا بـ bulk.
  • يختلف حجم نقطة نهاية OUT عن IN بشكل غير متوقع.
  • الإعداد البديل له حجم مختلف لكن البرامج الثابتة لا تعيد تكوين نقطة النهاية.
  • تختلف أشجار واصفات السرعة الكاملة والعالية.
  • لا تتطابق الواصفات المصاحبة مع الإنتاجية المتوقعة.

يربط عرض التشخيص الصحيح عنوان نقطة النهاية بواصفه وكل نقل على تلك النقطة.

أخطاء مخزن البرامج الثابتة المؤقت

حتى عندما يكون الواصف صحيحًا، قد تعالج البرامج الثابتة البيانات بشكل غير صحيح:

  • تفترض أن حزمة USB واحدة تساوي رسالة تطبيق واحدة.
  • لا تتعامل مع الرسائل المقسمة.
  • تُسقط الحزم ذات الطول الصفري.
  • تعامل الحزمة القصيرة كخطأ.
  • تستبدل مخزن الاستقبال المؤقت بعد الحزمة الأولى.
  • تفشل عندما يساوي طول النقل حجم الحزمة الأقصى.
  • لا تفرغ نقطة نهاية IN بعد الحزمة القصيرة الأخيرة.

هذه الأخطاء شائعة في الأجهزة الخاصة بالبائع وbootloaders لأن البروتوكول عادة ما يكون مخصصًا.

افتراضات برنامج تشغيل المضيف

يمكن أن يكون كود المضيف خاطئًا أيضًا. قد:

  • يطلب مخزنًا صغيرًا جدًا.
  • يتوقع أن مكالمة قراءة واحدة تساوي رسالة جهاز واحدة.
  • يتجاهل إنهاء الحزمة القصيرة.
  • يستخدم مهلة بدلاً من تأطير طول البروتوكول.
  • يرسل أمرًا أكبر من مخزن البرامج الثابتة المؤقت.
  • ينسى سلوك الحزمة ذات الطول الصفري.

عندما يكون كلا الجانبين مخصصًا، يصبح تتبع الحزم هو العقد.

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

لتشخيص حجم الحزمة الأقصى، اجمع:

  • سرعة الجهاز.
  • واصف نقطة النهاية.
  • عنوان نقطة النهاية والاتجاه.
  • wMaxPacketSize.
  • حجم النقل المطلوب من قبل المضيف.
  • أحجام الحزم المرصودة فعليًا.
  • وجود حزمة قصيرة أو حزمة ذات طول صفري.
  • توقف، NAK، مهلة، أو إعادة ضبط بعد النقل.
  • الفرق بين تعداد السرعة الكاملة والعالية.
  • سجلات البرامج الثابتة إذا كانت متاحة.

تتضمن أفضل التقارير أعداد البايتات الدقيقة. تتطابق محركات البحث أيضًا مع هذه التفاصيل العملية جيدًا.

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

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

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

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

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

يساعد Bus Scope المهندسين في إثبات ما إذا كان الخطأ في الواصف، أو معالجة مخزن البرامج الثابتة المؤقت، أو افتراضات برنامج تشغيل المضيف، أو تأطير النقل.