An Arduino utility for the RW1990 rewriteable serial number touch memory

This project is hardware and software to read and write the RW1990.

The RW1990 is a rewriteable version of the Dallas DS1990 iButton.

The DS1990 Touch Memory (TM) contains a 64bit value read via the Dallas OneWire protocol, often used as an electronic serial number to uniquely identify a device. The serial number in the RW1990 can be rewritten.

Above, hardware is based on the inexpensive Arduino Nano. An iButton probe and 4k7 pullup resistor are wired to a header socket that mates with pins 2, 4 & 6 of the Nano's ISP header.

Above, housed in a small Jiffy box. This TM probe has a bicolour LED in it, connected to D12 and D13 (with 2k2 in series).

Write ID timing

The ID write to the RW1990 is with modified timing and data inversion.

The code has a write function which:

  1. resets the bus and reads the ID (command 0x33);
  2. resets the bus and sends the 0xD1 command followed by a write bit 1 at modified timing;
  3. resets the bus and sends the 0xD5 command followed by write of the 64 bit ID at modified timing;
  4. resets the bus and sends the 0xD1 command followed by a write bit 0 at modified timing;
  5. resets the bus and reads the ID (command 0x33);
  6. resets the bus and sends the 0x33 command followed by a write bit 1 at modified timing.

See the code for details, links below.

Above is a capture of the complete write pulse train.

Above is a capture of the activity up to the start of the ID write, 0xD1 command is at 67ms, 0xD5 command at 79ms, and then the bits of the ID at 1 bit per 10ms.

Above is a capture of the write bit 1 at modified timing.

Above is a capture of the write bit 0 at modified timing.

Above is a capture of the end of the ID write bits and the verify read back. The capture highlights the speed difference between the regular OneWire bus speed of more than 10kbps and the modified ID write timing of 100bps.

Code

The code is available on github. Note that it uses a modified OneWire lib which is also available on github.