1-wire EEPROM DS2431: не удаётся записать protection byr

noname1234
Offline
Зарегистрирован: 03.05.2016

Привет, друзья, кто работал с DS2431, выручайте: как записать последнюю строку с protection bytes (0080h — 0087h: 4 protection bytes, 1 copy protection byte, 1 factory byte, 2 user bytes)?

С памятью работаю этим кодом: http://arduino.ru/forum/programmirovanie/ds2431-zapis-i-chtenie. Всё работает идеально, за исключением последней строки памяти.

Байты пишутся порциями по 8 байт. С остальными строками ясно, а как быть с последней строкой? (где байт 0085h только для чтения — Factory Byte. Set at Factory).

В чистой памяти картина получается такая:

XX| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 
--+------------------------------------------------ 
  | <...>
80| 00 00 00 00 00 55 00 00 >>>>>>>>>>>>>>>reserved

Пробовал записывать как 00 00 00 00 00 55 00 00 (вместо нулей какие-то значения), или просто без 55, ничего не записывает :с

Код исправный (если принудительно поменять строку записи в коде, то всё запишется, но не в последнюю строку).

Даташит https://datasheets.maximintegrated.com/en/ds/DS2431.pdf изучил, никаких особенностей записи последней строки нет.

noname1234
Offline
Зарегистрирован: 03.05.2016

Кажется что-то пошло не так и заголовок темы сломался :))

Должно быть "1-wire EEPROM DS2431: не удаётся записать protection byеtes") Самому не исправить.

noname1234
Offline
Зарегистрирован: 03.05.2016

Всё, разобрался сам. Стоит только озвучить проблему, сразу смотришь на всё с другой стороны :)

В коде по этой ссылке http://arduino.ru/forum/programmirovanie/ds2431-zapis-i-chtenie в функции void WriteRow(сразу происходит проверка, чтобы строка была от 0 до 15. А я же пытался стучаться в 16. Такие дела. Достаточно исправить 15 на 16.