Mike Fruge / OneWire

Dependents:   Max32630_One_Wire_Interface

Committer:
j3
Date:
Mon Feb 29 02:35:12 2016 +0000
Revision:
9:641516a3f0dc
Parent:
5:ce108eeb878d
Child:
10:0df2cc66fc47
Support for bit-bang master on MAX32600MBED using fixed, painfully determined, timming constants.  The mbed Timer and wait fxs do not appear to have the accuracy to support 1-wire across multiple platforms.

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 3:644fc630f958 50 #include "mbed.h"
j3 3:644fc630f958 51 #include "OneWireInterface.h"
j3 5:ce108eeb878d 52 #include "OneWireMastersShared.h"
j3 3:644fc630f958 53
j3 3:644fc630f958 54
j3 3:644fc630f958 55 class OwGpio: public OneWireInterface
j3 3:644fc630f958 56 {
j3 3:644fc630f958 57 public:
j3 3:644fc630f958 58
j3 9:641516a3f0dc 59 //1-wire timming constants for bit-bang.
j3 9:641516a3f0dc 60 //Tested on MAX32600MBED board, you will have to adjust if using a different board
j3 9:641516a3f0dc 61 //values in comments are real timming values
j3 9:641516a3f0dc 62
j3 9:641516a3f0dc 63 //Reset Pulse
j3 9:641516a3f0dc 64 static const uint16_t TRSTL_STD = (2250); //560us, from falling edge
j3 9:641516a3f0dc 65
j3 9:641516a3f0dc 66 //Master sample time for PD
j3 9:641516a3f0dc 67 static const uint16_t TMSP_STD = (250); //68us, from rising edge of reset pulse
j3 9:641516a3f0dc 68
j3 9:641516a3f0dc 69 //Write 0
j3 9:641516a3f0dc 70 static const uint16_t TW0L_STD = (240); //64us, from falling edge
j3 9:641516a3f0dc 71
j3 9:641516a3f0dc 72 //Write 1, Read low time
j3 9:641516a3f0dc 73 static const uint16_t TW1L_STD = (20); //8us, from falling edge
j3 9:641516a3f0dc 74
j3 9:641516a3f0dc 75 //Master sample time for bit
j3 9:641516a3f0dc 76 static const uint16_t TMSR_STD = (3); //12us, from falling edge
j3 9:641516a3f0dc 77
j3 9:641516a3f0dc 78 //make sure to use TSLOT for recoveries, 70us is greater than min value
j3 9:641516a3f0dc 79 static const uint16_t TSLOT_STD = (70); //70us, measured from falling to falling.
j3 9:641516a3f0dc 80
j3 9:641516a3f0dc 81
j3 3:644fc630f958 82 /**********************************************************//**
j3 3:644fc630f958 83 * @brief
j3 3:644fc630f958 84 *
j3 3:644fc630f958 85 * @details
j3 3:644fc630f958 86 *
j3 3:644fc630f958 87 * On Entry:
j3 3:644fc630f958 88 *
j3 3:644fc630f958 89 * On Exit:
j3 3:644fc630f958 90 * @return
j3 3:644fc630f958 91 **************************************************************/
j3 5:ce108eeb878d 92 OwGpio(PinName ow_gpio, PinName ext_spu = NC);
j3 3:644fc630f958 93
j3 3:644fc630f958 94
j3 3:644fc630f958 95 /***** OW API ****************************************************/
j3 3:644fc630f958 96 virtual bool OWReset();
j3 3:644fc630f958 97
j3 3:644fc630f958 98 virtual void OWWriteBit(uint8_t sendbit);
j3 3:644fc630f958 99
j3 3:644fc630f958 100 virtual uint8_t OWReadBit();
j3 3:644fc630f958 101
j3 3:644fc630f958 102 virtual uint8_t OWTouchBit(uint8_t sendbit);
j3 3:644fc630f958 103
j3 3:644fc630f958 104 virtual bool OWWriteByte(uint8_t sendbyte);
j3 3:644fc630f958 105
j3 3:644fc630f958 106 virtual uint8_t OWReadByte(void);
j3 3:644fc630f958 107
j3 3:644fc630f958 108 virtual uint8_t OWTouchByte(uint8_t sendbyte);
j3 3:644fc630f958 109
j3 3:644fc630f958 110 virtual void OWBlock(uint8_t *tran_buf, uint8_t tran_len);
j3 5:ce108eeb878d 111
j3 5:ce108eeb878d 112 virtual void OWWriteBlock(const uint8_t *tran_buf, uint8_t tran_len);
j3 5:ce108eeb878d 113
j3 5:ce108eeb878d 114 virtual void OWReadBlock(uint8_t *recv_buf, uint8_t recv_len);
j3 3:644fc630f958 115
j3 3:644fc630f958 116 virtual bool OWFirst(void);
j3 3:644fc630f958 117
j3 3:644fc630f958 118 virtual bool OWNext(void);
j3 3:644fc630f958 119
j3 3:644fc630f958 120 virtual bool OWVerify(void);
j3 3:644fc630f958 121
j3 3:644fc630f958 122 virtual void OWTargetSetup(uint8_t family_code);
j3 3:644fc630f958 123
j3 3:644fc630f958 124 virtual void OWFamilySkipSetup(void);
j3 3:644fc630f958 125
j3 3:644fc630f958 126 virtual bool OWSearch(void);
j3 5:ce108eeb878d 127
j3 5:ce108eeb878d 128 virtual bool OWReadROM(void);
j3 5:ce108eeb878d 129
j3 5:ce108eeb878d 130 virtual bool OWSkipROM(void);
j3 5:ce108eeb878d 131
j3 5:ce108eeb878d 132 virtual bool OWMatchROM(void);
j3 5:ce108eeb878d 133
j3 5:ce108eeb878d 134 virtual bool OWOverdriveSkipROM(void);
j3 5:ce108eeb878d 135
j3 5:ce108eeb878d 136 virtual bool OWOverdriveMatchROM(void);
j3 5:ce108eeb878d 137
j3 5:ce108eeb878d 138 virtual bool OWResume(void);
j3 3:644fc630f958 139
j3 5:ce108eeb878d 140 virtual uint8_t OWSpeed(OW_SPEED new_speed);
j3 3:644fc630f958 141
j3 5:ce108eeb878d 142 virtual uint8_t OWLevel(OW_LEVEL new_level);
j3 3:644fc630f958 143
j3 3:644fc630f958 144 virtual bool OWWriteBytePower(uint8_t sendbyte);
j3 3:644fc630f958 145
j3 3:644fc630f958 146 virtual bool OWReadBitPower(uint8_t applyPowerResponse);
j3 3:644fc630f958 147
j3 5:ce108eeb878d 148 virtual const uint8_t (&OWgetROMnumber() const)[ROMnumberLen];
j3 3:644fc630f958 149
j3 3:644fc630f958 150 private:
j3 3:644fc630f958 151
j3 5:ce108eeb878d 152 DigitalInOut _ow_gpio;
j3 5:ce108eeb878d 153 DigitalOut _ext_spu;
j3 5:ce108eeb878d 154
j3 9:641516a3f0dc 155 OW_SPEED _ow_speed;
j3 9:641516a3f0dc 156 OW_LEVEL _ow_level;
j3 9:641516a3f0dc 157
j3 9:641516a3f0dc 158 // Search state
j3 5:ce108eeb878d 159 uint8_t _rom_number[ROMnumberLen];
j3 9:641516a3f0dc 160 uint8_t _last_discrepancy;
j3 9:641516a3f0dc 161 uint8_t _last_family_discrepancy;
j3 9:641516a3f0dc 162 uint8_t _last_device_flag;
j3 9:641516a3f0dc 163 uint8_t _crc8;
j3 3:644fc630f958 164 };
j3 3:644fc630f958 165
j3 3:644fc630f958 166 #endif /*OWGPIO_H*/