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.
Diff: Masters/DS248x/DS248x.h
- Revision:
- 73:2cecc1372acc
- Parent:
- 72:6892702709ee
- Child:
- 74:23be10c32fa3
diff -r 6892702709ee -r 2cecc1372acc Masters/DS248x/DS248x.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Masters/DS248x/DS248x.h Thu May 12 14:38:16 2016 -0500 @@ -0,0 +1,299 @@ +/******************************************************************//** +* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES +* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* Except as contained in this notice, the name of Maxim Integrated +* Products, Inc. shall not be used except as stated in the Maxim Integrated +* Products, Inc. Branding Policy. +* +* The mere transfer of this software does not imply any licenses +* of trade secrets, proprietary technology, copyrights, patents, +* trademarks, maskwork rights, or any other form of intellectual +* property whatsoever. Maxim Integrated Products, Inc. retains all +* ownership rights. +**********************************************************************/ + +#ifndef OneWire_Masters_DS248x +#define OneWire_Masters_DS248x + +#include "Masters/OneWireMaster.h" +#include "PinNames.h" + +namespace mbed { class I2C; } + +namespace OneWire +{ + namespace Masters + { + class DS248x: public OneWireMaster + { + public: + enum Register + { + ConfigReg = 0xC3, + StatusReg = 0xF0, + ReadDataReg = 0xE1, + PortConfigReg = 0xB4, + ChannelSelectReg = 0xD2 // DS2482-800 only + }; + + // DS2484 only + enum OwAdjustParam + { + tRSTL = 0, + tRSTL_OD, + tMSP, + tMSP_OD, + tW0L, + tW0L_OD, + tREC0, //OD NA + RWPU = 8 //OD NA, see DS2484 datasheet page 13 + }; + + /// Represents a DS2465 configuration. + class Config + { + public: + /// @{ + /// 1-Wire Speed + bool get1WS() const { return m_1WS; } + void set1WS(bool new1WS) { m_1WS = new1WS; } + /// @} + + /// @{ + /// Strong Pullup + bool getSPU() const { return m_SPU; } + void setSPU(bool newSPU) { m_SPU = newSPU; } + /// @} + + /// @{ + /// 1-Wire Power Down + bool getPDN() const { return m_PDN; } + void setPDN(bool newPDN) { m_PDN = newPDN; } + /// @} + + /// @{ + /// Active Pullup + bool getAPU() const { return m_APU; } + void setAPU(bool newAPU) { m_APU = newAPU; } + /// @} + + /// Byte representation that is read from the DS2465. + uint8_t readByte() const; + /// Byte respresentation that is written to the DS2465. + uint8_t writeByte() const; + + /// Reset to the power-on default config. + void reset(); + Config() { reset(); } + + private: + bool m_1WS, m_SPU, m_PDN, m_APU; + }; + + /**********************************************************//** + * @brief DS248x constructor + * + * @details allows user to use existing I2C object + * + * On Entry: + * @param[in] p_i2c_bus - pointer to existing I2C object + * + * On Exit: + * @return + **************************************************************/ + DS248x(mbed::I2C & i2c_bus, uint8_t adrs); + + /**********************************************************//** + * @brief DS248x constructor + * + * @details Object instantiates a new I2C object with no + * public access + * + * On Entry: + * @param[in] sda - sda pin of I2C bus + * @param[in] scl - scl pin of I2C bus + * + * On Exit: + * @return + **************************************************************/ + DS248x(PinName sda, PinName scl, uint8_t adrs); + + /**********************************************************//** + * @brief DS248x destructor + * + * @details deletes I2C object if owner + * + * On Entry: + * + * On Exit: + * @return + **************************************************************/ + virtual ~DS248x(); + + /**********************************************************//** + * @brief reset() + * + * @details Perform a device reset on the DS248x + * + * On Entry: + * + * On Exit: + * @return TRUE if device was reset + * FALSE device not detected or failure to perform reset + **************************************************************/ + OneWireMaster::CmdResult reset(void); + + /// Write a new configuration to the DS2465. + /// @param[in] config New configuration to write. + /// @param verify Verify that the configuration was written successfully. + OneWireMaster::CmdResult writeConfig(const Config & config, bool verify); + + /// Read the current DS2465 configuration. + /// @returns The cached current configuration. + Config currentConfig() const { return m_curConfig; } + + + OneWireMaster::CmdResult readRegister(Register reg, uint8_t & buf, bool skipSetPointer = false) const; + + /**********************************************************//** + * @brief channel_select() + * + * @details Select the 1-Wire channel on a DS2482-800. + * Min channel = 1 + * + * On Entry: + * @param[in] channel - desired channel of the DS2482 + * + * On Exit: + * @return TRUE if channel selected + * FALSE device not detected or failure to perform select + **************************************************************/ + OneWireMaster::CmdResult selectChannel(uint8_t channel); + + /**********************************************************//** + * @brief adjust_timing() + * + * @details adjustable timming available in DS2484 only + * + * On Entry: + * @param[in] param - 1 of 8 adjustable parameters + * @param[in] val - new value for parameter, see datasheet + * for codes + * + * On Exit: + * @return TRUE: parameter successfully adjusted + * FALSE: failed to adjust parameter + **************************************************************/ + OneWireMaster::CmdResult adjustOwPort(OwAdjustParam param, uint8_t val); + + /**********************************************************//** + * @brief search_triplet() + * + * @details Use the DS248x help command '1-Wire triplet' to perform + * one bit of a 1-Wire search. This command does two read + * bits and one write bit. The write bit is either the + * default direction (all device have same bit) or in case + * of a discrepancy, the 'search_direction' parameter is + * used. + * + * On Entry: + * @param[in] search_direction + * + * On Exit: + * @return The DS248x status byte result from the triplet command + **************************************************************/ + virtual OneWireMaster::CmdResult OWTriplet(SearchDirection & search_direction, uint8_t & sbr, uint8_t & tsb); + + //Part of OneWireMaster that should be implemented for each master + //See OneWireMaster.h for documentation + + /**********************************************************//** + * @brief + * + * @details Detect routine that performs a device reset + * followed by writing the configuration byte to default + * values: + * 1-Wire speed (c1WS) = standard (0) + * Strong pull-up (cSPU) = off (0) + * Presence pulse masking (cPPM) = off (0) + * Active pull-up (cAPU) = on (CONFIG_APU = 0x01) + * + * On Entry: + * + * On Exit: + * @return TRUE if device was detected and written + * FALSE device not detected or failure to write + * configuration byte + **************************************************************/ + virtual OneWireMaster::CmdResult OWInitMaster(void); + + virtual OneWireMaster::CmdResult OWReset(void); + + virtual OneWireMaster::CmdResult OWTouchBitSetLevel(uint8_t & sendrecvbit, OWLevel after_level); + + virtual OneWireMaster::CmdResult OWReadByteSetLevel(uint8_t & recvbyte, OWLevel after_level); + + virtual OneWireMaster::CmdResult OWWriteByteSetLevel(uint8_t sendbyte, OWLevel after_level); + + virtual OneWireMaster::CmdResult OWSetSpeed(OWSpeed new_speed); + + virtual OneWireMaster::CmdResult OWSetLevel(OWLevel new_level); + + private: + enum DS248X_CMDS + { + CMD_DRST = 0xF0, + CMD_WCFG = 0xD2, + CMD_A1WP = 0xC3, // DS2484 only + CMD_CHSL = 0xC3, // DS2482-800 only + CMD_SRP = 0xE1, + CMD_1WRS = 0xB4, + CMD_1WWB = 0xA5, + CMD_1WRB = 0x96, + CMD_1WSB = 0x87, + CMD_1WT = 0x78 + }; + + mbed::I2C *_p_i2c_bus; + uint8_t _adrs; + bool _i2c_owner; + + Config m_curConfig; + + /// Polls the DS2465 status waiting for the 1-Wire Busy bit (1WB) to be cleared. + /// @param[out] pStatus Optionally retrive the status byte when 1WB cleared. + /// @returns Success or TimeoutError if poll limit reached. + OneWireMaster::CmdResult pollBusy(uint8_t * pStatus = NULL); + + /// Ensure that the desired 1-Wire level is set in the configuration. + /// @param level Desired 1-Wire level. + OneWireMaster::CmdResult configureLevel(OWLevel level); + + /// @note Allow marking const since not public. + OneWireMaster::CmdResult sendCommand(DS248X_CMDS cmd) const; + + /// @note Allow marking const since not public. + OneWireMaster::CmdResult sendCommand(DS248X_CMDS cmd, uint8_t param) const; + }; + } +} + +#endif /*DS248X_H*/