1 | #include <OneWire.h>
|
2 |
|
3 | OneWire ds(11); // 1-wire on pin 2
|
4 | byte addr[8]; // Contains the eeprom unique ID
|
5 | void setup(void)
|
6 | {
|
7 | Serial.begin(57600);
|
8 | }
|
9 |
|
10 | void loop(void)
|
11 | {
|
12 | byte i;
|
13 | byte dat[13];
|
14 |
|
15 | SearchAddress(addr);
|
16 |
|
17 | dat[0] = 0x01;
|
18 | dat[1] = 0x02;
|
19 | dat[2] = 0x03;
|
20 | dat[3] = 0x04;
|
21 | dat[4] = 0x05;
|
22 | dat[5] = 0x06;
|
23 | dat[6] = 0x07;
|
24 | dat[7] = 0x08;
|
25 |
|
26 | WriteRow(0,dat);
|
27 | ReadAllMem(); //print all mem content
|
28 |
|
29 | while(1);
|
30 | }
|
31 |
|
32 | void SearchAddress(byte* address) //Search for address and confirm it
|
33 | {
|
34 | int i;
|
35 | if ( !ds.search(address))
|
36 | {
|
37 | Serial.print("No device found.\n");
|
38 | ds.reset_search();
|
39 | delay(250);
|
40 | return;
|
41 | }
|
42 |
|
43 | Serial.print("ADDR= ");
|
44 | for( i = 0; i < 8; i++)
|
45 | {
|
46 | Serial.print(address[i], HEX);
|
47 | Serial.print(" ");
|
48 | }
|
49 |
|
50 | if ( OneWire::crc8( address, 7) != address[7])
|
51 | {
|
52 | Serial.print("CRC is not valid, address is corrupted\n");
|
53 | return;
|
54 | }
|
55 |
|
56 | if ( address[0] != 0x2D)
|
57 | {
|
58 | Serial.print("Device is not a 1-wire Eeprom.\n");
|
59 | return;
|
60 | }
|
61 | Serial.println();
|
62 | }
|
63 |
|
64 | void WriteReadScratchPad(byte TA1, byte TA2, byte* data)
|
65 | {
|
66 | int i;
|
67 | ds.reset();
|
68 | ds.select(addr);
|
69 | ds.write(0x0F,1); // Write ScratchPad
|
70 | ds.write(TA1,1);
|
71 | ds.write(TA2,1);
|
72 | for ( i = 0; i < 8; i++)
|
73 | ds.write(data[i],1);
|
74 |
|
75 | ds.reset();
|
76 | ds.select(addr);
|
77 | ds.write(0xAA); // Read Scratchpad
|
78 |
|
79 | for ( i = 0; i < 13; i++)
|
80 | data[i] = ds.read();
|
81 | }
|
82 |
|
83 | void CopyScratchPad(byte* data)
|
84 | {
|
85 | ds.reset();
|
86 | ds.select(addr);
|
87 | ds.write(0x55,1); // Copy ScratchPad
|
88 | ds.write(data[0],1);
|
89 | ds.write(data[1],1); // Send TA1 TA2 and ES for copy authorization
|
90 | ds.write(data[2],1);
|
91 | delay(25); // Waiting for copy completion
|
92 | //Serial.print("Copy done!\n");
|
93 | }
|
94 |
|
95 | void ReadAllMem()
|
96 | {
|
97 | int i;
|
98 | ds.reset();
|
99 | ds.select(addr);
|
100 | ds.write(0xF0,1); // Read Memory
|
101 | ds.write(0x00,1); //Read Offset 0000h
|
102 | ds.write(0x00,1);
|
103 |
|
104 | for ( i = 0; i < 128; i++) //whole mem is 144
|
105 | {
|
106 | Serial.print(ds.read(), HEX);
|
107 | Serial.print(" ");
|
108 | }
|
109 | Serial.println();
|
110 | }
|
111 |
|
112 | void WriteRow(byte row, byte* buffer)
|
113 | {
|
114 | int i;
|
115 | if (row < 0 || row > 15) //There are 16 row of 8 bytes in the main memory
|
116 | return; //The remaining are for the 64 bits register page
|
117 |
|
118 | WriteReadScratchPad(row*8, 0x00, buffer);
|
119 |
|
120 | // Print result of the ReadScratchPad
|
121 | for ( i = 0; i < 13; i++)
|
122 | {
|
123 | Serial.print(buffer[i], HEX);
|
124 | Serial.print(" ");
|
125 |
|
126 | }
|
127 |
|
128 | CopyScratchPad(buffer);
|
129 |
|
130 | }
|