1-Wire® library for mbed. Complete 1-Wire library that supports our silicon masters along with a bit-bang master on the MAX32600MBED platform with one common interface for mbed. Slave support has also been included and more slaves will be added as time permits.

Dependents:   MAXREFDES131_Qt_Demo MAX32630FTHR_iButton_uSD_Logger MAX32630FTHR_DS18B20_uSD_Logger MAXREFDES130_131_Demo ... more

Superseded by MaximInterface.

Committer:
j3
Date:
Mon Mar 21 23:18:45 2016 +0000
Revision:
23:e8e403d61359
Parent:
22:686273e55cdc
Child:
54:08985bf69691
Merged OneWireInterface into OneWireMaster for clarity

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 19:6d4c039a2d8e 1 /******************************************************************//**
j3 19:6d4c039a2d8e 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 19:6d4c039a2d8e 3 *
j3 19:6d4c039a2d8e 4 * Permission is hereby granted, free of charge, to any person obtaining a
j3 19:6d4c039a2d8e 5 * copy of this software and associated documentation files (the "Software"),
j3 19:6d4c039a2d8e 6 * to deal in the Software without restriction, including without limitation
j3 19:6d4c039a2d8e 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 19:6d4c039a2d8e 8 * and/or sell copies of the Software, and to permit persons to whom the
j3 19:6d4c039a2d8e 9 * Software is furnished to do so, subject to the following conditions:
j3 19:6d4c039a2d8e 10 *
j3 19:6d4c039a2d8e 11 * The above copyright notice and this permission notice shall be included
j3 19:6d4c039a2d8e 12 * in all copies or substantial portions of the Software.
j3 19:6d4c039a2d8e 13 *
j3 19:6d4c039a2d8e 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 19:6d4c039a2d8e 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 19:6d4c039a2d8e 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 19:6d4c039a2d8e 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 19:6d4c039a2d8e 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 19:6d4c039a2d8e 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 19:6d4c039a2d8e 20 * OTHER DEALINGS IN THE SOFTWARE.
j3 19:6d4c039a2d8e 21 *
j3 19:6d4c039a2d8e 22 * Except as contained in this notice, the name of Maxim Integrated
j3 19:6d4c039a2d8e 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 19:6d4c039a2d8e 24 * Products, Inc. Branding Policy.
j3 19:6d4c039a2d8e 25 *
j3 19:6d4c039a2d8e 26 * The mere transfer of this software does not imply any licenses
j3 19:6d4c039a2d8e 27 * of trade secrets, proprietary technology, copyrights, patents,
j3 19:6d4c039a2d8e 28 * trademarks, maskwork rights, or any other form of intellectual
j3 19:6d4c039a2d8e 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 19:6d4c039a2d8e 30 * ownership rights.
j3 19:6d4c039a2d8e 31 **********************************************************************/
j3 19:6d4c039a2d8e 32
j3 19:6d4c039a2d8e 33
j3 19:6d4c039a2d8e 34 #include "ds2413.h"
j3 19:6d4c039a2d8e 35
j3 19:6d4c039a2d8e 36
j3 19:6d4c039a2d8e 37 //*********************************************************************
j3 22:686273e55cdc 38 Ds2413::Ds2413(OneWireMaster &owm): _owm(owm)
j3 19:6d4c039a2d8e 39 {
j3 19:6d4c039a2d8e 40 }
j3 19:6d4c039a2d8e 41
j3 19:6d4c039a2d8e 42
j3 19:6d4c039a2d8e 43 //*********************************************************************
j3 19:6d4c039a2d8e 44 Ds2413::CmdResult Ds2413::pio_access_read_chA(RomId &romId, uint8_t & val)
j3 19:6d4c039a2d8e 45 {
j3 19:6d4c039a2d8e 46 Ds2413::CmdResult result = OpFailure;
j3 19:6d4c039a2d8e 47
j3 19:6d4c039a2d8e 48 result = pio_access_read(romId, val);
j3 19:6d4c039a2d8e 49
j3 19:6d4c039a2d8e 50 val = (val & 0x01);
j3 19:6d4c039a2d8e 51
j3 19:6d4c039a2d8e 52 return result;
j3 19:6d4c039a2d8e 53 }
j3 19:6d4c039a2d8e 54
j3 19:6d4c039a2d8e 55
j3 19:6d4c039a2d8e 56 //*********************************************************************
j3 19:6d4c039a2d8e 57 Ds2413::CmdResult Ds2413::pio_access_read_chB(RomId &romId, uint8_t & val)
j3 19:6d4c039a2d8e 58 {
j3 19:6d4c039a2d8e 59 Ds2413::CmdResult result = OpFailure;
j3 19:6d4c039a2d8e 60
j3 19:6d4c039a2d8e 61 result = pio_access_read(romId, val);
j3 19:6d4c039a2d8e 62
j3 19:6d4c039a2d8e 63 val = ((val >> 2) & 0x01);
j3 19:6d4c039a2d8e 64
j3 19:6d4c039a2d8e 65 return result;
j3 19:6d4c039a2d8e 66 }
j3 19:6d4c039a2d8e 67
j3 19:6d4c039a2d8e 68
j3 19:6d4c039a2d8e 69 //*********************************************************************
j3 19:6d4c039a2d8e 70 Ds2413::CmdResult Ds2413::pio_access_write_chA(RomId &romId, uint8_t val)
j3 19:6d4c039a2d8e 71 {
j3 19:6d4c039a2d8e 72 Ds2413::CmdResult result = OpFailure;
j3 19:6d4c039a2d8e 73
j3 19:6d4c039a2d8e 74 uint8_t local_val = 0;
j3 19:6d4c039a2d8e 75
j3 19:6d4c039a2d8e 76 //read current state of PIO
j3 19:6d4c039a2d8e 77 result = pio_access_read(romId, local_val);
j3 19:6d4c039a2d8e 78
j3 19:6d4c039a2d8e 79 if(result == Ds2413::Success)
j3 19:6d4c039a2d8e 80 {
j3 19:6d4c039a2d8e 81 //modify
j3 19:6d4c039a2d8e 82 //current state of pioB OR
j3 19:6d4c039a2d8e 83 //desired state of pioA OR
j3 19:6d4c039a2d8e 84 //bits[7:2] should all be 1, per datasheet
j3 19:6d4c039a2d8e 85 val = (0xFC | ((local_val & 0x02) | (0x01 & val)));
j3 19:6d4c039a2d8e 86
j3 19:6d4c039a2d8e 87 //write, bit[1:0] new state of pio
j3 19:6d4c039a2d8e 88 result = pio_access_write(romId, val);
j3 19:6d4c039a2d8e 89 }
j3 19:6d4c039a2d8e 90
j3 19:6d4c039a2d8e 91 return result;
j3 19:6d4c039a2d8e 92 }
j3 19:6d4c039a2d8e 93
j3 19:6d4c039a2d8e 94
j3 19:6d4c039a2d8e 95 //*********************************************************************
j3 19:6d4c039a2d8e 96 Ds2413::CmdResult Ds2413::pio_access_write_chB(RomId &romId, uint8_t val)
j3 19:6d4c039a2d8e 97 {
j3 19:6d4c039a2d8e 98 Ds2413::CmdResult result = OpFailure;
j3 19:6d4c039a2d8e 99
j3 19:6d4c039a2d8e 100 uint8_t local_val = 0;
j3 19:6d4c039a2d8e 101
j3 19:6d4c039a2d8e 102 //read current state of PIO
j3 19:6d4c039a2d8e 103 result = pio_access_read(romId, local_val);
j3 19:6d4c039a2d8e 104
j3 19:6d4c039a2d8e 105 if(result == Ds2413::Success)
j3 19:6d4c039a2d8e 106 {
j3 19:6d4c039a2d8e 107 //modify
j3 19:6d4c039a2d8e 108 //current state of pioA OR
j3 19:6d4c039a2d8e 109 //desired state of pioB OR
j3 19:6d4c039a2d8e 110 //bits[7:2] should all be 1, per datasheet
j3 19:6d4c039a2d8e 111 val = (0xFC | ((local_val & 0x01) | (0x02 & (val << 1))));
j3 19:6d4c039a2d8e 112
j3 19:6d4c039a2d8e 113 //write, bit[1:0] new state of pio
j3 19:6d4c039a2d8e 114 result = pio_access_write(romId, val);
j3 19:6d4c039a2d8e 115 }
j3 19:6d4c039a2d8e 116
j3 19:6d4c039a2d8e 117 return result;
j3 19:6d4c039a2d8e 118 }
j3 19:6d4c039a2d8e 119
j3 19:6d4c039a2d8e 120
j3 19:6d4c039a2d8e 121 //*********************************************************************
j3 19:6d4c039a2d8e 122 Ds2413::CmdResult Ds2413::pio_access_read(RomId &romId, uint8_t & val)
j3 19:6d4c039a2d8e 123 {
j3 19:6d4c039a2d8e 124 Ds2413::CmdResult result = Ds2413::OpFailure;
j3 19:6d4c039a2d8e 125
j3 23:e8e403d61359 126 OneWireMaster::CmdResult ow_result = _owm.OWMatchROM(romId);
j3 19:6d4c039a2d8e 127
j3 23:e8e403d61359 128 if(ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 129 {
j3 19:6d4c039a2d8e 130 ow_result = _owm.OWWriteByte(Ds2413::PIO_ACCESS_READ);
j3 19:6d4c039a2d8e 131
j3 23:e8e403d61359 132 if(ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 133 {
j3 19:6d4c039a2d8e 134 ow_result = _owm.OWReadByte(val);
j3 19:6d4c039a2d8e 135
j3 23:e8e403d61359 136 if(ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 137 {
j3 19:6d4c039a2d8e 138 result = Ds2413::Success;
j3 19:6d4c039a2d8e 139 }
j3 19:6d4c039a2d8e 140 else
j3 19:6d4c039a2d8e 141 {
j3 19:6d4c039a2d8e 142 result = Ds2413::CommsReadError;
j3 19:6d4c039a2d8e 143 }
j3 19:6d4c039a2d8e 144 }
j3 19:6d4c039a2d8e 145 else
j3 19:6d4c039a2d8e 146 {
j3 19:6d4c039a2d8e 147 result = Ds2413::CommsWriteError;
j3 19:6d4c039a2d8e 148 }
j3 19:6d4c039a2d8e 149 }
j3 19:6d4c039a2d8e 150
j3 19:6d4c039a2d8e 151 return result;
j3 19:6d4c039a2d8e 152 }
j3 19:6d4c039a2d8e 153
j3 19:6d4c039a2d8e 154
j3 19:6d4c039a2d8e 155 //*********************************************************************
j3 19:6d4c039a2d8e 156 Ds2413::CmdResult Ds2413::pio_access_write(RomId &romId, uint8_t val)
j3 19:6d4c039a2d8e 157 {
j3 19:6d4c039a2d8e 158 Ds2413::CmdResult result = Ds2413::OpFailure;
j3 19:6d4c039a2d8e 159
j3 23:e8e403d61359 160 OneWireMaster::CmdResult ow_result = _owm.OWMatchROM(romId);
j3 19:6d4c039a2d8e 161
j3 23:e8e403d61359 162 if(ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 163 {
j3 19:6d4c039a2d8e 164 uint8_t send_block[] = {Ds2413::PIO_ACCESS_WRITE, val, ~val};
j3 19:6d4c039a2d8e 165
j3 19:6d4c039a2d8e 166 ow_result = _owm.OWWriteBlock(send_block, 3);
j3 23:e8e403d61359 167 if(ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 168 {
j3 19:6d4c039a2d8e 169 uint8_t expected_status = ((0x01 & val) | ((0x01 & val) << 1) |
j3 19:6d4c039a2d8e 170 ((0x02 & val) << 1) | ((0x02 & val) << 2));
j3 19:6d4c039a2d8e 171 expected_status |= (~expected_status << 4);
j3 19:6d4c039a2d8e 172
j3 19:6d4c039a2d8e 173 uint8_t rcv_block[2];
j3 19:6d4c039a2d8e 174 ow_result = _owm.OWReadBlock(rcv_block, 2);
j3 19:6d4c039a2d8e 175
j3 23:e8e403d61359 176 if(ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 177 {
j3 19:6d4c039a2d8e 178 if((rcv_block[0] == 0xAA) && (rcv_block[1] == expected_status))
j3 19:6d4c039a2d8e 179 {
j3 19:6d4c039a2d8e 180 result = Ds2413::Success;
j3 19:6d4c039a2d8e 181 }
j3 19:6d4c039a2d8e 182 }
j3 19:6d4c039a2d8e 183 else
j3 19:6d4c039a2d8e 184 {
j3 19:6d4c039a2d8e 185 result = Ds2413::CommsReadError;
j3 19:6d4c039a2d8e 186 }
j3 19:6d4c039a2d8e 187 }
j3 19:6d4c039a2d8e 188 else
j3 19:6d4c039a2d8e 189 {
j3 19:6d4c039a2d8e 190 result = Ds2413::CommsWriteError;
j3 19:6d4c039a2d8e 191 }
j3 19:6d4c039a2d8e 192 }
j3 19:6d4c039a2d8e 193
j3 19:6d4c039a2d8e 194 return result;
j3 19:6d4c039a2d8e 195 }