Как связать I2C-EEPROM с микроконтроллером 8051

Попробуйте наш инструмент устранения неполадок





Термин I2C или аббревиатура IIC - это интер Интегральная схема и он называется, поскольку я возведу в квадрат C. I2C - это последовательная компьютерная шина , который изобретен компанией NXP Semiconductors, ранее он назывался Philips Semiconductors. Шина I2C используется для подключения низкоскоростных периферийных интегральных схем к микроконтроллеры и процессоры . В 2006 году для реализации протокола I2C не требуется лицензионных сборов. Но для получения адреса подчиненного устройства I2C, присвоенного NXP semiconductors, необходима плата.

Некоторые конкуренты, такие как Texas Instruments, Siemens AG, NEC, Motorola, Intersil и STMicroelectronics, представили на рынке хорошо подходящие продукты I²C в середине 1990-х годов. В 1995 году протокол SMBus был определен Intel, то есть подгруппой I²C, которая заявляет, что протоколы являются более строгими. Основная цель SMBus - поддерживать совместимость и надежность. Поэтому текущие системы I²C включают правила и политики от SMBus, иногда они поддерживают как I2C, так и SMBus с минимальной реконфигурацией.




Автобус I2C

Автобус I2C

Интерфейс I2C Bus-EEPROM с микроконтроллером 8051

Что такое шина I2C

Шина I2c использует две двунаправленные линии с открытым стоком, такие как SDA (линия последовательной передачи данных) и SCl (линия последовательной синхронизации), и они подтягиваются резисторами. Шина I2C позволяет ведущему устройству начать связь с ведомым устройством. Данные обмениваются между этими двумя устройствами. Обычно используются напряжения +3,3 В или + 5 В, хотя системы с дополнительным напряжением допускаются.



Интерфейс I2C

Интерфейс I2C

EEPROM

Электрически стираемое программируемое ПЗУ (EEPROM) - это изменяемое пользователем ПЗУ, которое можно часто удалять и перепрограммировать посредством приложения электрического напряжения выше нормального. EEPROM - это своего рода энергонезависимая память, используемая в электронных устройствах, таких как компьютеры, для хранения небольших объемов данных, которые следует сохранять при отключении питания.

8051 Slicker Board

Доска 8051 Slicker специально разработана, чтобы помочь студентам-техническим специалистам в области встроенные системы . Этот комплект разработан таким образом, что все особенности 8051 микроконтроллер возможно будет использоваться студентами. Эта нападающая плата поддерживает ISP (системное программирование), которое осуществляется через последовательный порт. Этот комплект и 8051 от NXP предложены для облегчения процесса отладки многих проектов, окружающих быстродействующие 8-битные микроконтроллеры.

Интерфейс I2C - EEPROM

На следующем рисунке показано взаимодействие I2C-EEPROM с микроконтроллером 8051. Здесь I2C - это протокол ведущий-ведомый, который включает данные вместе с тактовым импульсом. Обычно ведущее устройство переключает линию синхронизации SCL. Эта строка определяет синхронизацию данных, которые передаются по шине I2C. Если часы не работают, данные не будут переданы. Все ведомые устройства управляются одними и теми же часами SCL.


Интерфейс I2C - EEPROM

Интерфейс I2C - EEPROM

Шина I2C поддерживает различные устройства где каждое устройство идентифицируется уникальным адресом, будь то драйвер ЖК-дисплея, карта памяти, микроконтроллер или интерфейс клавиатуры которые могут работать как Tx или Rx, в зависимости от функционирования устройства. Контроллер предназначен для управления устройством EEPROM по протоколу I2C. Здесь протокол I2C работает как ведущее устройство и регулирует EEPROM, а он работает как ведомое устройство. Операции чтения / записи эффективны путем передачи набора управляющих сигналов, содержащих адресную шину данных И / ИЛИ. Эти сигналы должны сопровождаться подходящими тактовыми сигналами.

Интерфейс I2C Bus-EEPROM с микроконтроллером 8051

Если вы хотите читать, писать и Erase EEPROM с помощью I2C шины в 8051 ударника борту. Взаимодействие шины I2-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

#включают
#включают
#включают

#define ACK 1
#define NO_ACK 0

беззнаковый символ i
беззнаковый символ EData [5]
беззнаковый символ данных
недействительным InitSerial (недействительным)
void DelayMs (целое число без знака)
void WriteI2C (символ без знака)
void Start (недействительно)
void Stop (недействительно)
void ReadBYTE (целое число без знака)
void WriteBYTE (целое число без знака)
беззнаковый символ ReadI2C (бит)

sbit SCL = P2 ^ 0 // подключаемся к контакту SCL (Clock)
sbit SDA = P2 ^ 1 // подключаемся к выводу SDA (данные)

// —————————————
// Основная программа
// —————————————
void main (пусто)
{
InitSerial () // Инициализировать последовательный порт
putchar (0x0C) // очищаем гипертерминал
Задержка (5)
WriteBYTE (0x0000)
WriteI2C (‘A’) // Записываем сюда данные
WriteI2C («B»)
WriteI2C («C»)
WriteI2C ('D')
WriteI2C («E»)
WriteI2C («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)

для (i = 0i<6i++)
{
printf («value =% c n», EData [i]) // отображаем данные * /
Задержка (100)
}

пока (1)
}

// —————————————
// Инициализируем последовательный порт
// —————————————
недействительным InitSerial (недействительным)
{
SCON = 0x52 // настройка управления последовательным портом
TMOD = 0x20 // оборудование (9600 BAUD @ 11,0592 МГц)
TH1 = 0xFD // TH1
TR1 = 1 // Таймер 1 включен
}

// ——————————-
// запускаем I2C
// ——————————-
void Start (недействительно)
{
SDA = 1
SCL = 1
_button _ () _ nop_ ()
SDA = 0
_button _ () _ nop_ ()
SCL = 0
_button _ () _ nop_ ()
}

// ——————————-
// останавливаем I2C
// ——————————-
void Stop (недействительно)
{
SDA = 0
_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SDA = 1
}

// ——————————-
// Записываем I2C
// ——————————-
void WriteI2C (данные без знака)
{

для (i = 0i<8i++)
{
SDA = (Данные & 0x80)? 1: 0
SCL = 1SCL = 0
Данные<<=1
}

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

}

// ——————————-
// Чтение I2C
// ——————————-
беззнаковый символ ReadI2C (бит ACK_Bit)
{

Начинать()
WriteI2C (0xA1)

SDA = 1
для (i = 0i<8i++)

SCL = 1
Данные<<= 1
Дата = (Дата

если (ACK_Bit == 1)
SDA = 0 // Отправить ACK
еще
SDA = 1 // Отправить НЕТ ACK

_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SCL = 0
Останавливаться()
вернуть данные
}

// ——————————-
// Чтение 1 байта формы I2C
// ——————————-
void ReadBYTE (адрес без знака int)
{
Начинать()
ЗаписьI2C (0xA0)
WriteI2C ((символ без знака) (Адрес >> 8) & 0xFF)
WriteI2C ((символ без знака) Адрес & 0xFF)
}

// ——————————-
// Записываем 1 байт в I2C
// ——————————-
void WriteBYTE (адрес без знака int)
{
Начинать()
ЗаписьI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // отправляем высокий адрес
WriteI2C ((unsigned char) Addr & 0xFF) // отправляем низкий адрес
}

// —————————————
// Функция задержки mS
// —————————————
void DelayMs (число целых чисел без знака)
{// Задержка в мсек 11,0592 МГц
unsigned int i // ключ версии 7.5a
пока (считать)
{
я = 115
в то время как (i> 0) i–
считать-
}
}

Таким образом, речь идет о реализации интерфейса I2C. Мы надеемся, что вы лучше понимаете эту концепцию. Кроме того, любые вопросы относительно этой концепции или сопрягающие устройства пожалуйста, дайте свои ценные предложения, комментируя в разделе комментариев ниже.