كيفية واجهة I2C-EEPROM مع متحكم 8051

جرب أداة القضاء على المشاكل





مصطلح I2C أو اختصار IIC هو inter دارة متكاملة ويسمى كما أنا مربعة C. I2C هو ناقل كمبيوتر تسلسلي ، التي اخترعتها NXP سابقًا لأشباه الموصلات ، تم تسميتها بأشباه موصلات Philips. يستخدم ناقل I2C لربط الدوائر المتكاملة الطرفية منخفضة السرعة متحكمات ومعالجات . في عام 2006 ، لتنفيذ بروتوكول I2C لا يلزم دفع رسوم الترخيص. لكن الرسوم ضرورية للحصول على عنوان I2C التابع المعين من قبل NXP أشباه الموصلات.

أعلن بعض المنافسين مثل Texas Instruments و Siemens AG و NEC و Motorola و Intersil و STMicroelectronics عن منتجات I²C المناسبة تمامًا للسوق في منتصف التسعينيات. في عام 1995 ، تم تعريف SMBus بواسطة Intel ، وهي مجموعة فرعية من I²C تنص على أن البروتوكولات أكثر صرامة. الغرض الرئيسي من SMBus هو دعم قابلية التشغيل البيني والمتانة. لذلك ، تتضمن أنظمة I²C الحالية قواعد وسياسات من SMBus ، وأحيانًا تدعم كلاً من I2C و SMBus مع الحد الأدنى من إعادة التكوين.




حافلة I2C

حافلة I2C

واجهة I2C Bus-EEPROM مع متحكم 8051

ما هو I2C Bus

يستخدم ناقل I2c خطين مفتوحين ثنائي الاتجاه مثل SDA (خط البيانات التسلسلي) و SCl (خط الساعة التسلسلي) ويتم سحبهما باستخدام المقاومات. يسمح ناقل I2C للجهاز الرئيسي ببدء الاتصال بجهاز تابع. يتم تبادل البيانات بين هذين الجهازين. الفولتية النموذجية المستخدمة هي + 3.3 فولت أو + 5 فولت على الرغم من السماح للأنظمة ذات الفولتية الإضافية.



واجهة I2C

واجهة I2C

إيبروم

ROM قابل للبرمجة كهربائيًا (EEPROM) عبارة عن ذاكرة قراءة فقط قابلة للتعديل بواسطة المستخدم ويمكن إزالتها وإعادة برمجتها بشكل متكرر من خلال تطبيق جهد كهربائي أعلى من الجهد الكهربائي العادي. EEPROM هو نوع من الذاكرة غير المتطايرة المستخدمة في الأجهزة الإلكترونية مثل أجهزة الكمبيوتر لتخزين كميات صغيرة من البيانات التي يجب حفظها عند فصل الطاقة.

8051 سليكر بورد

تم تصميم لوحة 8051 Slicker خصيصًا لمساعدة الطلاب التقنيين في مجال الأنظمة المضمنة . تم تصميم هذه المجموعة بطريقة تجعل جميع ميزات 8051 متحكم من المحتمل أن يستخدمها الطلاب. تدعم لوحة المهاجم هذه ISP (برمجة داخل النظام) التي تتم عبر المنفذ التسلسلي. تم اقتراح هذه المجموعة و 8051 من NXP لتسهيل التقدم في تصحيح أخطاء العديد من التصميمات المحيطة بالميكروكونترولر بسرعة 8 بت.

واجهات I2C - EEPROM

يوضح الشكل التالي ربط I2C-EEPROM مع متحكم 8051. هنا ، I2C هو بروتوكول رئيسي تابع ، يتضمن البيانات مع نبض الساعة. عادةً ما يقوم الجهاز الرئيسي بتبديل خط الساعة SCL. يطلب هذا الخط توقيت البيانات الذي يتم نقله على ناقل I2C. ما لم يتم تشغيل الساعة ، لن يتم نقل أي بيانات. يتم التحكم في جميع العبيد بواسطة نفس الساعة ، SCL.


واجهات I2C - EEPROM

واجهات I2C - EEPROM

يدعم ناقل I2C الأجهزة المختلفة حيث يتم تحديد كل جهاز من خلال عنوان فريد سواء كان محرك شاشة LCD أو بطاقة ذاكرة أو متحكم دقيق أو التواصل مع لوحة المفاتيح والتي يمكن أن تعمل كـ Tx أو Rx وتعتمد على عمل الجهاز. تم تصميم وحدة التحكم للتحكم في جهاز EEPROM عبر بروتوكول I2C. هنا ، يعمل بروتوكول I2C كجهاز رئيسي وينظم EEPROM ويعمل كعبد. تعتبر عمليات R / W بارعة من خلال نقل مجموعة من إشارات التحكم التي تشتمل على العنوان و / أو ناقل البيانات. يجب مراقبة هذه الإشارات بإشارات ساعة مناسبة

واجهة I2C Bus-EEPROM مع متحكم 8051

إذا كنت تريد القراءة ، فاكتب ومسح EEPROM باستخدام ناقل I2C في لوحة المهاجم 8051. واجهات I2 Bus-EEPROM مع 8051 متحكم بسيط للغاية . عملية هذه الوصلة هي إرسال إشارة مثل WRITE ، متبوعة بالبيانات وناقل العنوان. في هذه العملية ، يتم استخدام ذاكرة EEPROM لتخزين البيانات. في مجموعة 8051 ، يتم تنظيم رقمين من خطوط EEPROM بواسطة برامج تشغيل مدعومة من I2C. يتم توصيل SCL و SDA بجهاز EEPROM IC التسلسلي المستند إلى I2C.

واجهة I2C Bus-EEPROM مع متحكم 8051

واجهة I2C Bus-EEPROM مع متحكم 8051

باستخدام خطوط SDA و SCL I2C ، تتم عمليات القراءة والكتابة لـ EEPROM في 8051 Slicker Kit

تعد واجهة I2C بسيطة للغاية وفي كل بيانات قراءة / كتابة في EEPROM. يعتمد التأخير على كيفية قيام المترجم بتحسين الحلقات بمجرد إجراء تغييرات في الاختيارات ، يختلف التأخير.

كود المصدر ل I2C Interfacing

#يشمل
#يشمل
#يشمل

# تعريف ACK 1
#define NO_ACK 0

حرف غير موقعة أنا
حرف EData بدون توقيع [5]
بيانات char غير الموقعة
InitSerial باطل (باطل)
DelayMs باطلة (int غير موقعة)
WriteI2C باطل (حرف غير موقعة)
بداية باطلة (باطلة)
توقف باطل (باطل)
ReadBYTE باطل (int غير موقعة)
WriteBYTE باطل (int غير موقع)
ReadI2C char غير الموقعة (بت)

sbit SCL = P2 ^ 0 // الاتصال بدبوس SCL (الساعة)
sbit SDA = P2 ^ 1 // الاتصال بدبوس SDA (البيانات)

// ——————————————
// البرنامج الرئيسي
// ——————————————
باطل رئيسي (باطل)
{
InitSerial () // تهيئة المنفذ التسلسلي
putchar (0x0C) // مسح المحطة الطرفية المفرطة
ديلاي ام اس (5)
WriteBYTE (0x0000)
WriteI2C ('A') // اكتب البيانات هنا
اكتبI2C ('B')
اكتبI2C ('C')
اكتبI2C ('D')
اكتبI2C ('E')
اكتبI2C ('F')
قف()
ديلاي ام اس (10)

ReadBYTE (0x0000)
EData [0] = ReadI2C (NO_ACK)
EData [1] = ReadI2C (NO_ACK)
EData [2] = ReadI2C (NO_ACK)
EData [3] = ReadI2C (NO_ACK)
EData [4] = ReadI2C (NO_ACK)
EData [5] = ReadI2C (NO_ACK)

لـ (أنا = 0i<6i++)
{
printf ('القيمة =٪ c n' ، EData [i]) // عرض البيانات * /
ديلاي ام اس (100)
}

بينما (1)
}

// ——————————————
// تهيئة المنفذ التسلسلي
// ——————————————
InitSerial باطل (باطل)
{
SCON = 0x52 // إعداد التحكم في المنفذ التسلسلي
TMOD = 0x20 // الأجهزة (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 on
}

// ———————————-
// ابدأ I2C
// ———————————-
بداية باطلة (باطلة)
{
SDA = 1
SCL = 1
_button _ () _ nop_ ()
SDA = 0
_button _ () _ nop_ ()
SCL = 0
_button _ () _ nop_ ()
}

// ———————————-
// توقف I2C
// ———————————-
توقف باطل (باطل)
{
SDA = 0
_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SDA = 1
}

// ———————————-
// اكتب I2C
// ———————————-
WriteI2C باطل (بيانات char غير الموقعة)
{

لـ (أنا = 0i<8i++)
{
SDA = (البيانات & 0x80)؟ 1: 0
SCL = 1SCL = 0
البيانات<<=1
}

SCL = 1
_button _ () _ nop_ ()
SCL = 0

}

// ———————————-
// قراءة I2C
// ———————————-
ReadI2C حرف غير موقّع (بت ACK_Bit)
{

بداية()
كتابة I2C (0xA1)

SDA = 1
لـ (أنا = 0i<8i++)

SCL = 1
البيانات<<= 1
التاريخ = (التاريخ

إذا (ACK_Bit == 1)
SDA = 0 // أرسل ACK
آخر
SDA = 1 // أرسل بلا ACK

_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SCL = 0
قف()
عودة البيانات
}

// ———————————-
// قراءة 1 بايت من النموذج I2C
// ———————————-
ReadBYTE باطل (عنوان int غير موقع)
{
بداية()
الكتابةI2C (0xA0)
WriteI2C ((حرف غير موقعة) (العنوان >> 8) & 0xFF)
WriteI2C ((حرف غير موقعة) Addr & 0xFF)
}

// ———————————-
// اكتب 1 بايت إلى I2C
// ———————————-
كتابة باطلة (عنوان int غير موقع)
{
بداية()
الكتابةI2C (0xA0)
WriteI2C ((حرف غير موقّع) (العنوان >> 8) & 0xFF) // إرسال العنوان عاليًا
WriteI2C ((حرف غير موقعة) Addr & 0xFF) // إرسال العنوان منخفض
}

// ——————————————
// تأخير وظيفة مللي ثانية
// ——————————————
DelayMs باطل (عدد عدد العمليات غير الموقعة)
{// mSec Delay 11.0592 ميجا هرتز
غير موقعة int i // Keil v7.5a
بينما (العد)
{
أنا = 115
بينما (i> 0) i–
عدد-
}
}

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