Объявление

Свернуть
Пока нет объявлений.

Практические рекомендации по шине I2C

Свернуть
X
Свернуть
  •  

  • Практические рекомендации по шине I2C

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

    Удобства применения шины I2C очевидны - малое количество соединительных линий и высокая скорость обмена, простота аппаратной реализации линии связи. Наиболее широко поддерживает шину I2C, конечно же, фирма Philips, производящая множество ИС различной сложности с управлением по I2C. В первую очередь, можно выделить микросхемы энергонезависимой памяти (EEPROM) серии 24Cхх в 8-ми выводных корпусах, фактически ставшие промышленным стандартом. Из широко распространенных ИС можно выделить: микросхемы часов PCF8583, параллельный порт PCF8574, 4-х канальный 8-ми разрядный АЦП PCF8591. Cуществует множество модификаций этих ИС и более специализированные контроллеры.

    I2C-абоненты жестко разделяются по классам:"Master"- и "Slave"- устройство. Тот факт, что сигнал SCL всегда генерируется "Master"-устройством означает, что "Master"-абонент может быть достаточно легко реализован чисто программными средствами, так как все изменения на шине будут происходить только по сигналу SCL. И наоборот, реализация "Slave"-устройства требует аппаратной поддержки, кроме случая очень низких скоростей обмена. Существуют однокристальные микро-ЭВМ (ОМЭВМ) поддерживающие "Slave"-операции шины I2C. Это прежде всего Philips PCF80C552 (652), Microchip PIC16C62 (64, 73 и др.), Motorola MC68HC705CJ4 (BD3, E5). Кроме того, ОМЭВМ фирмы Philips аппаратно поддерживают "Master"-протокол, хотя практически аппаратные "Master"-контроллеры применяются редко.

    Типичная ошибка при реализации программ "Master"-абонента - управление значением порта ОМЭВМ для установки нулевого и единичного состояний линий SCL и SDA. Если для ОМЭВМ семейства MCS-51 это нормальный режим работы, так как единичное состояние порта у них реализуется встроенным подтягивающим резистором = 50 кОМ, то для ОМЭВМ с симметричными портами (Motorola 68HCxx, Microchip PIC, Atmel AVR) это будет порождать электрические конфликты. Например, в руководстве "Microchip. Embedded Control Handbook 1994/1995" приведены практические программы для связи PIC c ИС EEPROM, содержащие подобные грубые ошибки. Положение усугубляется тем, что в случае микросхем EEPROM такой вариант может сработать, так как оин являются 100% аппаратными схемами и не вносят задержек в связной протокол, а пазу ожидания окончания цикла программирования производят переходом в пассивное состояние. Использование таких подпрограмм с ИС, производящими захват линии SCL (практически любой "Slave"-абонент, реализованный с применением ОМЭВМ), приведет к невозможности связи, а возможно, и к выходу ИС из строя.

    Реализовать настоящую имитацию ОК (мы назвали этот режим имитацией ОК, так он не позволяет устанавливать на линии напряжение выше напряжения питания, что было бы нормально для настоящего ОК, но так как по спецификации I2C напряжение на линиях SCL и SDA не должно превышать напряжение питания, его вполне законно можно считать выходом с ОК) на порте с симметричным выходом можно, если установить значение порта постоянно в ноль, а управлять состоянием линии через манипуляции с регистром направления данных. Для ОМЭВМ PIC это будет регистр "TRISx", переводящий порт либо в третье состояние, либо подключающий линии в соответствии с состоянием регистра "PORTx". Практически так же это реализуется в AVR и MC68HC05 (08, 11), где "DDRx" коммутирует порт "PORTx", с той лишь разницей, что у них другая полярность управляющего сигнала - у PIC ноль в "TRISx" соответствует нулю на выходе, а у AVR и MC68HC05 единица в "DDRx" соответствует нулю на выходе.

    Еще одна тонкость связанная с PIC, не имеющая собственно к I2C никакого отношения заключается в том, что у него совмещены регистр чтения состояния линий порта и регистр записи значения порта, в результате чего, если часть линий порта запрограммирована на вывод, а другая находится в третьем состоянии, то при выполнении PIC'а установленных в третье состояние, что может нарушить (и скорее всего нарушит) работу программы обмена (потеряются нули обеспечивающие имитацию выходов с ОК). Поэтому лучше производить принудительную установку в ноль битов в "PORTx", например, перед каждой операцией обмена, скажем такой последовательностью:


    movlw b'11100111' ; Маска линий SCL и SDA в порте С (RC3 и RC4)
    andwf portc,f ; Сбр. значений линий SCL и SDA в порте С в ноль



    Другая важная сторона вопроса-необходимость тщательного соблюдения параметров временной диаграммы процесса обмена. Несмотря на то, что шина I2C асинхронная и позволяет затягивать передачу бита (байта) на сколь угодно длительное время (это свойство позволяет реализовывать программы I2C-обмена на самом низком уровне приоритета, прерывая процесс передачи в любое время), требования к минимальным значениям длительностей импульсов очень жесткие. Ситуация усугубляется тем, что положительные перепады состояния линии имеют склонность затягиваться, так как несимметричные управляющие выходы не могут создать крутые положительные фронты.

    При написании программ очень важно контролировать время между операциями на шине, реализуемыми различными подпрограммами, например выдача "Start" и "Stop"-условия, передача бита, передача байта. При состыковке этих подпрограмм не должны быть нарушены минимальные значения времени, что очень легко происходит при использовании высокоскоростных процессоров (AVR, PIC). Кроме того, необходимо следить, чтобы время между изменением на линии SDA и стробированием положительным импульсом на линии SCL было не меньше половины минимальной длительности полупериода SCL (4.7 мкс/2=2.4 мкс). Помимо этого, некоторые "Slave"-приборы могут ужесточить требования к максимальной частоте обмена (например, CE110-48 кГц), в этом случае необходимо пропорционально снижению частоты обмена увеличивать значения минимумов временных допусков.

    Еще одна распространенная ошибка - игнорирование требования слежения за захватом линии SCL "Slave"-абонентом. Грамотно реализованные прграммы операций "Master"-абонента должны контролировать возврат линии SCL после того, как переводят ее в единичное состояние, и только дождавшись реальной установки линии SCL в единичное состояние продолжать операции приемо-передачи.

    Теперь мы опишем минимально необходимый набор операций для реализации "Master"-абонента. Прежде всего, это подпрограммы выдачи "Start"- и "Stop"-условия, подпрограмма передачи байта, подпрограмма приема байта, выдающая сигнал АСК и подпрограмма приема байта, не выдающая сигнал АСК. Три последние используют подпрограммы передачи бита и приема бита.Во временных промежутках между подпрограммами линия SCL имеет нулевое значение. Как уже говорилось ранее, важно правильно согласовывать все временные характеристики подпрограмм. Если, к примеру, вы вызываете повторный "Start" сразу за передачей (приемом) байта, то необходимо, чтобы полностью завершился нулевой полупериод (>4.7 мкс), предшествующий "Start"-условию, а подпрограмма, реализующая "Start"-условие, переведя линии SDA и SCL в единичное состояние, дождавшись их реального возврата, должна удерживать ее в таком состоянии не менее установленного времени (>4.7 мкс), и так во всех случаях.

    Оперируя этими пятью подпрограммами можно легко наладить обмен по шине I2C. Можно выдать на шину "Start"-условие, за ним "Siave Adress", далее данные, в соответствии с протоколом конкретной I2C-ИС. Можно выдать повторное "Start"-условие, новый "Slave Adress" и так далее, формируя процесс обмена как из элементов конструктора. Обычно протоколы обмена "Slave"-устройств довольно логично соответствуют программированию в таком стиле.

      Возможность размещать комментарии к сообщениям отключена.

    Метки статей

    Свернуть

    Меток пока нет.

    Новые статьи

    Свернуть

    • Стандартный параллельный интерфейс на PC
      от admin
      Основным назначением интерфейса Centronics (аналог-ИРПР-М) является подключение к компьютеру принтеров различных типов. Поэтому распределение контактов разъема, назначение сигналов, программные средства управления интерфейсом ориентированы именно на это использование. Вто...
      08.02.2017, 22:45
    • Современные микросхемы драйверов RS-485 фирмы MAXIM
      от admin
      Журнал «Схемотехника» №10 2002 г.
      Олег Николайчук
      Целью настоящей статьи является ознакомление читателей с современными микросхемами драйверов сети RS485 фирмы MAXIM, их основными параметрами и особенностями.
      Интерфейс RS485 наиболее часто используется при создании современных локальных сетей различного назначения, как в промышленных изделиях, так и в любительской практике. Основными преимуществами интерфейса являются:
      • Относительно низкая себестоимость
      ...
      08.02.2017, 22:45
    • Системный контроллер ввода-вывода для сопряжения шин PCI и ISA
      от admin
      Журнал «Chip News» №6 2001 г.
      Ракович Н. Н.
      Мы уже беседовали на страницах журнала о продукции компании Winbond [Л.1], выпускающей широкую гамму разнообразных микросхем, начиная с памяти и микроконтроллеров и заканчивая приборами для мобильных средств связи и распознавания речи. Примерно в середине...
      08.02.2017, 22:45
    • Реализация последовательной асинхронной передачи данных в микроконтроллерах PIC
      от admin
      Введение.
      Серия PIC16Cxx от Microchip Technology, Inc. - это второе поколение высокопроизводительных восьмиразрядных микроконтроллеров на базе EPROM. Некоторые микроконтроллеры из этой серии (например PIC16C71 и PIC16C84) не имеют встроенного последовательного асинхронного порта. Эта статья содержит описание последовательного асинхронного интерфейса ( полудуплексное RS-232 соединение ) с программной обработкой прерывания для микроконтроллеров...
      08.02.2017, 22:45
    • Простой конвертер RS-232-TTL
      от admin

      Журнал «Схемотехника» №1 2000 г.
      Александр Нечаев
      При разработке различного рода электронных устройств с использованием микроконтроллеров очень часто оказывается полезной возможность подключения их к персональному компьютеру через последовательный порт. Однако напрямую это сделать...
      08.02.2017, 22:45
    • Программирование портов ввода/вывода LPT и ISA
      от admin
      Данный материал основан на моём (его) личном опыте работы с материнской платой неизвестного (нет, не солдата) производителя. Чипсет - SIS. Если вдруг в Вашем случае дело будет обстоять другим образом, напишите мне. Также хочу сразу предупредить - я не профессиональный программист!!!...
      08.02.2017, 22:45
    Обработка...
    X