Здесь приведен перевод материалов даташита, касающихся программирования записи и чтения данных OneWire EEPROM DS2431. Информацию по электрическим параметрам, значениям интервалов времени, корпусу см. в оригинальном даташите на DS2431 [1].
DS2431 комбинирует внутри себя 1024 бита EEPROM, 8-байтный регистр/страница управления, где доступны для чтения/записи пользователем 7 байт, и полнофункциональный интерфейс 1-Wire. В каждом чипе DS2431 есть свой собственный уникальный 64-разрядный не стираемый серийный номер (ROM registration number, или 64-bit lasered ROM), прошитый на заводе при изготовлении. Это гарантирует, что каждый чип может быть глобально идентифицирован. Данные передаются последовательно по протоколу 1-Wire, который требует только одного сигнального провода и одного провода земли. У DS2431 есть дополнительная область памяти, которая называется scratchpad, и она работает как буфер при записи основной памяти или страницы регистра. Данные сначала записываются в scratchpad, откуда их потом можно прочитать обратно. После того, как данные были проверены, команда Copy Scratchpad перемещает данные в свое конечное место назначения в памяти. Области применения DS2431 включают идентификаторы изделий/PCB, медицинские датчики, в которых хранятся калибровочные данные (включая smart- сенсоры IEEE P1451.4), идентификаторы картриджей чернил и тонера и т. п.
На блок-схеме рис. 1 показана общая взаимосвязь между основными функциональными узлами DS2431. DS2431 содержит 4 основных компонента данных:
- 64-bit lasered ROM - 64-bit scratchpad - 4 страницы по 32 байта - 64-разрядная страница регистра.

Рис. 1. Внутренняя структура DS2431.
Иерархическая структура протокола 1-Wire показана на рис. 2. Мастер шины должен сначала предоставить одну из 7 функциональных команд ROM: Read ROM, Match ROM, Search ROM, Skip ROM, Resume, Overdrive-Skip ROM или Overdrive-Match ROM. При завершении команды Overdrive-Skip ROM или Overdrive-Match ROM, выполненной на стандартной скорости, устройство входит в режим overdrive, когда все последующие команды выполняются на повышенной скорости. Протокол, требуемый для этих функциональных команд ROM, описан на рис. 9.

Рис. 2. Иерархическая структура протокола 1-Wire.

Рис. 3. 64-бит Lasered ROM.
После того, как функциональная команда ROM успешно выполнена, становятся доступны функции памяти, и мастер шины может выдать одну из 4 команд функций памяти. Протокол этих команд описан на рис. 7. Все данные читаются и записываются младшим битом (least significant bit, LSB) вперед.
64-бит Lasered ROM. Каждая DS2431 содержит уникальный ROM-код размером 64 бита. Первые 8 бит это так называемый код семейства (1-Wire family code), т. е. код, по которому можно определить назначение устройства на шине (для DS2431 он равен 0x2D, или 45 десятичное значение). Следующие 48 бит представляют собой уникальный серийный номер устройства. Последние 8 это контрольная сумма (CRC) от первых 56 бит, подробнее см. рис. 3. 1-Wire CRC генерируется полиномным генератором, состоящим из регистра сдвига и логических элементов XOR, показанным на рис. 4. Полином этого генератора X8 + X5 + X4 + 1. Дополнительную информацию по 1-Wire CRC можно получить из апноута [2].
Биты регистра сдвига инициализируются нулями. Затем, начиная с самого младшего бита family code, биты вдвигаются по одному в регистр. После того, как 8-й бит family code был введен, двигается серийный номер. После последнего бита серийного номера регистр сдвига содержит значение CRC. Если вдвинуть в регистр 8 бит кода CRC, то в регистре сдвига окажутся все нули.

Рис. 4. Генератор 1-Wire CRC.
[Доступ к памяти]
Память данных и регистры размещены в линейном адресном пространстве, как показано на рис. 5. Память данных и регистры доступны для неограниченного чтения. Массив DS2431 EEPROM организован как 18 строк по 8 байт каждая. Первые 16 строк поделены на 4 одинаковых по размеру страницы памяти (каждая по 32 байта). Эти 4 страницы составляют основную память данных. Каждая страница может быть индивидуально установлена на открытие (не защищенной), защищенной от записи, или работать в режиме EPROM путем установки соответствующего байта защиты в строке регистра. По умолчанию заводские установки оставляют незащищенной всю память данных, и её содержимое не определено (например, моя микросхема была с завода заполнена байтами 0x00). Последние 2 строки содержат регистры защиты (protection registers) и зарезервированные байты. Строка регистра состоит из 4 управляющих защитой байтов (protection control bytes), байта защиты от копирования, factory byte, и 2 пользовательских байта (byte/manufacture ID). Manufacturer ID может быть предоставляемым производителем идентификационным кодом (custom manufacturer ID), который помогает программе приложения идентифицировать продукт, с которым связан чип DS2431.
Диапазон адресов |
Тип |
Описание |
Коды защиты |
0000h .. 001Fh |
R/(W) |
Data Memory Page 0 |
- |
0020h .. 003Fh |
R/(W) |
Data Memory Page 1 |
- |
0040h .. 005Fh |
R/(W) |
Data Memory Page 2 |
- |
0060h .. 007Fh |
R/(W) |
Data Memory Page 3 |
- |
0080h* |
R/(W) |
Protection Control Byte Page 0 |
55h: Write Protect P0; AAh: EPROM Mode P0; 55h или AAh: Write Protect 80h |
0081h* |
R/(W) |
Protection Control Byte Page 1 |
55h: Write Protect P1; AAh: EPROM Mode P1; 55h или AAh: Write Protect 81h |
0082h* |
R/(W) |
Protection Control Byte Page 2 |
55h: Write Protect P2; AAh: EPROM Mode P2; 55h или AAh: Write Protect 82h |
0083h* |
R/(W) |
Protection Control Byte Page 3 |
55h: Write Protect P3; AAh: EPROM Mode P3; 55h или AAh: Write Protect 83h |
0084h* |
R/(W) |
Copy Protection Byte |
55h или AAh: Copy Protect 0080h:008Fh, и любые защищенные от записи страницы |
0085h |
R |
Factory Byte. Устанавливается на заводе. |
AAh: Write Protect 85h, 86h, 87h; 55h: Write Protect 85h; отмена защиты 86h, 87h |
0086h |
R/(W) |
User Byte/Manufacturer ID |
- |
0087h |
R/(W) |
User Byte/Manufacturer ID |
- |
0088h .. 008Fh |
- |
Зарезервировано |
- |
Рис. 5. Карта памяти DS2431.
Примечание *: будучи запрограммированным в AAh или 55h этот адрес становится только для чтения. Все остальные коды можно сохранить, но они не защищают адрес от записи и не активируют никаких функций.
Свяжитесь с заводом для установки и регистрации custom manufacturer ID. Последняя строка зарезервирована для использования в будущем. Она не определена в контексте функционала чтения/записи (R/W) и не должна использоваться.
В дополнение к основному массиву памяти EEPROM имеется 8-байтный буфер (volatile scratchpad). Запись в массив EEPROM работает как процесс из выполнения 2 шагов. Сначала данные записываются в scratchpad, и после этого копируется в основной массив. Это дает возможность пользователю сначала проверить данные, записанные в scratchpad, перед их копированием в основной массив. Устройство поддерживает только операции копирования полной строки (8 байт). Чтобы данные в scratchpad были допустимы для операций копирования, предоставленный адрес для команды Write Scratchpad должен начинаться на границе строки (т. е. должен нацело делиться на 8), и все 8 байт должны быть записаны в scratchpad.
Регистры управления защитой (protection control registers) определяют, как приходящие данные на команде Write Scratchpad загружаются в scratchpad. Защита, установленная в 55h (write protect) заставляет игнорировать приходящие данные и целевой адрес назначения данных, так что данные не попадают в scratchpad и основную память. Защита, установленная в AAh (режим EPROM), выполняет операцию логического И (AND) и данными, находящимися по целевому адресу основной памяти, и результат этой операции загружается в scratchpad. Любое другое значение регистра управления защитой оставляет незащищенной соответствующую страницу памяти, давая к ней неограниченный доступ на запись. Замечание: чтобы можно было пользоваться режимом EPROM, все содержимое соответствующей страницы памяти должно быть изначально запрограммировано в FFh. Настройка байта защиты (protection-control byte) 55h или AAh также защищает и его самого. Настройка protection-control byte 55h не блокирует копирование данных. Это позволяет обновлять защищенные от записи данные (т.е. перепрограммировать их текущими данными) в устройстве.
Байт защиты от копирования (copy-protection byte) используется для повышения уровня защиты, и должен использоваться только того, как все другие байты управления защитой, байты пользователя и защищенные от записи страницы установлены в своё конечное значение. Если copy-protection byte установлен в 55h или AAh, то все попытки копирования в строку регистра и строку байт пользователя блокируются. Дополнительно блокируются все попытки копирования защищенных от записи страниц основной памяти (т. е. их обновление невозможно).
Регистры адреса и статус транзакции. В DS2431 есть 3 регистра адреса: TA1, TA2 и E/S (рис. 6). Эти регистры также есть во многих других устройствах 1-Wire, но у DS2431 они работают несколько по-другому. Регистры TA1 и TA2 должны быть загружены целевым адресом памяти, по которому данные должны быть записаны или считаны. Регистр E/S это регистр только для чтения, в котором доступна информация о состоянии транзакции, по которой пользователь может определить целостность данных в командах записи. Биты E[2:0] регистра E/S загружаются приходящими битами T[2:0] на команде Write Scratchpad, и инкрементируются на каждом последующем байте данных. По сути это счетчик смещения последнего записанного байта в 8-байтном scratchpad. Бит 5 регистра E/S, называемый PF, содержит лог. 1, если данные в scratchpad недопустимы из-за потери питания или если master послал недостаточное количество байт, необходимое для достижения конца scratchpad. Для того, чтобы scratchpad был допустим для записи, биты T[2:0] должны быть 0, и для этого master должен послать 8 байт данных. Биты 3, 4, и 6 не обременены какой-либо функцией, они всегда читаются как 0. Самый старший бит регистра E/S называется authorization accepted (AA), он действует как флаг для индикации, что данные, скопированные в scratchpad, были уже скопированы по целевому адресу основной памяти. Запись данных в scratchpad очищает этот флаг.
№ бита |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
TARGET ADDRESS (TA1) |
T7 |
T6 |
T5 |
T4 |
T3 |
T2 |
T1 |
T0 |
TARGET ADDRESS (TA2) |
T15 |
T14 |
T13 |
T12 |
T11 |
T10 |
T9 |
T8 |
Конечный адрес со статусом данных (E/S, только чтение) |
AA |
0 |
PF |
0 |
0 |
E2 |
E1 |
E0 |
Рис. 6. Регистры адреса.
Запись с верификацией. Чтобы записать данные в DS2431, должен использоваться scratchpad как промежуточное хранилище. Сначала master выдает команду Write Scratchpad, чтобы указать желаемый целевой адрес записи, за которой идут данные, записываемые в scratchpad. Обратите внимание, что команда Copy Scratchpad должна быть выполнена на 8-байтных границах, т. е. младшие 3 бита целевого адреса (T2, T1, T0) должны равняться 000b (целевой адрес нацело делится на 8). Если T[2:0] были установлены у ненулевое значение, то функция копирования в основную память блокируется. В определенных условиях (см. секцию "Write Scratchpad [0Fh]") master принимает инвертированную CRC-16 команды, адрес (фактический отправленный адрес) и данные по окончанию последовательности команды Write Scratchpad. Зная это значение CRC, master может его сравнить со значением, который он сам вычислил, чтобы удостовериться, что обмен был совершен правильно, после чего может последовать команда Copy Scratchpad. Если master не может принять CRC-16, то он должен послать команду Read Scratchpad, чтобы проверить целостность данных. Как преамбула данных данных scratchpad, DS2431 повторяет целевой адрес TA1 и TA2, и посылает содержимое регистра E/S. Если установлен флаг PF, то данные не достигли корректно scratchpad, или было пропадание питания при последней записи в scratchpad. Мастеру не надо продолжать чтение; он может начать новую попытку записать данные в scratchpad. Подобным образом, установленный флаг AA вместе с очищенным флагом PF показывает, что устройство не распознало команду Write.
Если все прошло нормально, то оба этих флага очищены. Теперь master может продолжить чтение и проверку каждого байта данных. После того, как master проверил данные, он может послать команду Copy Scratchpad. За этой командой должны следовать данные трех адресных регистров: TA1, TA2 и E/S. Мастер должен получить данные этих регистров, прочитав scratchpad.
[Команды функций памяти]
Диаграмма алгоритма функций памяти Memory Function Flowchart (рис. 7) описывает протоколы, необходимые для доступа к памяти DS2431. Как использовать эти функции для записи и чтения устройства, можно посмотреть далее в секции "Пример использования функции памяти". Коммуникация между master и DS2431 происходит либо на стандартной скорости (по умолчанию, OD = 0) или на повышенной скорости (overdrive speed, OD = 1). Если не установлен явно режим overdrive, то DS2431 подразумевает использование стандартной скорости.
Write Scratchpad [0Fh]. Команда Write Scratchpad применяется для памяти данных и записываемых адресов в странице регистра. Чтобы данные scratchpad были допустимы для копирования в массив памяти, пользователь должен выполнить команду Write Scratchpad с 8 байтами, начинающимися на допустимом адресе границы строки. Команда Write Scratchpad примет недопустимые адреса и частично заполненные данные строк, но последующие команды Copy Scratchpad в этом случае блокируются.
После выдачи команды Write Scratchpad мастер шины должен предоставить 2 байта целевого адреса, за которым идут данные для записи в scratchpad. Данные, записываемые scratchpad, начинаются на смещении байта T[2:0]. Биты E[2:0] регистра E/S загружаются со смещением начального байта и увеличиваются с каждым последующим байтом. Фактически E [2:0] - это смещение байта последнего полного байта, записанного на scratchpad. Принимаются только полные байты данных.
Когда выполняется команда Write Scratchpad, генератор CRC внутри DS2431 (рис. 13) вычисляет CRC от всего потока данных, начиная с кода команды и заканчивая последним байтом данных, посланным master. Эта CRC генерируется полиномом CRC-16 путем предварительной очистки генератора CRC и последующим сдвигом кода команды Write Scratchpad (0Fh), целевых адресов (TA1 и TA2), и всех байт данных. Обратите внимание, что вычисление CRC-16 производится с фактическими TA1, TA2 и данными, посланными master. Мастер может прервать команду Write Scratchpad в любой момент. Однако если был достигнут конец scratchpad (E[2:0] = 111b), то master может послать 16 тайм-слотов чтения бит и принять CRC, сгенерированную DS2431.
Если команда Write Scratchpad пытается выполниться на защищенной области памяти, то scratchpad загружается данными, которые уже находятся в этой памяти вместо передачи данных. Подобным образом, если целевой адрес используется в режиме EPROM, то scratchpad загружается побитным логическим И (AND) от переданных данных и данных, которые уже находятся в памяти.

Рис. 7. Алгоритм работы функций памяти.
Read Scratchpad [AAh]. Команда Read Scratchpad позволяет проверить целевой адрес и целостность данных scratchpad. После выдачи кода команды master начинает чтение. Первые 2 байта это целевой адрес. Следующим байтом является конечный байт смещения/состояния данных (ending offset/data status byte, E/S), за которым следуют данные scratchpad, которые могут отличаться от того, что мастер первоначально отправил. Это особенно важно, если целевой адрес находится в пределах страницы регистра или страницы либо в режиме защиты от записи, либо в режиме EPROM. Мастер должен прочитать scratchpad (E[2:0] - T[2:0] + 1 байт), после чего он получает инвертированный CRC на основе данных, как они были отправлены DS2431. Если мастер продолжает считывание после CRC, то все прочитанные данные являются логическими 1.
Copy Scratchpad [55h]. Команда Copy Scratchpad используется для копирования данных из scratchpad в записываемые секции памяти. После выдачи команды Copy Scratchpad мастер должен предоставить 3-байтный шаблон авторизации, который должен быть получен непосредственно предшествующей командой Read Scratchpad. Этот 3-байтный шаблон должен точно совпадать с данными, содержащимися в трех адресных регистрах (TA1, TA2, E/S, в таком порядке). Если шаблон совпал, то целевой адрес допустимый, флаг PF не установлен и целевая память не защищена от копирования, то флаг AA устанавливается и начинается копирование. Все 8 байт содержимого scratchpad копируются в целевую область памяти. Длительность этого внутреннего перемещения данных составляет tPROG (максимум от 10 мс до 12.5 мс, в зависимости от версии A1 или A2, см. даташит [1]), в течение этого времени напряжение на шине 1-Wire не должно упасть ниже 2.8V. Шаблон чередующихся нулей и нулей передается после копирования данных до тех пор, пока master не выдаст импульс сброса. Если установлен флаг PF или целевая память защищена от копирования, то копирование не начинается, и флаг AA не установлен.
Read Memory [F0h]. Команда Read Memory это основная функция для чтения данных из DS2431. После выдачи этой команды master должен предоставить 2 байта целевого адреса. После этих 2 байт master читает данные, начиная с целевого адреса, и может продолжать чтения, пока адрес не превышает 008Fh. Если master продолжает чтение, то результатом будут логические единицы. Команда Read Memory не влияет на содержимое внутренних регистров TA1, TA2, E/S и на содержимое scratchpad.
[1-Wire Bus System]
Шина 1-Wire эта система, в которой существует один мастер шины (master) и одно или несколько подчиненных устройств (slave). Все экземпляры DS2431 это slave-устройства. Master шины это обычно микроконтроллер. Обсуждение системы шины разбито на 3 темы: "Аппаратная конфигурация", "Последовательность транзакции" и "Сигналы 1-Wire" (типы сигналов и их интервалы времени, или тайминг). Протокол 1-Wire определяет транзакции шины в терминах состояния шины в течение конкретных временных интервалов, которые инициируются на падающем фронте синхроимпульсов (их формирует master).
Аппаратная конфигурация. Шина 1-Wire по определению имеет только одну сигнальную линию. По этой причине каждое устройство на шине может управлять сигналом только в определенный подходящий момент времени. Чтобы это реализовать, каждое подключенное к шине устройство должно содержать в себе выходной ключ с открытым стоком, в результате чего становится возможным реализовать на выходе три состояния шины (лог. 0, лог. 1, отключено). Как раз такой 1-Wire порт в виде открытого стока и реализован у DS2431, его эквивалентная схема показана на рис. 8.
Многоточечная шина 1-Wire соединяет несколько подключенных параллельно slave-устройств и мастера шины. DS2431 поддерживает 2 режима скорости обмена: standard (15.4kbps max) и overdrive (125kbps max). Обратите внимание, что legacy-изделия 1-Wire поддерживают скорость standard 16.3kbps и overdrive 142kbps. Несколько меньшая скорость для DS2431 получается из-за дополнительных интервалов восстановления, которые в свою очередь были обусловлены повышением надежности физического интерфейса 1-Wire в плане устойчивости к помехам. Значение верхнего подтягивающего нагрузочного резистора шины (pullup) зависит главным образом от размера сети и условий нагрузки. DS2431 требует pullup 2.2kΩ (max) на любой скорости.
Состояние ожидания (idle) шины 1-Wire это лог. 1. Если по какой-то причине транзакция должна быть приостановлена, шина должна находиться в состоянии ожидания, если транзакция должна быть возобновлена. Не должно быть ситуации, когда шина находится в состоянии лог. 0 дольше чем 16 мкс (режим скорости overdrive) или дольше чем 120 мкс (режим скорости standard), иначе одно или несколько устройств могут быть сброшены.
Последовательность транзакции. Протокол доступа к DS2431 по шине 1-Wire следующий:
● Инициализация ● Команда функции ROM ● Команда функции памяти ● Транзакция/данные

Рис. 8. Аппаратная конфигурация.
Все транзакции на шине 1-Wire начинаются с последовательности инициализации. Последовательность инициализации состоит из импульса reset (лог. 0 длительностью tRSTL, 480 .. 640 мкс на скорости standard или 48 .. 80 мкс на скорости overdrive), формируемый мастером, за которым следует импульс (импульсы) присутствия (presence pulse), формируемый подчиненным устройством (устройствами). Presence pulse позволяет мастеру шины узнать, что на шине есть DS2431, и она готова к работе. Для дополнительной информации см. далее секцию "Сигналы 1-Wire".
[Команды функций ROM]
Как только мастер шины определил наличие импульса presence, он может выдать на шину 7 команд функции ROM, которые поддерживает DS2431. Все эти команды ROM имеют длину 8 бит. Список этих команд следующий (см. алгоритм на рис. 9).
Read ROM [33h]. Команда Read ROM позволяет мастеру шины прочитать из DS2431 её 8-разрядный family code, уникальный 48-разрядный серийный номер и 8-разрядную CRC. Эта команда может использоваться только если на шине находится единственное slave-устройство. Если на шине большее количество slave-устройств, то произойдет коллизия данных, когда все устройства одновременно начнут передавать свои данные (их открытый сток сформирует на шине результат логического элемента "монтажное И"). В такой ситуации family code и 48-разрядный серийный номер дадут неверный код контрольной суммы CRC.
Match ROM [55h]. Команда Match ROM, за который идет 64-разрядная последовательность ROM, позволяет мастеру шины адресовать определенное устройство DS2431, когда на шине их несколько. На последующую команду функции памяти ответит только то устройство DS2431, у которого точно совпала 64-разрядная последовательность ROM. Все другие slave-устройства будут ждать поступления импульса reset, и находится в состоянии ожидания. Эта команда может использоваться как с одним устройством на шине, так и с несколькими.
Search ROM [F0h]. Когда система включается, мастер шины может не знать количество устройств на шине или их регистрационные номера (64-битные ROM-последовательности, уникальные для любого устройства 1-Wire). Благодаря организации шины в виде "монтажного И" мастер шины может использовать процесс исключения для идентификации регистрационных номеров всех slave-устройств. Для каждого бита 64-разрядного регистрационного номера ROM, начиная с самого младшего значащего бита, мастер шины выдает триплет временных интервалов. В первом слоте каждое подчиненное устройство, участвующее в поиске, выводит истинное значение своего бита регистрационного номера. Во втором слоте каждое подчиненное устройство, участвующее в поиске, выводит дополненное (инвертированное) значение своего бита регистрационного номера. В третьем слоте master записывает верное значение выбранного бита. Все slave-устройства, у которых не совпал записанный третий бит, останавливают свое участие в поиске (переходят в состояние ожидания до момента импульса reset). Если оба считанные бита 0, то мастер знает, что на шине есть два устройства с обоими состояниями этого бита. При выборе, какое состояние записать, мастер шины производит ветвления по дереву возможных кодов ROM. После одного полного прохода мастер шины знает регистрационный номер одного устройства. Дополнительные проходы позволяют идентифицировать регистрационные номера остальных устройств. См. апноут [3], где подробно описан алгоритм поиска устройств, включая пример.
Skip ROM [CCh]. Эта команда позволяет экономить время доступа, когда к шине подключено только одно slave-устройство. Благодаря этому для использования функций памяти мастеру не нужно предоставлять 64-разрядный ROM-код. Если же на шине находится несколько починенных устройств, то при выдаче команды Skip ROM произойдет коллизия данных, потому что несколько устройств начнут передачу одновременно.
[]
Рис. 9. Алгоритм работы функций ROM.
Resume [A5h]. Для достижения максимальной пропускной способности в ситуации с несколькими подключенными slave-устройствами существует команда Resume. Эта команда проверяет состояние бита RC, и если он установлен, то передает напрямую управление командам функций памяти, подобно команде Skip ROM. Единственный способ установить бит RC - успешное выполнение команд Match ROM, Search ROM или Overdrive-Match ROM. Как только бит RC установлен, к устройству можно постоянно обращаться через команду Resume. Доступ к другому устройству на шине очистит бит RC, чем предотвращается ответ на команду Resume со стороны двух или большего количества slave-устройств.
Overdrive-Skip ROM [3Ch]. В ситуациях с одним slave-устройством на шине эта команда позволит экономить время доступа, позволяя мастеру использовать функции памяти без предоставления 64-разрядного ROM-кода. В отличие от обычной команды Skip ROM, команда Overdrive-Skip ROM установит DS2431 в режим overdrive (повышенная скорость, OD = 1). После этой команды весь обмен должен происходить на скорости overdrive, пока не поступит импульс reset длительностью не меньше 480 мкс, что сбросит slave-устройство на шине в режим скорости standard (OD = 0).
Когда эта команда выдана на шине с несколькими slave-устройствами, все поддерживающие режим overdrive переключатся на повышенную скорость. Для последующей адресации определенного поддерживающего overdrive устройства должен быть выдан импульс reset на скорости overdrive (лог. 0 длительностью 48 .. 80 мкс), за которым должна идти последовательность команды Match ROM или Search ROM. Это сокращает время процесса поиска. Если на шине присутствует несколько поддерживающих overdrive устройств, и после команды Overdrive-Skip ROM последует команда чтения, то произойдет коллизия на шине, потому что несколько устройств будут передавать данные одновременно.
Overdrive-Match ROM [69h]. Команда Overdrive-Match ROM, за которой идет 64-битная последовательность ROM-кода, переданная на скорости overdrive, позволяет мастеру шины адресовать определенное устройство DS2431, когда к шине подключено несколько slave-устройств, и они одновременно установлены в режим overdrive. На последующую команду функции памяти ответит только то устройство DS2431, у которого полностью совпал 64-битный ROM-код. Slave-устройства, уже находящиеся в режиме overdrive от предыдущей команды Overdrive-Skip ROM или успешной команды Overdrive-Match ROM, остаются в режиме overdrive. Все поддерживающие режим overdrive устройства возвратятся к скорости standard speed на следующем импульсе reset с минимальной длительностью 480 мкс. Команда Overdrive-Match ROM может использоваться и с одним, и с несколькими устройствами на шине.
Сигналы 1-Wire. DS2431 требует жестких протоколов для гарантии целостности данных. Эти протоколы состоят из 4 типов сигналов, передаваемых по одному проводу шины: последовательность сброса с импульсом reset и импульсом presence, запись 0 (write-zero), запись 1 (write-one) и чтение данных (read-data). За исключением импульса presence, мастер шины инициирует все спады уровня от 1 к 0. DS2431 может обмениваться данными на двух разных скоростях: standard и overdrive. Если явно не был установлен режим overdrive, то DS2431 работает на скорости standard. В режиме overdrive быстрые интервалы времени этого режима действуют для всех форм сигналов.
Чтобы перейти из режима ожидания в активный режим, напряжение на линии 1-Wire должно упасть с VPUP ниже порогового значения VTL. Чтобы перейти из активного состояния в состояние ожидания, напряжение должно подниматься от VILMAX выше порогового значения VTH. Время, необходимое для повышения напряжения, показано на рис. 10 как ε, и его продолжительность зависит от используемого резистора подтяжки (RPUP) и емкости подключенной 1-Wire сети. Напряжение VILMAX актуально для DS2431 при определении логического уровня, не вызывая никаких событий.
Рис. 10 показывает последовательность инициализации, требуемую для начала коммуникации с DS2431. Если за импульсом reset следует импульс presence, то это показывает для мастера, что DS2431 готово к приему данных корректных команд ROM и команд функций памяти. Если мастер использует управление скоростью спада уровня (slew-rate control on falling edge), то он должен подтянуть сигнал к лог. 0 на время tRSTL + tF для компенсации времени спада. Длительность импульса сброса tRSTL 480 мкс или больше приводит к выходу slave-устройства из режима overdrive (если он действовал), что гарантированно возвращает slave-устройство на скорость standard. Если DS2431 находится в режиме overdrive, и длительность tRSTL не больше 80 мкс, то устройство останется в режиме overdrive. Если устройство в режиме overdrive, и tRSTL в интервале между 80 мкс и 480 мкс, то устройство сбросится, но скорость обмена станет неопределенной.
После того, как master освободил шину, он переходит в режим приема. Теперь шина 1-Wire подтянута к уровню VPUP через pullup резистор, или в случае драйвера DS2482-x00 или DS2480B через активную схему. Когда произошел переход через порог VTH, DS2431 ждет в течение времени tPDH и затем передает импульс presence, подтягивая сигнал к лог. 0 на время tPDL. Для обнаружения импульса presence мастер должен проверить логическое состояние шины 1-Wire в момент tMSP.
Окно времени tRSTH должно как минимум быть суммой tPDHMAX, tPDLMAX и tRECMIN. Сразу после истечения tRSTH чип DS2431 готов к обмену данными. В сети со смешанным населением (когда к шине подключено несколько разных устройств) tRSTH должен быть расширен до минимум 480 мкс при скорости standard и 48 мкс при скорости overdrive для обслуживания других 1-Wire устройств.

Рис. 10. Процедура инициализации: импульс Reset и импульс Presence.
[Слоты времени чтения/записи]
Обмен данными с DS2431 происходит в специальных интервалах времени (тайм-слотах), каждый из которых передает один бит данных. Write-слот передает данные от master к slave (Master-to-Slave). Read-слот передает данные от slave к master (Slave-to-Master). Рис. 11 иллюстрирует определения тайм-слотов записи (write) и чтения (read).

Рис. 11. Диаграммы времени операций чтения/записи (Read/Write).
Все коммуникации начинаются, когда master подтягивает линию данных к лог. 0. Как только напряжение на линии 1-Wire упадет ниже порога VTL, чип DS2431 запустит свой внутренний генератор интервалов, который определяет, когда линия данных анализируется во время write-слота, и как долго данные остаются достоверными во время read-слота.
Master-to-Slave. Для тайм-слота записи единицы напряжение на линии данных должно превысить пороговое значение VTH до истечения tW1LMAX минимального времени записи. Для тайм-слота записи нуля напряжение на линии данных должно оставаться ниже порога VTH до тех пор, пока не истечет tW0LMIN минимального времени записи. Для наиболее надежной связи напряжение на линии передачи данных не должно превышать VILMAX в течение всего окна tW0L или tW1L. После того, как порог VTH был преодолен, чипу DS2431 требуется время восстановления tREC, прежде чем он будет готов к следующему тайм-слоту.
Slave-to-Master. Слот чтения начинается как слот записи единицы. Напряжение на линии передачи данных должно оставаться ниже VTL до тех пор, пока не истечет время tRL считывания. Во время окна tRL, когда устройство DS2431 отвечает битом 0, оно начинает подтягивать линию данных к лог. 0; внутренний генератор чипа DS2431 отвечает за то, когда эта подтяжка закончится, и уровень вернется к лог. 1. Когда устройство DS2431 отвечает битом 1, оно вообще не удерживает линию данных, оставляя её в лог. 1, и напряжение сразу переходит к лог. 1 после завершения интервала tRL.
Сумма интервалов tRL + δ (время нарастания) на одной стороне и внутреннего генератора синхронизации DS2431 на другой стороне определяет главное окно выборки (tMSRMIN - tMSRMAX), в котором мастер должен выполнить считывание сигнала данных. Для наиболее надежной связи tRL должен быть настолько коротким, насколько это допустимо, и мастер должен читать близко, но не позднее tMSRMAX. После считывания линии данных мастер должен дождаться истечения срока действия tSLOT. Это гарантирует достаточное время восстановления tREC для подготовки DS2431 к следующему временному интервалу. Обратите внимание, что tREC, указанный здесь, применяется только к одному DS2431, прикрепленному к линии 1-Wire. Для конфигураций с несколькими устройствами tREC должен быть расширен для размещения дополнительной входной емкости 1-Wire устройства. В качестве альтернативы можно использовать аппаратный интерфейс, который прикладывает активный pullup в течение 1-Wire времени восстановления, такой как 1-Wire линейные драйверы DS2482-x00 или DS2480B.
[Улучшенное поведение сети (гистерезис точки переключения)]
В рабочем физическом окружении 1-Wire терминирование линии данных возможно только во время переходных процессов, контролируемых мастером шины (1-Wire драйвером). Поэтому 1-Wire сети чувствительны к шуму различного происхождения. В зависимости от физического размера и топологии сети отражения от конечных точек и точек ответвления могут в некоторой степени складываться или отменять уровни друг друга. Такие отражения видны как глюки или звон на 1-Wire линии связи. Шум, поступающий на линию 1-Wire от внешних источников, также может привести к сбою сигнала. Сбой во время нарастающего фронта временного интервала может привести к тому, что подчиненное устройство потеряет синхронизацию с ведущим устройством, и как следствие приведет к тому, что команда Search ROM окажется в тупике или команда функции, специфичной для устройства, будет прервана. Для повышения производительности в сетевых приложениях DS2431 использует новый фронт-энд 1-Wire, что делает его менее чувствительным к шуму.
Фронт-энд DS2431 1-Wire отличается от традиционных slave-устройств тремя характеристиками.
1) Имеется дополнительная низкочастотная фильтрация в схеме, которая обнаруживает фронт падения в начале тайм-слота. Это снижает чувствительность к высокочастотным шумам. Эта дополнительная фильтрация не применяется на скорости overdrive.
2) Имеет место гистерезис при переходе порога VTH от 0 к 1. Если отрицательный паразитный импульс пересекает VTH, но не опускается ниже VTH - VHY, он не распознается (рис. 12, случай CASE A). Гистерезис эффективен при любой скорости 1-Wire.
3) Существует временное окно, определяемое временем удержания tREH переднего фронта, в течение которого сбои игнорируются, даже если они выходят ниже порога VTH - VHY (рис. 12, случай CASE B, tGL < tREH). Глубокие перепады напряжения или глюки, которые появляются поздно после пересечения порога VTH и выходят за пределы окна tREH, не могут быть отфильтрованы и принимаются за начало нового временного интервала (рис. 12, случай CASE C, tGL ≥ tREH).

Рис. 12. Схема подавления шума.
Устройства, имеющие указанные в своих электрических характеристиках параметры VHY и tREH, используют усовершенствованный 1-Wire front-end.
[Генерация CRC]
DS2431 использует 2 разных типа контрольных сумм CRC. Одна из них 8-битная, и сохраняется в самом старшем значащем байте 64-бит ROM-кода. Мастер шины может вычислить значение CRC от первых 56 бит от 64-битного ROM-кода и сравнить вычисленное значение со значением, сохраненным в DS2431, чтобы определить, что чтение данных ROM прошло без ошибок. Эквивалентная функция полинома у этой CRC: X8 + X5 + X4 + 1. Эта 8-битная CRC принимается в true-форме (без инверсии). Она вычисляется на заводе и прошивается в старший байт ROM-кода.
Другая CRC 16-битная, она генерируется по стандартизованной функции CRC-16 полинома X16 + X15 + X2 + 1. Эта CRC используется для быстрой проверки передачи данных при записи в scratchpad или чтении из scratchpad. В отличие от 8-битной CRC эта 16-битная CRC всегда вычисляется в инверсной форме. CRC-генератор внутри чипа DS2431 (рис. 13) вычисляет новую 16-битную CRC, как показано на диаграмме команды (рис. 7). Мастер шины сравнивает значение CRC, прочитанное из устройства со значением, вычисленным по данным, чтобы определить - продолжить ли операцию или заново перечитать порцию данных в случае ошибки CRC.

Рис. 13. Описание аппаратуры и полинома CRC-16.
С командой Write Scratchpad контрольная сумма CRC генерируется путем предварительной очистки генератора CRC, после чего вдвигается код команды, целевые адреса TA1 и TA2, и все байты данных, отправляемые мастером шины. DS2431 передает эту CRC только если E[2:0] = 111b.
С командой Read Scratchpad контрольная сумма CRC генерируется путем предварительной очистки генератора CRC, после чего вдвигается код команды, целевые адреса TA1 и TA2, байт E/S и данные scratchpad, как они отправляются чипом DS2431. DS2431 передает эту CRC только если чтение чтение продолжится после окончания чтения scratchpad. Для дополнительной информации по генерации CRC см. апноут 27 [4].
Легенда коммуникационного протокола 1-Wire, специфичная для команд:
СИМВОЛ |
ОПИСАНИЕ |
RST |
Импульс сброса (1-Wire reset pulse), генерируемый мастером шины. |
PD |
Импульс присутствия (1-Wire presence pulse) генерируемый slave-устройством. |
Select |
Команда и данные, удовлетворяющие протоколу функций ROM. |
WS |
Команда "Write Scratchpad". |
RS |
Команда "Read Scratchpad". |
CPS |
Команда "Copy Scratchpad". |
RM |
Команда "Read Memory". |
TA |
Целевой адрес (Target address) TA1, TA2. |
TA-E/S |
Целевой адрес TA1, TA2 с байтом E/S. |
< 8–T[2:0] bytes> |
Передача такого количества байт, сколько необходимо для достижения конца scratchpad для указанного целевого адреса. |
< Data to EOM> |
Передача такого количества байт, сколько необходимо до достижения конца адресного пространства. |
CRC-16 |
Передача инверсной CRC-16. |
FF Loop |
Неопределенный цикл, в котором мастер считывает байты FF. |
AA Loop |
Неопределенный цикл, в котором мастер считывает байты AA. |
Programming |
Передача данных в EEPROM; во время этого интервала не допускается активность на шине 1-Wire. |
Цветовые коды коммуникационного протокола 1-Wire:
Master → Slave |
Slave → Master |
Programming |
Примеры коммуникаций 1-Wire
Write Scratchpad (ошибки быть не может):
RST |
PD |
Select |
WS |
TA |
< 8–T[2:0] bytes> |
CRC-16 |
FF Loop |
Read Scratchpad (ошибки быть не может):
RST |
PD |
Select |
RS |
TA-E/S |
< 8–T[2:0] bytes> |
CRC-16 |
FF Loop |
Copy Scratchpad (успех):
RST |
PD |
Select |
CPS |
TA-E/S |
Programming |
AA Loop |
Copy Scratchpad (недопустимый адрес, или PF = 1, или Copy Protected):
RST |
PD |
Select |
CPS |
TA-E/S |
FF Loop |
Read Memory (успех):
RST |
PD |
Select |
RM |
TA |
< Data to EOM> |
FF Loop |
Read Memory (недопустимый адрес):
RST |
PD |
Select |
RM |
TA |
FF Loop |
[Пример использования функции памяти]
Запись первых 8 байт на страницу памяти 1. Чтение всей памяти. Когда к мастеру шины подключено только одна микросхема DS2431, коммуникация может выглядеть следующим образом:
Режим MASTER |
DATA (LSB идет первым) |
Комментарии |
Tx |
(Reset) |
Импульс сброса (reset) |
Rx |
(Presence) |
Импульс присутствия (presence) |
Tx |
CCh |
Команда Skip ROM |
Tx |
0Fh |
Команда Write Scratchpad |
Tx |
20h |
TA1, начальное смещение 20h |
Tx |
00h |
TA2, адрес = 0020h |
Tx |
< 8 Data Bytes> |
Запись 8 байт данных в scratchpad |
Rx |
< 2 Bytes CRC-16> |
Чтение CRC для проверки целостности данных |
Tx |
(Reset) |
Импульс сброса |
Rx |
(Presence) |
Импульс присутствия |
Tx |
CCh |
Команда Skip ROM |
Tx |
AAh |
Команда Read Scratchpad |
Rx |
20h |
Чтение TA1, начальное смещение 20h |
Rx |
00h |
Чтение TA2, адрес = 0020h |
Rx |
07h |
Чтение E/S, конечное смещение = 111b, AA, PF = 0 |
Rx |
< 8 Data Bytes> |
Чтение данных scratchpad и проверка |
Rx |
< 2 Bytes CRC-16> |
Чтение CRC для проверки целостности данных |
Tx |
(Reset) |
Импульс сброса |
Rx |
(Presence) |
Импульс присутствия |
Tx |
CCh |
Команда Skip ROM |
Tx |
55h |
Команда Copy Scratchpad |
Tx |
20h |
TA1 (код авторизации) |
Tx |
00h |
TA2 (код авторизации) |
Tx |
07h |
E/S (код авторизации) |
- |
< 1-Wire Idle High> |
Ожидание tPROGMAX для завершения функции копирования |
Rx |
AAh |
Чтение статуса копирования, AAh = успех |
Tx |
(Reset) |
Импульс сброса |
Rx |
(Presence) |
Импульс присутствия |
Tx |
CCh |
Команда Skip ROM |
Tx |
F0h |
Команда Read Memory |
Tx |
00h |
TA1, начальное смещение = 00h |
Tx |
00h |
TA2, адрес = 0000h |
Rx |
< 144 Data Bytes> |
Чтение всего адресного пространства памяти |
Tx |
(Reset) |
Импульс сброса |
Rx |
(Presence) |
Импульс присутствия |
[Ссылки]
1. DS2431 EEPROM. 2. Understanding and Using Cyclic Redundancy Checks with Maxim 1-Wire and iButton Products site:analog.com. 3. 1-Wire Search Algorithm site:analog.com. 4. Application Note 27 Understanding and Using Cyclic Redundancy Checks with Dallas Semiconductor iButton™ Products site:microshadow.com. |