تقسيم البت
المحتويات
تعريفًا بالموضوع، ضرب البت أو تقسيم البت هو عبارة عن تقنية في التواصل التسلسلي، تستعمل البرمجيات بدلاً عن عتاد مستقل. حيث يقوم البرنامج بتجميع و أخذ عينات عن حالة إبر التوصيل على المتحكم المصغر، ويكون مسؤولاً عن كل بارامترات الإشارة: التوقيت، المستويات، التزامن... إلخ. وتعرض الأقسام التالية جوانب أخرى من الموضوع.
كذلك، على الرغم من اعتباره hack، إلا أنه يسمح باستخدام عدة بروتوكولات مختلفة على نفس الجهاز بدون أي تعديلات على العتاد المستعمل في أغلب الأحيان.
مثال بلغة C
وفي هذا الصدد، على عكس البرمجيات، يعالج العتاد المستقل ( كالمودم، UART، أو مسجلات الإزاحة) هذه البارامترات و توفر واجهة بيانات في أنظمة أخرى، لذا فليست هناك ضرورة لتعديل الإشارة عن طرق البرمجيات. يتميز تقسيم البوت بسهولة تطبيقه بكلفة رخيصة جدا، ويتم استخدامه مثلًا في الأنظمة المضمنة.
من جهة ثانية، يوجد بعض المشاكل في استخدام bit banging، حيث تستهلك البرمجيات التي تقوم بالعملية مواد معالجة أكثر من العتاد المستقل. حيث يمضي المتحكم المصغر أغلب وقته بقراءة وإرسال العينات من و عن طريق إبر توصيله Pin، مستهلكا من وقت العمليات الأخرى. كما أنّ الإشارة المولدة عن طريقه لديها عادة jitter or glitches أكثر، خاصة إذا كان المعالج يقوم بمعالجة مهام أخرى غير التواصل. لكن في حال تم تطبيق برنامج bit-banging بأسلوب معالجة المقاطعات interrupt-driven، لا تعد هذه المشاكل ذات أهمية، خصوصاً إذا توفرت إشارات التحكم مثل RTS، CTS أو DCD.
output_low(SD_DI);
output_low(SD_CLK);
// pulse clock to indicate that bit value should be read
// consider leftmost bit
- // set line high if bit is 1, low if bit is 0
- if (data & 0x80)
- output_high(SD_DI);
- else
// transmit byte serially, MSB first
- void send_8bit_serial_data(unsigned char data)
- {
- int i;
- // select device
- output_high(SD_CS);
// send bits 7..0
For (i=0; I < 8; i++)
{
output_high(SD_CLK);
- // shift byte left so next bit will be leftmost
- data <<= 1;
- }
- // deselect device
- output_low(SD_CS);
- }
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟