Двухпроводной и трехпроводной последовательный интерфейс для RTC

Я ищу, чтобы выбрать RTC для проекта, который я имею в виду.

У меня есть следующие варианты (ссылка на таблицу данных):

  1. ДС1307
  2. ДС1302

Основное отличие, по-видимому, заключается в протоколе связи. DS1307, кажется, использует что-то, называемое «двухпроводным последовательным интерфейсом», тогда как DS1302 использует что-то, называемое «3-проводным интерфейсом».

Я хотел бы использовать один из этих чипов, чтобы следить за временем на моем микроконтроллере ATMega (вероятно, ATmega8).

Так чем же они отличаются друг от друга и как их соединить?

Ответы (4)

Основное различие между SPI (3-проводной интерфейс) и I2C (2-проводной интерфейс) заключается в том, что при использовании I2C вы должны отправить адрес. Таким образом, он не будет таким быстрым, как SPI, потому что вам нужно отправлять больше данных.

При использовании SPI вам понадобится дополнительный контакт для сигнала включения чипа. Это потребуется для каждого ведомого. Так быстрее, но нужно больше выходных контактов.

Я бы предпочел I2C, потому что в этом сценарии скорость не имеет значения.

Микроконтроллер ATMega имеет аппаратные периферийные устройства для обоих методов, так что решать вам.

Спасибо, ответил на мой вопрос отлично, с краткой рекомендацией.
Имея только одно ведомое устройство, вы можете подключить сигнал включения к шине питания и использовать ее в качестве двухпроводного интерфейса. Тогда SPI намного проще отлаживать, потому что вам не нужно иметь дело с протоколом.
@Potatoswatter: это неправильно. Во-первых, SS должен быть подключен к земле, а не к питанию. Во-вторых, вам по-прежнему нужны 3 линии: часы, исходящие данные и входные данные (SCK, MOSI, MISO).
@Potatoswatter: некоторые устройства SPI можно использовать с включенным принудительным SS, но многие устройства используют его не только для определения того, какие сообщения предназначены для них, но и для отметки начала каждой команды.

Первый работает с I2C . Информация о времени представлена ​​на рисунке 5 на странице 7 таблицы данных.

Второй работает через SPI . Информация о времени представлена ​​на рисунке 4 на странице 8 таблицы данных.

Похоже, что ATmega8 имеет TWI и SPI, как и все остальные части ATmega, вы можете использовать их одновременно, если хотите. Я бы предпочел SPI. С ним немного легче работать, и, поскольку протокол имеет тенденцию быть немного менее темпераментным.

Большое спасибо. Вы и Hardwarefreak ответили одновременно, но я нашел его ответ более полным. Большое спасибо еще раз.

Это зависит от нескольких факторов:

  1. Аппаратный дизайн: Если вы используете только этот чип с вашим микроконтроллером, подойдет любой из них. Но если ваш проект состоит из двух или более устройств, использующих интерфейс I2C, то имеет смысл использовать I2C RTC, чтобы вам не пришлось делать дополнительный интерфейс, просто добавить RTC к существующей шине. То же самое относится и к SPI, но имейте в виду, что при добавлении дополнительных устройств к шине SPI вам потребуется один дополнительный сигнал SS на каждое устройство. Это также зависит от аппаратных периферийных устройств, которые есть в вашем микроконтроллере. Если ваш микро имеет аппаратное периферийное устройство SPI, но не I2C, то имеет смысл использовать устройство SPI вместо устройства I2C. То же самое и с периферийным устройством I2C.

  2. Проектирование программного обеспечения. Еще одним решающим фактором является то, реализуете ли вы какой-либо протокол в программном обеспечении. I2C требует немного больше работы, чем SPI. Вы также можете найти некоторые реализации кода в Интернете. Если у вас уже есть код I2C с высокой степенью достоверности, используйте его. То же самое применимо, если вы достаточно уверены в фрагменте кода для SPI, который вы нашли в Интернете.

  3. Ваше понимание: выбор также зависит от вашего понимания того или иного протокола и от того, насколько хорошо вы разбираетесь в них. Если вы использовали какой-либо из них раньше, имеет смысл использовать предыдущий опыт.

Спасибо, Четан. Хотя вы не ответили на мой вопрос напрямую, ваш ответ является отличным дополнением к приведенным выше ответам. Чрезвычайно полезно.

В DS1302действительности не используется стандартный SPI, потому что одиночный сигнал данных «I/O» мультиплексируется по времени во время связи (управляется чипом во время чтения между задним фронтом «CLK» и сразу после переднего фронта «CLK»). ", high-z во все остальное время).

Стандартный SPI имеет отдельные контакты MOSI (главный-выход/ведомый-вход) и MISO (главный-вход/ведомый-выход) для каждого периферийного устройства (хотя MISO может иметь три состояния для периферийного устройства, если оно мультиплексировано с несколькими ведомыми устройствами).

« CE DS1302» (ранее называвшийся «/RST») абсолютно необходим для связи, чтобы начать/остановить каждую передачу, а также сохранить данные RTC после «Burst» (вы НЕ можете просто подключить его к шине). Кроме того, первый бит, отправленный после подтверждения CE, указывает, выполняете ли вы чтение (1) или запись (0). При этом накладных расходов на протокол по-прежнему меньше, чем при использовании I2C, потому что вам не нужно беспокоиться об адресации и времени, специфичных для I2C.

Даже при спецификации 2 В (в техническом описании указано время для 2 В и 5 В) это DS1302все равно быстрее, чем при использовании I2C, и НАМНОГО быстрее при использовании 5 В. Имейте в виду, что каждый из 3 коммуникационных контактов имеет DS1302(номинальный) резистор 40 кОм, чтобы контакты не болтались.