Помогите с iButton

akarenin
Offline
Зарегистрирован: 25.11.2016

Заказал на АлиЭкспрессе десяток ключей, типа перепрограммируемые.
Никак не получается их перепрограммировать.
Пробовал разные исходники, н в какую!

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

Может кто уже наступал на эти грабли? Помогите!

akarenin
Offline
Зарегистрирован: 25.11.2016

Брал здесь:

https://ru.aliexpress.com/item/10pcs-lot-rewritable-RFID-Touch-Memory-key-RW1990-iButton-copy-card-Sauna-key/2048997749.html?spm=2114.13010608.0.0.0snzOF&detailNewVersion=&categoryId=303006

чип тип: RW1990

RW1990 особенность:

1. RW1990 ibutton
2. Низкая стоимость
3. water доказательство
4. Перезаписываемые, DS1990A и TM1990A iButton,
5. можно копировать, RW1990

техника Параметры:

. америка DALLAS шифрования

. Breakdown Rate: 1/100, 000

. серийный Номер: Только глобальные 64 битные числа

. системная Логика: 64 бит защиты pin-код

. память: 8kb ОЗУ

. индуктивный Тип: сенсорный

. R/W и шифрования

. R/W times: 1,500,000,000

. рабочая Температура:-40 ~ 85

. срок службы: > 20 лет

. ТМ Размер: Φ16. 25*5.89 мм

. вес: 6 г/шт.

akarenin
Offline
Зарегистрирован: 25.11.2016
#include <OneWire.h>

#define pin 10


  byte key_to_write[] = { 0x01, 0x19, 0x90, 0x00, 0x00, 0x00, 0x00, 0xFF }; //  


OneWire  ds(pin);  // pin 10 is 1-Wire interface pin now

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte data[8];

  delay(2000); // 1 sec
  
  ds.reset();
  delay(50);
  ds.write(0x33); // "READ" command
  
  ds.read_bytes(data, 8);

  Serial.print("KEY ");
  for( i = 0; i < 8; i++) {
    Serial.print(data[i], HEX);
    if (i != 7) Serial.print(":");
  }

  // Check if FF:FF:FF:FF:FF:FF:FF:FF
  // If your button is really programmed with FF:FF:FF:FF:FF:FF:FF:FF, then remove this check
  if (data[0] & data[1] & data[2] & data[3] & data[4] & data[5] & data[6] & data[7] == 0xFF)
  {
    Serial.println("...nothing found!"); 
    return;
  }

 // return; // remove when ready to programm ВОТ УБРАТЬ КОММЕНТ для считывания, поставить для записи

  // Check if read key is equal to the one to be programmed
  for (i = 0; i < 8; i++)
    if (data[i] != key_to_write[i])
      break;
    else
      if (i == 7)
      {
        Serial.println("...already programmed!");
        return;
      }

  Serial.println();
  Serial.print("Programming new key...");
  
  for (uint8_t i = 0; i < 8; i++)
  {
    ds.reset();
    data[0] = 0x3C; // "WRITE" command
    data[1] = i; // programming i-th byte
    data[2] = 0;
    data[3] = key_to_write[i];
    ds.write_bytes(data, 4);
    Serial.print(".");
  
    uint8_t crc = ds.read();
    
    if (OneWire::crc8(data, 4) != crc) {
        Serial.print("error!\r\n");
        return;
    }
    else
      Serial.print(".");
    
    send_programming_impulse();
  }
  
  Serial.println("done!");
}

void send_programming_impulse()
{
  pinMode(pin, OUTPUT);
  digitalWrite(pin, HIGH); 
  delay(60);
  digitalWrite(pin, LOW); 
  delay(5);
  digitalWrite(pin, HIGH); 
  delay(50); 
}

 

akarenin
Offline
Зарегистрирован: 25.11.2016

В мониторе порта говорит

Programming new key error

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

akarenin, сейчас нет времени смотреть, а через пару дней тебе отпишусь. У меня с первой библиотекой тоже не работало, потом скачал другую и заработало. В отзыве написано, что ключ перезаписываемый. Какое сопротивление у резистора?

MaximZ
Offline
Зарегистрирован: 24.03.2015

У меня ключевым моментом оказался резистор на 220 Ом при напряжении в 5 Вольт. Обязательно нужно скачать другую библиотеку OneWire

Попробуй разные варианты с резистором.

Ссылка https://yadi.sk/d/Eiqc1MWYmdQh3
Оттуда берешь библиотеку и заменяешь стандартную, которая вместе с IDE идет (это важно).

Вот мой скетч
 

/* 
 * тестируем работу по 1-Wire с ключём-таблеткой DS1990A
 */
 
#include <OneWire.h>

#define pin 10

byte key_to_write[] = { 0x01, 0x81, 0xBB, 0xB8, 0x0B, 0x00, 0x00, 0x93 };      

OneWire  ds(pin);  // pin 10 is 1-Wire interface pin now

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte data[8];

  delay(1000); // 1 sec
  
  ds.reset();
  delay(50);
  ds.write(0x33); // "READ" command
  
  ds.read_bytes(data, 8);

  Serial.print("KEY ");
  for( i = 0; i < 8; i++) {
    Serial.print(data[i], HEX);
    if (i != 7) Serial.print(":");
  }

  // Check if FF:FF:FF:FF:FF:FF:FF:FF
  // If your button is really programmed with FF:FF:FF:FF:FF:FF:FF:FF, then remove this check
  if (data[0] & data[1] & data[2] & data[3] & data[4] & data[5] & data[6] & data[7] == 0xFF)
  {
    Serial.println("...nothing found!"); 
    return;
  }


  // Check if read key is equal to the one to be programmed
  for (i = 0; i < 8; i++)
    if (data[i] != key_to_write[i])
      break;
    else
      if (i == 7)
      {
        Serial.println("...already programmed!");
        return;
      }

  Serial.println();
  Serial.print("Programming new key...");
  
  for (uint8_t i = 0; i < 8; i++)
  {
    ds.reset();
    data[0] = 0x3C; // "WRITE" command
    data[1] = i; // programming i-th byte
    data[2] = 0;
    data[3] = key_to_write[i];
    ds.write_bytes(data, 4);
    Serial.print(".");
  
    uint8_t crc = ds.read();
    send_programming_impulse();
    if (OneWire::crc8(data, 4) != crc) {
        Serial.print("error!\r\n");
                Serial.print(OneWire::crc8(data, 4));

        return;
    }
    else
      Serial.print(".");
    
    
  }
  
  Serial.println("done!");
}

void send_programming_impulse()
{
  pinMode(pin, OUTPUT);
  digitalWrite(pin, HIGH); 
  delay(60);
  digitalWrite(pin, LOW); 
  delay(5);
  digitalWrite(pin, HIGH); 
  delay(50); 
}

 

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Здесь видео https://www.youtube.com/watch?v=EB8YfLyd2Oc

Проверил, все работает, использовал сопротивление 2,2 кОм.

У автора видео - 240 Ом.

Обязательно переустанавливаем библиотеку OneWire как у автора видео

скетч и библиотека здесь https://yadi.sk/d/Eiqc1MWYmdQh3

akarenin
Offline
Зарегистрирован: 25.11.2016

Navigator

У Вас какие таблетки? Где куплены?
Похоже от этого многое зависит. Мои таблетки пока ничем не берутся, 240 ом еще не попробовал, видимо до выходных...

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

"Таблетки" RW1990, не покупал. Получил при установке домофона. 

При записи набирал малую букву "w".