Dependents:   1W-EEPROM

Committer:
Wimpie
Date:
Tue Jan 17 08:30:45 2012 +0000
Revision:
2:193926923cb0
Parent:
1:7218c076189b
readbyte readword

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wimpie 0:0f7bbfde44b7 1 /*
Wimpie 0:0f7bbfde44b7 2 * OneWireEEPROM. Library for Maxim One-Wire EEPROM.
Wimpie 0:0f7bbfde44b7 3 *
Wimpie 0:0f7bbfde44b7 4 * see http://www.maxim-ic.com
Wimpie 0:0f7bbfde44b7 5 *
Wimpie 0:0f7bbfde44b7 6 * DS2433
Wimpie 0:0f7bbfde44b7 7 * DS28EC20
Wimpie 0:0f7bbfde44b7 8 *
Wimpie 0:0f7bbfde44b7 9 * Copyright (C) <2011> Wim De Roeve <wim312@gmail.com>
Wimpie 0:0f7bbfde44b7 10 *
Wimpie 0:0f7bbfde44b7 11 * OneWireEEPROM is free software: you can redistribute it and/or modify
Wimpie 0:0f7bbfde44b7 12 * it under the terms of the GNU General Public License as published by
Wimpie 0:0f7bbfde44b7 13 * the Free Software Foundation, either version 3 of the License, or
Wimpie 0:0f7bbfde44b7 14 * (at your option) any later version.
Wimpie 0:0f7bbfde44b7 15 *
Wimpie 0:0f7bbfde44b7 16 * OneWireEEPROM is distributed in the hope that it will be useful,
Wimpie 0:0f7bbfde44b7 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Wimpie 0:0f7bbfde44b7 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Wimpie 0:0f7bbfde44b7 19 * GNU General Public License for more details.
Wimpie 0:0f7bbfde44b7 20 *
Wimpie 0:0f7bbfde44b7 21 * You should have received a copy of the GNU General Public License
Wimpie 0:0f7bbfde44b7 22 * If not, see <http://www.gnu.org/licenses/>.
Wimpie 0:0f7bbfde44b7 23 */
Wimpie 0:0f7bbfde44b7 24
Wimpie 0:0f7bbfde44b7 25 #include "mbed.h"
Wimpie 0:0f7bbfde44b7 26 #include "OneWireEEPROM.h"
Wimpie 0:0f7bbfde44b7 27
Wimpie 0:0f7bbfde44b7 28 Serial output(USBTX, USBRX);
Wimpie 0:0f7bbfde44b7 29
Wimpie 1:7218c076189b 30 OneWireEEPROM::OneWireEEPROM(PinName pin, bool crcOn, bool useAddr, bool parasitic, DSTYPE ds, unsigned char *ROMaddress)
Wimpie 0:0f7bbfde44b7 31 :oneWire(pin, STANDARD) {
Wimpie 0:0f7bbfde44b7 32 _useCRC=crcOn;
Wimpie 0:0f7bbfde44b7 33 _useAddress=useAddr;
Wimpie 0:0f7bbfde44b7 34 _useParasiticPower=parasitic;
Wimpie 0:0f7bbfde44b7 35 switch (ds) {
Wimpie 0:0f7bbfde44b7 36 case DS2433: {
Wimpie 0:0f7bbfde44b7 37 _pages = DS2433PAGES;
Wimpie 0:0f7bbfde44b7 38 _eeprom_id =DS2433EEPROM_ID;
Wimpie 0:0f7bbfde44b7 39 break;
Wimpie 0:0f7bbfde44b7 40 }
Wimpie 0:0f7bbfde44b7 41 case DS28EC20: {
Wimpie 0:0f7bbfde44b7 42 _pages =DS28EC20PAGES;
Wimpie 0:0f7bbfde44b7 43 _eeprom_id =DS28EC20EEPROM_ID;
Wimpie 0:0f7bbfde44b7 44 break;
Wimpie 0:0f7bbfde44b7 45 }
Wimpie 0:0f7bbfde44b7 46
Wimpie 0:0f7bbfde44b7 47 }
Wimpie 0:0f7bbfde44b7 48 _memsize = _pages * PAGESIZE;
Wimpie 1:7218c076189b 49
Wimpie 1:7218c076189b 50 if (_useAddress) {
Wimpie 1:7218c076189b 51 for (int i = 0; i < ADDRESS_SIZE; i++)
Wimpie 1:7218c076189b 52 _ROMCode[i]=ROMaddress[i];
Wimpie 1:7218c076189b 53 } else {
Wimpie 1:7218c076189b 54 for (int i = 0; i < ADDRESS_SIZE; i++)
Wimpie 1:7218c076189b 55 _ROMCode[i]=0;
Wimpie 1:7218c076189b 56 }
Wimpie 2:193926923cb0 57
Wimpie 2:193926923cb0 58 active=0;
Wimpie 0:0f7bbfde44b7 59 }
Wimpie 0:0f7bbfde44b7 60
Wimpie 0:0f7bbfde44b7 61
Wimpie 1:7218c076189b 62 bool OneWireEEPROM::Initialize() {
Wimpie 1:7218c076189b 63
Wimpie 1:7218c076189b 64 int OneWireFound;
Wimpie 1:7218c076189b 65 int OneWireSameAddress;
Wimpie 1:7218c076189b 66 int i;
Wimpie 1:7218c076189b 67 BYTE _dummyaddress[8];
Wimpie 1:7218c076189b 68
Wimpie 0:0f7bbfde44b7 69
Wimpie 1:7218c076189b 70 if (_useAddress) {
Wimpie 1:7218c076189b 71 output.printf("\r\nScan for device with address ");
Wimpie 1:7218c076189b 72 for (i = 0; i < ADDRESS_SIZE; i++) {
Wimpie 1:7218c076189b 73 output.printf("%x ", (int)_ROMCode[i]);
Wimpie 1:7218c076189b 74 }
Wimpie 1:7218c076189b 75 output.printf("\r\n");
Wimpie 1:7218c076189b 76 }
Wimpie 0:0f7bbfde44b7 77
Wimpie 1:7218c076189b 78 OneWireSameAddress=0;
Wimpie 0:0f7bbfde44b7 79
Wimpie 0:0f7bbfde44b7 80 oneWire.resetSearch();
Wimpie 1:7218c076189b 81 do {
Wimpie 1:7218c076189b 82 OneWireFound=(oneWire.search(_dummyaddress));
Wimpie 1:7218c076189b 83 if (OneWireFound) {
Wimpie 1:7218c076189b 84
Wimpie 1:7218c076189b 85 if (!_useAddress) {
Wimpie 1:7218c076189b 86 output.printf("Device found with Address = ");
Wimpie 1:7218c076189b 87 for (i = 0; i < ADDRESS_SIZE; i++) {
Wimpie 1:7218c076189b 88 output.printf("%x ", (int)_dummyaddress[i]);
Wimpie 1:7218c076189b 89 }
Wimpie 1:7218c076189b 90 }
Wimpie 1:7218c076189b 91
Wimpie 1:7218c076189b 92 OneWireSameAddress=1;
Wimpie 1:7218c076189b 93
Wimpie 1:7218c076189b 94 if (_useAddress) {
Wimpie 1:7218c076189b 95 for (i = 0; i < ADDRESS_SIZE; i++) {
Wimpie 1:7218c076189b 96 if (!((OneWireSameAddress) && (_ROMCode[i] ==_dummyaddress[i])))
Wimpie 1:7218c076189b 97 OneWireSameAddress=0;
Wimpie 1:7218c076189b 98 }
Wimpie 1:7218c076189b 99 } else {
Wimpie 1:7218c076189b 100 for (i = 0; i < ADDRESS_SIZE; i++) {
Wimpie 1:7218c076189b 101 _ROMCode[i] =_dummyaddress[i];
Wimpie 1:7218c076189b 102 }
Wimpie 1:7218c076189b 103 }
Wimpie 1:7218c076189b 104
Wimpie 1:7218c076189b 105
Wimpie 1:7218c076189b 106 /*if (OneWireSameAddress) {
Wimpie 1:7218c076189b 107 output.printf("-> Address valid!\r\n");
Wimpie 1:7218c076189b 108
Wimpie 1:7218c076189b 109 } else {
Wimpie 1:7218c076189b 110
Wimpie 1:7218c076189b 111 }*/
Wimpie 1:7218c076189b 112
Wimpie 1:7218c076189b 113 } else {
Wimpie 1:7218c076189b 114
Wimpie 1:7218c076189b 115 output.printf("No more addresses.\r\n");
Wimpie 1:7218c076189b 116 oneWire.resetSearch();
Wimpie 1:7218c076189b 117 wait_ms(250); //500
Wimpie 1:7218c076189b 118 }
Wimpie 1:7218c076189b 119 } while (OneWireFound && !OneWireSameAddress);
Wimpie 1:7218c076189b 120
Wimpie 1:7218c076189b 121 if (!OneWireSameAddress) {
Wimpie 1:7218c076189b 122 output.printf("-> No Valid ROM Code found.\r\n");
Wimpie 0:0f7bbfde44b7 123 return false;
Wimpie 0:0f7bbfde44b7 124 }
Wimpie 1:7218c076189b 125 if (OneWireCRC::crc8(_ROMCode, ADDRESS_CRC_BYTE) != _ROMCode[ADDRESS_CRC_BYTE]) { // check address CRC is valid
Wimpie 0:0f7bbfde44b7 126 output.printf("CRC is not valid!\r\n");
Wimpie 0:0f7bbfde44b7 127 wait_ms(100);
Wimpie 0:0f7bbfde44b7 128
Wimpie 0:0f7bbfde44b7 129 return false;
Wimpie 0:0f7bbfde44b7 130 }
Wimpie 0:0f7bbfde44b7 131
Wimpie 1:7218c076189b 132 if (_ROMCode[0] != _eeprom_id) {
Wimpie 0:0f7bbfde44b7 133 output.printf("Device is not a OneWireEEPROM_ID device.\r\n");
Wimpie 0:0f7bbfde44b7 134 wait_ms(100);
Wimpie 0:0f7bbfde44b7 135 return false;
Wimpie 1:7218c076189b 136
Wimpie 1:7218c076189b 137 } else {
Wimpie 1:7218c076189b 138 output.printf("OneWireEEPROM present and correct.\r\n");
Wimpie 0:0f7bbfde44b7 139 }
Wimpie 2:193926923cb0 140 active=1;
Wimpie 1:7218c076189b 141 return true;
Wimpie 0:0f7bbfde44b7 142 }
Wimpie 0:0f7bbfde44b7 143
Wimpie 0:0f7bbfde44b7 144 void OneWireEEPROM::ResetAndAddress() {
Wimpie 0:0f7bbfde44b7 145 oneWire.reset(); // reset device
Wimpie 0:0f7bbfde44b7 146 if (_useAddress) {
Wimpie 1:7218c076189b 147 oneWire.matchROM(_ROMCode); // select which device to talk to
Wimpie 0:0f7bbfde44b7 148 } else {
Wimpie 0:0f7bbfde44b7 149 oneWire.skipROM(); // broadcast
Wimpie 0:0f7bbfde44b7 150 }
Wimpie 0:0f7bbfde44b7 151 }
Wimpie 0:0f7bbfde44b7 152
Wimpie 0:0f7bbfde44b7 153 bool OneWireEEPROM::WriteMemory(uint8_t* Source, uint16_t Address, uint8_t Size) {
Wimpie 0:0f7bbfde44b7 154 uint8_t _ES; //store Endif Address , datastatus
Wimpie 0:0f7bbfde44b7 155 uint8_t B;
Wimpie 0:0f7bbfde44b7 156
Wimpie 0:0f7bbfde44b7 157 if (Address<_memsize) {
Wimpie 0:0f7bbfde44b7 158 uint8_t _TA1=(uint8_t)(Address & 0x00FF);
Wimpie 0:0f7bbfde44b7 159 uint8_t _TA2=(uint8_t)((Address & 0xFF00)>>8);
Wimpie 0:0f7bbfde44b7 160
Wimpie 0:0f7bbfde44b7 161 if ((Size<=PAGESIZE) and ((Size+Address)<=_memsize)) {
Wimpie 0:0f7bbfde44b7 162
Wimpie 1:7218c076189b 163 // output.printf ("\r\nWriting to OneWireEEPROM %i Bytes",Size);
Wimpie 0:0f7bbfde44b7 164
Wimpie 0:0f7bbfde44b7 165 ResetAndAddress();
Wimpie 0:0f7bbfde44b7 166 oneWire.writeByte(WRITESCRATCHPAD);
Wimpie 0:0f7bbfde44b7 167 oneWire.writeByte(_TA1); //begin address T7..T0
Wimpie 0:0f7bbfde44b7 168 oneWire.writeByte(_TA2); //begin address T15..T8
Wimpie 0:0f7bbfde44b7 169
Wimpie 0:0f7bbfde44b7 170 //write _memPage to scratchpad
Wimpie 0:0f7bbfde44b7 171
Wimpie 0:0f7bbfde44b7 172 for (int i = 0; i < Size; i++) {
Wimpie 0:0f7bbfde44b7 173 oneWire.writeByte(Source[i]);
Wimpie 1:7218c076189b 174 // output.printf ("%X ",Source[i]);
Wimpie 0:0f7bbfde44b7 175 }
Wimpie 1:7218c076189b 176 // output.printf ("\r\nTA1=%X",_TA1);
Wimpie 1:7218c076189b 177 // output.printf ("\r\nTA2=%X\r\n",_TA2);
Wimpie 0:0f7bbfde44b7 178
Wimpie 0:0f7bbfde44b7 179 //read and check data in scratchpad
Wimpie 0:0f7bbfde44b7 180 ResetAndAddress();
Wimpie 0:0f7bbfde44b7 181 oneWire.writeByte(READSCRATCHPAD);
Wimpie 0:0f7bbfde44b7 182 B=oneWire.readByte();
Wimpie 0:0f7bbfde44b7 183 if (B != _TA1) { //check TA1, return if bad
Wimpie 0:0f7bbfde44b7 184 output.printf("\r\nWrite error in TA1 %X - %X\r\n",B,_TA1);
Wimpie 0:0f7bbfde44b7 185 return false;
Wimpie 0:0f7bbfde44b7 186 }
Wimpie 0:0f7bbfde44b7 187 B=oneWire.readByte();
Wimpie 0:0f7bbfde44b7 188 if (B != _TA2) { //check TA2, return if bad
Wimpie 0:0f7bbfde44b7 189 output.printf("\r\nWrite error in TA2 %X - %X\r\n",B,_TA2);
Wimpie 0:0f7bbfde44b7 190 return false;
Wimpie 0:0f7bbfde44b7 191 }
Wimpie 0:0f7bbfde44b7 192 _ES = oneWire.readByte(); // ES Register
Wimpie 0:0f7bbfde44b7 193
Wimpie 0:0f7bbfde44b7 194 //check data written
Wimpie 0:0f7bbfde44b7 195 for (int i = 0; i < Size; i++) {
Wimpie 0:0f7bbfde44b7 196 B=oneWire.readByte();
Wimpie 0:0f7bbfde44b7 197 if (B != Source[i]) { //return if bad
Wimpie 0:0f7bbfde44b7 198 output.printf("\r\nWrite error in scratchpad on %i %X<->%X\r\n",i,B ,Source[i]);
Wimpie 0:0f7bbfde44b7 199 return false;
Wimpie 0:0f7bbfde44b7 200 }
Wimpie 0:0f7bbfde44b7 201 }
Wimpie 0:0f7bbfde44b7 202
Wimpie 1:7218c076189b 203 // output.printf("\r\nES=%X\r\n",_ES);
Wimpie 0:0f7bbfde44b7 204
Wimpie 0:0f7bbfde44b7 205 //issue copy with auth data
Wimpie 0:0f7bbfde44b7 206 wait_ms(10);
Wimpie 0:0f7bbfde44b7 207 ResetAndAddress();
Wimpie 0:0f7bbfde44b7 208 oneWire.writeByte(COPYSCRATCHPAD);
Wimpie 0:0f7bbfde44b7 209 oneWire.writeByte(_TA1);
Wimpie 0:0f7bbfde44b7 210 oneWire.writeByte(_TA2);
Wimpie 0:0f7bbfde44b7 211 oneWire.writeByte(_ES); //pull-up!
Wimpie 0:0f7bbfde44b7 212 wait_ms(10); //10ms min strong pullup delay -> time needed to copy from scratchpad to memory
Wimpie 0:0f7bbfde44b7 213
Wimpie 0:0f7bbfde44b7 214 oneWire.reset();
Wimpie 0:0f7bbfde44b7 215
Wimpie 1:7218c076189b 216 // output.printf ("\r\nData written\r\n");
Wimpie 0:0f7bbfde44b7 217 return true;
Wimpie 0:0f7bbfde44b7 218 } else {
Wimpie 0:0f7bbfde44b7 219 output.printf ("\r\nTrying to write more then %i bytes-> %i\r\n",PAGESIZE,Size);
Wimpie 0:0f7bbfde44b7 220 return false;
Wimpie 0:0f7bbfde44b7 221 }
Wimpie 0:0f7bbfde44b7 222 } else {
Wimpie 0:0f7bbfde44b7 223 output.printf ("\r\nAddress %X not available, EEPROM isn't that bigg..-> %i\r\n",Address);
Wimpie 0:0f7bbfde44b7 224 return false;
Wimpie 0:0f7bbfde44b7 225 }
Wimpie 0:0f7bbfde44b7 226 }
Wimpie 0:0f7bbfde44b7 227
Wimpie 0:0f7bbfde44b7 228
Wimpie 0:0f7bbfde44b7 229 int OneWireEEPROM::ReadMemory(uint8_t* Destination, uint16_t Address, uint16_t Size) {
Wimpie 0:0f7bbfde44b7 230 uint8_t tmpReader;
Wimpie 1:7218c076189b 231 // bool readFF = 0;
Wimpie 0:0f7bbfde44b7 232 int memPtr;
Wimpie 0:0f7bbfde44b7 233
Wimpie 0:0f7bbfde44b7 234 if (Address<_memsize) {
Wimpie 0:0f7bbfde44b7 235
Wimpie 0:0f7bbfde44b7 236 uint8_t _TA1=(uint8_t)(Address & 0x00FF);
Wimpie 0:0f7bbfde44b7 237 uint8_t _TA2=(uint8_t)((Address & 0xFF00)>>8);
Wimpie 0:0f7bbfde44b7 238
Wimpie 0:0f7bbfde44b7 239 if ((Size+Address)<=_memsize) {
Wimpie 0:0f7bbfde44b7 240
Wimpie 0:0f7bbfde44b7 241 ResetAndAddress();
Wimpie 0:0f7bbfde44b7 242 oneWire.writeByte(READMEMORY);
Wimpie 0:0f7bbfde44b7 243 oneWire.writeByte(_TA1);
Wimpie 0:0f7bbfde44b7 244 oneWire.writeByte(_TA2);
Wimpie 0:0f7bbfde44b7 245
Wimpie 2:193926923cb0 246 // output.printf ("\r\nReading... TA1=%X TA2=%X",_TA1, _TA2);
Wimpie 0:0f7bbfde44b7 247
Wimpie 0:0f7bbfde44b7 248 for (memPtr = 0; memPtr < Size; memPtr++) {
Wimpie 0:0f7bbfde44b7 249 tmpReader = oneWire.readByte();
Wimpie 1:7218c076189b 250 // if (tmpReader == 0xff & !readFF)
Wimpie 1:7218c076189b 251 // readFF = 1;
Wimpie 1:7218c076189b 252 // else if (tmpReader == 0xff & readFF)
Wimpie 1:7218c076189b 253 // 0xff read twice, hopefully EoF as we break here :)
Wimpie 1:7218c076189b 254 // break;
Wimpie 0:0f7bbfde44b7 255
Wimpie 0:0f7bbfde44b7 256 Destination[memPtr] = tmpReader;
Wimpie 0:0f7bbfde44b7 257 }
Wimpie 2:193926923cb0 258 // output.printf ("-> %i byte(s)\r\n",memPtr);
Wimpie 0:0f7bbfde44b7 259 return memPtr;
Wimpie 0:0f7bbfde44b7 260
Wimpie 0:0f7bbfde44b7 261 } else {
Wimpie 0:0f7bbfde44b7 262 output.printf ("\r\nTrying to read outside MEMORY -> %i\r\n",Address+Size);
Wimpie 0:0f7bbfde44b7 263 return 0;
Wimpie 0:0f7bbfde44b7 264 }
Wimpie 0:0f7bbfde44b7 265 } else {
Wimpie 0:0f7bbfde44b7 266 output.printf ("\r\nAddress %X not available, EEPROM isn't that bigg..-> %i\r\n",Address);
Wimpie 0:0f7bbfde44b7 267 return 0;
Wimpie 0:0f7bbfde44b7 268 }
Wimpie 0:0f7bbfde44b7 269 }
Wimpie 0:0f7bbfde44b7 270
Wimpie 0:0f7bbfde44b7 271 void OneWireEEPROM::ShowMemory(int PageFrom, int PageTo) {
Wimpie 0:0f7bbfde44b7 272 int Size;
Wimpie 1:7218c076189b 273 int MemSize;
Wimpie 1:7218c076189b 274
Wimpie 1:7218c076189b 275 if (PageFrom<0)
Wimpie 1:7218c076189b 276 PageFrom=0;
Wimpie 1:7218c076189b 277 if (PageTo>=_pages)
Wimpie 1:7218c076189b 278 PageTo=_pages-1;
Wimpie 1:7218c076189b 279
Wimpie 0:0f7bbfde44b7 280 if ((PageFrom>=0) and (PageFrom<_pages) and
Wimpie 0:0f7bbfde44b7 281 (PageTo>=0) and (PageTo<_pages)) {
Wimpie 0:0f7bbfde44b7 282
Wimpie 1:7218c076189b 283 MemSize=(PageTo-PageFrom+1)*PAGESIZE;
Wimpie 1:7218c076189b 284
Wimpie 1:7218c076189b 285 uint8_t *MemAll = (uint8_t*) malloc(MemSize);
Wimpie 0:0f7bbfde44b7 286
Wimpie 1:7218c076189b 287 if (MemAll!=NULL) {
Wimpie 1:7218c076189b 288 output.printf ("\r\nRead Page(s) from EEPROM %i to %i -> ", PageFrom,PageTo);
Wimpie 0:0f7bbfde44b7 289
Wimpie 1:7218c076189b 290 Size=ReadMemory(MemAll,PageFrom*PAGESIZE,MemSize);
Wimpie 1:7218c076189b 291
Wimpie 1:7218c076189b 292 output.printf("%i bytes\r\n ",Size);
Wimpie 0:0f7bbfde44b7 293
Wimpie 1:7218c076189b 294 for (int j=PageFrom;j<=PageTo;j++) {
Wimpie 1:7218c076189b 295 output.printf ("\r\nPage %2i ->",j);
Wimpie 1:7218c076189b 296 for (int i=0;i<PAGESIZE;i++) {
Wimpie 1:7218c076189b 297 if ((j*32+i)<= Size)
Wimpie 1:7218c076189b 298 output.printf("%2X ",MemAll[j*32+i]);
Wimpie 1:7218c076189b 299 }
Wimpie 1:7218c076189b 300 if ((j*32)>Size)
Wimpie 1:7218c076189b 301 break;
Wimpie 0:0f7bbfde44b7 302 }
Wimpie 1:7218c076189b 303 output.printf ("\r\n");
Wimpie 0:0f7bbfde44b7 304
Wimpie 1:7218c076189b 305 free(MemAll);
Wimpie 1:7218c076189b 306 } else
Wimpie 1:7218c076189b 307 output.printf ("\r\nNOT enough memory to display EEPROM content !!\r\n");
Wimpie 0:0f7bbfde44b7 308 }
Wimpie 0:0f7bbfde44b7 309 }
Wimpie 0:0f7bbfde44b7 310
Wimpie 1:7218c076189b 311 bool OneWireEEPROM::WriteWord(uint16_t v, uint16_t Address) {
Wimpie 2:193926923cb0 312 bool ok=false;
Wimpie 2:193926923cb0 313 int it=0;
Wimpie 1:7218c076189b 314 uint8_t Mem[2];
Wimpie 1:7218c076189b 315 Mem[0]=(uint8_t)(v & 0x00FF);
Wimpie 1:7218c076189b 316 Mem[1]=(uint8_t)((v & 0xFF00)>>8);
Wimpie 2:193926923cb0 317
Wimpie 2:193926923cb0 318 do {
Wimpie 2:193926923cb0 319 ok=WriteMemory(Mem,Address,2);
Wimpie 2:193926923cb0 320 it++;
Wimpie 2:193926923cb0 321 } while ((ok==false) && (it<5));
Wimpie 2:193926923cb0 322 if (it>1) {
Wimpie 2:193926923cb0 323 output.printf (" EEPROM WriteWord %i times ->",it);
Wimpie 2:193926923cb0 324 if (ok)
Wimpie 2:193926923cb0 325 output.printf("ok\r\n");
Wimpie 2:193926923cb0 326 else
Wimpie 2:193926923cb0 327 output.printf("not ok\r\n");
Wimpie 2:193926923cb0 328 }
Wimpie 2:193926923cb0 329 return ok;
Wimpie 1:7218c076189b 330 }
Wimpie 1:7218c076189b 331
Wimpie 1:7218c076189b 332 bool OneWireEEPROM::WriteByte(uint8_t b, uint16_t Address) {
Wimpie 2:193926923cb0 333 bool ok=false;
Wimpie 2:193926923cb0 334 int it=0;
Wimpie 1:7218c076189b 335 uint8_t Mem[1];
Wimpie 1:7218c076189b 336 Mem[0]=(uint8_t)(b & 0x00FF);
Wimpie 2:193926923cb0 337 do {
Wimpie 2:193926923cb0 338 ok=WriteMemory(Mem,Address,1);
Wimpie 2:193926923cb0 339 it++;
Wimpie 2:193926923cb0 340 } while ((ok==false) && (it<5));
Wimpie 2:193926923cb0 341 if (it>1) {
Wimpie 2:193926923cb0 342 output.printf (" EEPROM WriteByte %i times ->",it);
Wimpie 2:193926923cb0 343 if (ok)
Wimpie 2:193926923cb0 344 output.printf("ok\r\n");
Wimpie 2:193926923cb0 345 else
Wimpie 2:193926923cb0 346 output.printf("not ok\r\n");
Wimpie 2:193926923cb0 347 }
Wimpie 2:193926923cb0 348 return ok;
Wimpie 2:193926923cb0 349 }
Wimpie 2:193926923cb0 350
Wimpie 2:193926923cb0 351 uint16_t OneWireEEPROM::ReadWord(uint16_t Address) {
Wimpie 2:193926923cb0 352 int size;
Wimpie 2:193926923cb0 353 int it=0;
Wimpie 2:193926923cb0 354
Wimpie 2:193926923cb0 355 uint8_t Mem[2];
Wimpie 2:193926923cb0 356 do {
Wimpie 2:193926923cb0 357 size=ReadMemory(Mem,Address,2);
Wimpie 2:193926923cb0 358 it++;
Wimpie 2:193926923cb0 359 } while ((size==0) && (it<5));
Wimpie 2:193926923cb0 360 // output.printf ("%i %i \r\n",Mem[0],Mem[1]);
Wimpie 2:193926923cb0 361 if (it>1) {
Wimpie 2:193926923cb0 362 output.printf (" EEPROM ReadWord %i times ->",it);
Wimpie 2:193926923cb0 363 if (size>0)
Wimpie 2:193926923cb0 364 output.printf("ok\r\n");
Wimpie 2:193926923cb0 365 else
Wimpie 2:193926923cb0 366 output.printf("not ok\r\n");
Wimpie 2:193926923cb0 367 }
Wimpie 2:193926923cb0 368 return (uint16_t)Mem[0] + (uint16_t) (Mem[1]<<8);
Wimpie 2:193926923cb0 369 }
Wimpie 2:193926923cb0 370
Wimpie 2:193926923cb0 371 uint8_t OneWireEEPROM::ReadByte(uint8_t Address) {
Wimpie 2:193926923cb0 372 int size;
Wimpie 2:193926923cb0 373 int it=0;
Wimpie 2:193926923cb0 374 uint8_t Mem[1];
Wimpie 2:193926923cb0 375 do {
Wimpie 2:193926923cb0 376 size=ReadMemory(Mem,Address,1);
Wimpie 2:193926923cb0 377 it++;
Wimpie 2:193926923cb0 378 } while ((size==0) && (it<5));
Wimpie 2:193926923cb0 379 // output.printf ("%i \r\n",Mem[0]);
Wimpie 2:193926923cb0 380 if (it>1) {
Wimpie 2:193926923cb0 381 output.printf (" EEPROM ReadByte %i times ->",it);
Wimpie 2:193926923cb0 382 if (size>0)
Wimpie 2:193926923cb0 383 output.printf("ok\r\n");
Wimpie 2:193926923cb0 384 else
Wimpie 2:193926923cb0 385 output.printf("not ok\r\n");
Wimpie 2:193926923cb0 386 }
Wimpie 2:193926923cb0 387 return (uint8_t) Mem[0];
Wimpie 1:7218c076189b 388 }