Mike Fruge / OneWire

Dependents:   Max32630_One_Wire_Interface

Committer:
j3
Date:
Sat Mar 05 03:26:06 2016 +0000
Revision:
11:2833f27ba319
Parent:
10:0df2cc66fc47
Child:
14:7b2886a50321
updated Over Drive timing for write 1 and sample time on read

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 3:644fc630f958 1 /******************************************************************//**
j3 3:644fc630f958 2 * @file owgpio.h
j3 3:644fc630f958 3 *
j3 3:644fc630f958 4 * @author Justin Jordan
j3 3:644fc630f958 5 *
j3 3:644fc630f958 6 * @version 0.0.0
j3 3:644fc630f958 7 *
j3 3:644fc630f958 8 * Started: 31JAN16
j3 3:644fc630f958 9 *
j3 3:644fc630f958 10 * Updated:
j3 3:644fc630f958 11 *
j3 3:644fc630f958 12 * @brief Header file for bit-banging a 1-wire master
j3 3:644fc630f958 13 ***********************************************************************
j3 3:644fc630f958 14 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 3:644fc630f958 15 *
j3 3:644fc630f958 16 * Permission is hereby granted, free of charge, to any person obtaining a
j3 3:644fc630f958 17 * copy of this software and associated documentation files (the "Software"),
j3 3:644fc630f958 18 * to deal in the Software without restriction, including without limitation
j3 3:644fc630f958 19 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 3:644fc630f958 20 * and/or sell copies of the Software, and to permit persons to whom the
j3 3:644fc630f958 21 * Software is furnished to do so, subject to the following conditions:
j3 3:644fc630f958 22 *
j3 3:644fc630f958 23 * The above copyright notice and this permission notice shall be included
j3 3:644fc630f958 24 * in all copies or substantial portions of the Software.
j3 3:644fc630f958 25 *
j3 3:644fc630f958 26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 3:644fc630f958 27 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 3:644fc630f958 28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 3:644fc630f958 29 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 3:644fc630f958 30 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 3:644fc630f958 31 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 3:644fc630f958 32 * OTHER DEALINGS IN THE SOFTWARE.
j3 3:644fc630f958 33 *
j3 3:644fc630f958 34 * Except as contained in this notice, the name of Maxim Integrated
j3 3:644fc630f958 35 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 3:644fc630f958 36 * Products, Inc. Branding Policy.
j3 3:644fc630f958 37 *
j3 3:644fc630f958 38 * The mere transfer of this software does not imply any licenses
j3 3:644fc630f958 39 * of trade secrets, proprietary technology, copyrights, patents,
j3 3:644fc630f958 40 * trademarks, maskwork rights, or any other form of intellectual
j3 3:644fc630f958 41 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 3:644fc630f958 42 * ownership rights.
j3 3:644fc630f958 43 **********************************************************************/
j3 3:644fc630f958 44
j3 3:644fc630f958 45
j3 3:644fc630f958 46 #ifndef OWGPIO_H
j3 3:644fc630f958 47 #define OWGPIO_H
j3 3:644fc630f958 48
j3 3:644fc630f958 49
j3 10:0df2cc66fc47 50 #if(TARGET_MAX32600)
j3 10:0df2cc66fc47 51
j3 10:0df2cc66fc47 52
j3 3:644fc630f958 53 #include "mbed.h"
j3 3:644fc630f958 54 #include "OneWireInterface.h"
j3 5:ce108eeb878d 55 #include "OneWireMastersShared.h"
j3 3:644fc630f958 56
j3 3:644fc630f958 57
j3 3:644fc630f958 58 class OwGpio: public OneWireInterface
j3 3:644fc630f958 59 {
j3 3:644fc630f958 60 public:
j3 3:644fc630f958 61
j3 10:0df2cc66fc47 62 //1-wire timming constants for bit-bang.
j3 10:0df2cc66fc47 63 //Bit-Bang Master only supported on MAX32600MBED board
j3 10:0df2cc66fc47 64 //All times are in terms of micro seconds
j3 9:641516a3f0dc 65
j3 10:0df2cc66fc47 66 static const uint16_t TRSTL_STD = 560;
j3 10:0df2cc66fc47 67 static const uint16_t TRSTL_OVD = 56;
j3 9:641516a3f0dc 68
j3 9:641516a3f0dc 69 //Master sample time for PD
j3 10:0df2cc66fc47 70 static const uint16_t TMSP_STD = 68;
j3 10:0df2cc66fc47 71 static const uint16_t TMSP_OVD = 8;
j3 9:641516a3f0dc 72
j3 9:641516a3f0dc 73 //Write 0
j3 10:0df2cc66fc47 74 static const uint16_t TW0L_STD = 64;
j3 10:0df2cc66fc47 75 static const uint16_t TW0L_OVD = 8;
j3 9:641516a3f0dc 76
j3 9:641516a3f0dc 77 //Write 1, Read low time
j3 10:0df2cc66fc47 78 static const uint16_t TW1L_STD = 8;
j3 11:2833f27ba319 79 static const uint16_t TW1L_OVD = 0; //closest to 1us I can get
j3 9:641516a3f0dc 80
j3 9:641516a3f0dc 81 //Master sample time for bit
j3 10:0df2cc66fc47 82 static const uint16_t TMSR_STD = 12;
j3 11:2833f27ba319 83 static const uint16_t TMSR_OVD = 0; //closest to 1us I can get
j3 9:641516a3f0dc 84
j3 10:0df2cc66fc47 85 //make sure to use TSLOT for recoveries
j3 10:0df2cc66fc47 86 static const uint16_t TSLOT_STD = 70;
j3 10:0df2cc66fc47 87 static const uint16_t TSLOT_OVD = 10;
j3 9:641516a3f0dc 88
j3 9:641516a3f0dc 89
j3 3:644fc630f958 90 /**********************************************************//**
j3 10:0df2cc66fc47 91 * @brief Owgpio constructor
j3 10:0df2cc66fc47 92 *
j3 10:0df2cc66fc47 93 * @details Initializes given pin for open-drain operation
j3 10:0df2cc66fc47 94 *
j3 10:0df2cc66fc47 95 * On Entry:
j3 10:0df2cc66fc47 96 *
j3 10:0df2cc66fc47 97 * @para[in] ow_gpio - GPIO pin to use for One Wire bus
j3 10:0df2cc66fc47 98 *
j3 10:0df2cc66fc47 99 * @param[in] ext_spu - GPIO pin to use for Strong Pull-Up
j3 10:0df2cc66fc47 100 *
j3 10:0df2cc66fc47 101 * On Exit:
j3 10:0df2cc66fc47 102 *
j3 10:0df2cc66fc47 103 * @return
j3 10:0df2cc66fc47 104 **************************************************************/
j3 10:0df2cc66fc47 105 OwGpio(PinName ow_gpio, PinName ext_spu = NC);
j3 10:0df2cc66fc47 106
j3 10:0df2cc66fc47 107
j3 10:0df2cc66fc47 108 /**********************************************************//**
j3 10:0df2cc66fc47 109 * @brief OwGpio destructor
j3 10:0df2cc66fc47 110 *
j3 10:0df2cc66fc47 111 * @details
j3 10:0df2cc66fc47 112 *
j3 10:0df2cc66fc47 113 * On Entry:
j3 10:0df2cc66fc47 114 *
j3 10:0df2cc66fc47 115 * On Exit:
j3 10:0df2cc66fc47 116 *
j3 10:0df2cc66fc47 117 * @return
j3 10:0df2cc66fc47 118 **************************************************************/
j3 10:0df2cc66fc47 119 virtual ~OwGpio();
j3 10:0df2cc66fc47 120
j3 10:0df2cc66fc47 121
j3 10:0df2cc66fc47 122 /**********************************************************//**
j3 10:0df2cc66fc47 123 * @brief initializes 16-bit counter_0 of TMR3 on MAX32600MBED
j3 3:644fc630f958 124 *
j3 3:644fc630f958 125 * @details
j3 3:644fc630f958 126 *
j3 3:644fc630f958 127 * On Entry:
j3 3:644fc630f958 128 *
j3 3:644fc630f958 129 * On Exit:
j3 10:0df2cc66fc47 130 *
j3 10:0df2cc66fc47 131 * @return
j3 3:644fc630f958 132 **************************************************************/
j3 10:0df2cc66fc47 133 static void init_ow_timer(void);
j3 3:644fc630f958 134
j3 3:644fc630f958 135
j3 3:644fc630f958 136 /***** OW API ****************************************************/
j3 3:644fc630f958 137 virtual bool OWReset();
j3 3:644fc630f958 138
j3 3:644fc630f958 139 virtual void OWWriteBit(uint8_t sendbit);
j3 3:644fc630f958 140
j3 3:644fc630f958 141 virtual uint8_t OWReadBit();
j3 3:644fc630f958 142
j3 3:644fc630f958 143 virtual uint8_t OWTouchBit(uint8_t sendbit);
j3 3:644fc630f958 144
j3 3:644fc630f958 145 virtual bool OWWriteByte(uint8_t sendbyte);
j3 3:644fc630f958 146
j3 3:644fc630f958 147 virtual uint8_t OWReadByte(void);
j3 3:644fc630f958 148
j3 3:644fc630f958 149 virtual uint8_t OWTouchByte(uint8_t sendbyte);
j3 3:644fc630f958 150
j3 3:644fc630f958 151 virtual void OWBlock(uint8_t *tran_buf, uint8_t tran_len);
j3 5:ce108eeb878d 152
j3 5:ce108eeb878d 153 virtual void OWWriteBlock(const uint8_t *tran_buf, uint8_t tran_len);
j3 5:ce108eeb878d 154
j3 5:ce108eeb878d 155 virtual void OWReadBlock(uint8_t *recv_buf, uint8_t recv_len);
j3 3:644fc630f958 156
j3 3:644fc630f958 157 virtual bool OWFirst(void);
j3 3:644fc630f958 158
j3 3:644fc630f958 159 virtual bool OWNext(void);
j3 3:644fc630f958 160
j3 3:644fc630f958 161 virtual bool OWVerify(void);
j3 3:644fc630f958 162
j3 3:644fc630f958 163 virtual void OWTargetSetup(uint8_t family_code);
j3 3:644fc630f958 164
j3 3:644fc630f958 165 virtual void OWFamilySkipSetup(void);
j3 3:644fc630f958 166
j3 3:644fc630f958 167 virtual bool OWSearch(void);
j3 5:ce108eeb878d 168
j3 5:ce108eeb878d 169 virtual bool OWReadROM(void);
j3 5:ce108eeb878d 170
j3 5:ce108eeb878d 171 virtual bool OWSkipROM(void);
j3 5:ce108eeb878d 172
j3 5:ce108eeb878d 173 virtual bool OWMatchROM(void);
j3 5:ce108eeb878d 174
j3 5:ce108eeb878d 175 virtual bool OWOverdriveSkipROM(void);
j3 5:ce108eeb878d 176
j3 5:ce108eeb878d 177 virtual bool OWOverdriveMatchROM(void);
j3 5:ce108eeb878d 178
j3 5:ce108eeb878d 179 virtual bool OWResume(void);
j3 3:644fc630f958 180
j3 5:ce108eeb878d 181 virtual uint8_t OWSpeed(OW_SPEED new_speed);
j3 3:644fc630f958 182
j3 5:ce108eeb878d 183 virtual uint8_t OWLevel(OW_LEVEL new_level);
j3 3:644fc630f958 184
j3 3:644fc630f958 185 virtual bool OWWriteBytePower(uint8_t sendbyte);
j3 3:644fc630f958 186
j3 3:644fc630f958 187 virtual bool OWReadBitPower(uint8_t applyPowerResponse);
j3 3:644fc630f958 188
j3 5:ce108eeb878d 189 virtual const uint8_t (&OWgetROMnumber() const)[ROMnumberLen];
j3 3:644fc630f958 190
j3 3:644fc630f958 191 private:
j3 3:644fc630f958 192
j3 10:0df2cc66fc47 193 void init_ow_gpio(PinName ow_gpio);
j3 10:0df2cc66fc47 194
j3 5:ce108eeb878d 195 DigitalOut _ext_spu;
j3 9:641516a3f0dc 196 OW_SPEED _ow_speed;
j3 9:641516a3f0dc 197 OW_LEVEL _ow_level;
j3 9:641516a3f0dc 198
j3 10:0df2cc66fc47 199 uint32_t _ow_port;
j3 10:0df2cc66fc47 200 uint32_t _ow_pin;
j3 10:0df2cc66fc47 201
j3 9:641516a3f0dc 202 // Search state
j3 5:ce108eeb878d 203 uint8_t _rom_number[ROMnumberLen];
j3 9:641516a3f0dc 204 uint8_t _last_discrepancy;
j3 9:641516a3f0dc 205 uint8_t _last_family_discrepancy;
j3 9:641516a3f0dc 206 uint8_t _last_device_flag;
j3 9:641516a3f0dc 207 uint8_t _crc8;
j3 3:644fc630f958 208 };
j3 3:644fc630f958 209
j3 10:0df2cc66fc47 210 #endif/* TARGET_MAX32600*/
j3 3:644fc630f958 211 #endif /*OWGPIO_H*/