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:
IanBenzMaxim
Date:
Thu Mar 31 11:56:01 2016 -0500
Revision:
33:a4c015046956
Parent:
27:d5aaefa252f1
Child:
34:11fffbe98ef9
Created a generic array wrapper class. Updated array types used in ISha256MacCoprocessor and DS28E15_22_25 for clarity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 25:bdb1c5a53b58 1 //------------Copyright (C) 2013 Maxim Integrated Products --------------
IanBenzMaxim 25:bdb1c5a53b58 2 //
IanBenzMaxim 25:bdb1c5a53b58 3 // Permission is hereby granted, free of charge, to any person obtaining a
IanBenzMaxim 25:bdb1c5a53b58 4 // copy of this software and associated documentation files (the "Software"),
IanBenzMaxim 25:bdb1c5a53b58 5 // to deal in the Software without restriction, including without limitation
IanBenzMaxim 25:bdb1c5a53b58 6 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
IanBenzMaxim 25:bdb1c5a53b58 7 // and/or sell copies of the Software, and to permit persons to whom the
IanBenzMaxim 25:bdb1c5a53b58 8 // Software is furnished to do so, subject to the following conditions:
IanBenzMaxim 25:bdb1c5a53b58 9 //
IanBenzMaxim 25:bdb1c5a53b58 10 // The above copyright notice and this permission notice shall be included
IanBenzMaxim 25:bdb1c5a53b58 11 // in all copies or substantial portions of the Software.
IanBenzMaxim 25:bdb1c5a53b58 12 //
IanBenzMaxim 25:bdb1c5a53b58 13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
IanBenzMaxim 25:bdb1c5a53b58 14 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
IanBenzMaxim 25:bdb1c5a53b58 15 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IanBenzMaxim 25:bdb1c5a53b58 16 // IN NO EVENT SHALL MAXIM INTEGRATED PRODCUTS BE LIABLE FOR ANY CLAIM, DAMAGES
IanBenzMaxim 25:bdb1c5a53b58 17 // OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
IanBenzMaxim 25:bdb1c5a53b58 18 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
IanBenzMaxim 25:bdb1c5a53b58 19 // OTHER DEALINGS IN THE SOFTWARE.
IanBenzMaxim 25:bdb1c5a53b58 20 //
IanBenzMaxim 25:bdb1c5a53b58 21 // Except as contained in this notice, the name of Maxim Integrated Products
IanBenzMaxim 25:bdb1c5a53b58 22 // shall not be used except as stated in the Maxim Integrated Products
IanBenzMaxim 25:bdb1c5a53b58 23 // Branding Policy.
IanBenzMaxim 25:bdb1c5a53b58 24 // ---------------------------------------------------------------------------
IanBenzMaxim 25:bdb1c5a53b58 25
IanBenzMaxim 25:bdb1c5a53b58 26 #ifndef DS28E15_22_25_H
IanBenzMaxim 25:bdb1c5a53b58 27 #define DS28E15_22_25_H
IanBenzMaxim 25:bdb1c5a53b58 28
IanBenzMaxim 33:a4c015046956 29 #include "array.hpp"
IanBenzMaxim 25:bdb1c5a53b58 30 #include "OneWire_Masters/ISha256MacCoprocessor.hpp"
IanBenzMaxim 25:bdb1c5a53b58 31 #include "OneWireSlave.hpp"
IanBenzMaxim 25:bdb1c5a53b58 32
IanBenzMaxim 27:d5aaefa252f1 33 class OneWireMaster;
IanBenzMaxim 27:d5aaefa252f1 34
IanBenzMaxim 25:bdb1c5a53b58 35 class DS28E15_22_25 : public OneWireSlave
IanBenzMaxim 25:bdb1c5a53b58 36 {
IanBenzMaxim 25:bdb1c5a53b58 37 public:
IanBenzMaxim 25:bdb1c5a53b58 38 enum DeviceFamily
IanBenzMaxim 25:bdb1c5a53b58 39 {
IanBenzMaxim 25:bdb1c5a53b58 40 DS28E25_FAMILY = 0x47,
IanBenzMaxim 25:bdb1c5a53b58 41 DS28E22_FAMILY = 0x48,
IanBenzMaxim 25:bdb1c5a53b58 42 DS28E15_FAMILY = 0x17,
IanBenzMaxim 25:bdb1c5a53b58 43 UNKNOWN_FAMILY = 0
IanBenzMaxim 25:bdb1c5a53b58 44 };
IanBenzMaxim 25:bdb1c5a53b58 45
IanBenzMaxim 25:bdb1c5a53b58 46 enum DevicePages
IanBenzMaxim 25:bdb1c5a53b58 47 {
IanBenzMaxim 25:bdb1c5a53b58 48 DS28E25_PAGES = 16,
IanBenzMaxim 25:bdb1c5a53b58 49 DS28E22_PAGES = 8,
IanBenzMaxim 25:bdb1c5a53b58 50 DS28E15_PAGES = 2,
IanBenzMaxim 25:bdb1c5a53b58 51 UNKNOWN_PAGES = 0
IanBenzMaxim 25:bdb1c5a53b58 52 };
IanBenzMaxim 25:bdb1c5a53b58 53
IanBenzMaxim 25:bdb1c5a53b58 54 enum DeviceBlocks
IanBenzMaxim 25:bdb1c5a53b58 55 {
IanBenzMaxim 25:bdb1c5a53b58 56 DS28E25_BLOCKS = 8,
IanBenzMaxim 25:bdb1c5a53b58 57 DS28E22_BLOCKS = 4,
IanBenzMaxim 25:bdb1c5a53b58 58 DS28E15_BLOCKS = 4,
IanBenzMaxim 25:bdb1c5a53b58 59 UNKNOWN_BLOCKS = 0
IanBenzMaxim 25:bdb1c5a53b58 60 };
IanBenzMaxim 25:bdb1c5a53b58 61
IanBenzMaxim 33:a4c015046956 62 typedef array<std::uint8_t, 32> Page;
IanBenzMaxim 33:a4c015046956 63 typedef array<std::uint8_t, 32> Scratchpad;
IanBenzMaxim 33:a4c015046956 64 typedef array<std::uint8_t, 32> Mac;
IanBenzMaxim 33:a4c015046956 65 typedef array<std::uint8_t, 4> Segment;
IanBenzMaxim 33:a4c015046956 66 typedef array<std::uint8_t, 2> ManId;
IanBenzMaxim 25:bdb1c5a53b58 67
IanBenzMaxim 33:a4c015046956 68 // Manufacturer ID
IanBenzMaxim 33:a4c015046956 69 ManId manId;
IanBenzMaxim 25:bdb1c5a53b58 70
IanBenzMaxim 25:bdb1c5a53b58 71 static ISha256MacCoprocessor::CmdResult CalculateSegmentWriteMAC256(const ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 25:bdb1c5a53b58 72 unsigned int pageNum,
IanBenzMaxim 25:bdb1c5a53b58 73 unsigned int segmentNum,
IanBenzMaxim 33:a4c015046956 74 const Segment & newData,
IanBenzMaxim 33:a4c015046956 75 const Segment & oldData,
IanBenzMaxim 25:bdb1c5a53b58 76 const RomId & romId,
IanBenzMaxim 33:a4c015046956 77 const ManId & manId,
IanBenzMaxim 33:a4c015046956 78 Mac & mac);
IanBenzMaxim 25:bdb1c5a53b58 79 static ISha256MacCoprocessor::CmdResult CalculateProtectionWriteMAC256(const ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 25:bdb1c5a53b58 80 std::uint8_t newProtection,
IanBenzMaxim 25:bdb1c5a53b58 81 std::uint8_t oldProtection,
IanBenzMaxim 25:bdb1c5a53b58 82 const RomId & romId,
IanBenzMaxim 33:a4c015046956 83 const ManId & manId,
IanBenzMaxim 33:a4c015046956 84 Mac & mac);
IanBenzMaxim 25:bdb1c5a53b58 85 static ISha256MacCoprocessor::CmdResult CalculateNextSecret(ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 33:a4c015046956 86 const Page & binding,
IanBenzMaxim 33:a4c015046956 87 const Scratchpad & partial,
IanBenzMaxim 25:bdb1c5a53b58 88 const RomId & romId,
IanBenzMaxim 33:a4c015046956 89 const ManId & manId,
IanBenzMaxim 25:bdb1c5a53b58 90 unsigned int pageNum);
IanBenzMaxim 25:bdb1c5a53b58 91 static ISha256MacCoprocessor::CmdResult CalculateAuthMAC256(const ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 25:bdb1c5a53b58 92 unsigned int pageNum,
IanBenzMaxim 33:a4c015046956 93 const Scratchpad & challenge,
IanBenzMaxim 33:a4c015046956 94 const Page & pageData,
IanBenzMaxim 25:bdb1c5a53b58 95 const RomId & romId,
IanBenzMaxim 33:a4c015046956 96 const ManId & manId,
IanBenzMaxim 25:bdb1c5a53b58 97 bool anon,
IanBenzMaxim 33:a4c015046956 98 Mac & mac);
IanBenzMaxim 25:bdb1c5a53b58 99 static ISha256MacCoprocessor::CmdResult AuthVerify(const ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 25:bdb1c5a53b58 100 unsigned int pageNum,
IanBenzMaxim 33:a4c015046956 101 const Scratchpad & challenge,
IanBenzMaxim 33:a4c015046956 102 const Page & pageData,
IanBenzMaxim 25:bdb1c5a53b58 103 const RomId & romId,
IanBenzMaxim 33:a4c015046956 104 const ManId & manId,
IanBenzMaxim 25:bdb1c5a53b58 105 bool anon,
IanBenzMaxim 33:a4c015046956 106 const Mac & mac);
IanBenzMaxim 25:bdb1c5a53b58 107
IanBenzMaxim 25:bdb1c5a53b58 108 DS28E15_22_25(OneWireMaster & OW_master);
IanBenzMaxim 25:bdb1c5a53b58 109
IanBenzMaxim 25:bdb1c5a53b58 110 // Const member functions should not affect the state of the memory, block protection, or secret on the DS28Exx.
IanBenzMaxim 25:bdb1c5a53b58 111 // Scratchpad on the DS28Exx is considered mutable.
IanBenzMaxim 25:bdb1c5a53b58 112
IanBenzMaxim 25:bdb1c5a53b58 113 DevicePages devicePages();
IanBenzMaxim 25:bdb1c5a53b58 114 DeviceBlocks deviceBlocks();
IanBenzMaxim 25:bdb1c5a53b58 115
IanBenzMaxim 25:bdb1c5a53b58 116 //DS28Exx Specific Functions (DS28E15, DS28E22 & DS28E25)
IanBenzMaxim 25:bdb1c5a53b58 117 CmdResult LoadSecret(bool lock);
IanBenzMaxim 33:a4c015046956 118 CmdResult WriteScratchpad(const Scratchpad & data) const;
IanBenzMaxim 33:a4c015046956 119 CmdResult readSegment(unsigned int pageNum, unsigned int segmentNum, Segment & data) const;
IanBenzMaxim 33:a4c015046956 120 CmdResult writeSegment(unsigned int pageNum, unsigned int segmentNum, const Segment & data, bool continuing);
IanBenzMaxim 33:a4c015046956 121 CmdResult readPage(unsigned int pageNum, Page & rdbuf, bool continuing) const;
IanBenzMaxim 25:bdb1c5a53b58 122 CmdResult ComputeSecret(unsigned int pageNum, bool lock);
IanBenzMaxim 33:a4c015046956 123 CmdResult ComputeReadPageMAC(unsigned int pageNum, bool anon, Mac & mac) const;
IanBenzMaxim 25:bdb1c5a53b58 124 CmdResult WriteBlockProtection(std::uint8_t protection, bool continuing);
IanBenzMaxim 25:bdb1c5a53b58 125 CmdResult WriteAuthBlockProtection(const ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 25:bdb1c5a53b58 126 std::uint8_t newProtection,
IanBenzMaxim 25:bdb1c5a53b58 127 std::uint8_t oldProtection,
IanBenzMaxim 25:bdb1c5a53b58 128 bool continuing);
IanBenzMaxim 25:bdb1c5a53b58 129 CmdResult writeAuthSegment(const ISha256MacCoprocessor & MacCoproc,
IanBenzMaxim 25:bdb1c5a53b58 130 unsigned int pageNum,
IanBenzMaxim 25:bdb1c5a53b58 131 unsigned int segmentNum,
IanBenzMaxim 33:a4c015046956 132 const Segment & newData,
IanBenzMaxim 33:a4c015046956 133 const Segment & oldData,
IanBenzMaxim 25:bdb1c5a53b58 134 bool continuing);
IanBenzMaxim 25:bdb1c5a53b58 135 CmdResult writeAuthSegmentMAC(unsigned int pageNum,
IanBenzMaxim 25:bdb1c5a53b58 136 unsigned int segmentNum,
IanBenzMaxim 33:a4c015046956 137 const Segment & newData,
IanBenzMaxim 33:a4c015046956 138 const Mac & mac,
IanBenzMaxim 25:bdb1c5a53b58 139 bool continuing);
IanBenzMaxim 25:bdb1c5a53b58 140
IanBenzMaxim 25:bdb1c5a53b58 141 CmdResult ReadBlockProtectionStatus(unsigned int blockNum, std::uint8_t & status);
IanBenzMaxim 25:bdb1c5a53b58 142 // bool ReadAllBlockProtectionStatuses(std::uint8_t (&statuses)[numBlocks]);
IanBenzMaxim 25:bdb1c5a53b58 143
IanBenzMaxim 25:bdb1c5a53b58 144 private:
IanBenzMaxim 25:bdb1c5a53b58 145 OneWireMaster & m_OW_master;
IanBenzMaxim 25:bdb1c5a53b58 146
IanBenzMaxim 25:bdb1c5a53b58 147 CmdResult ReadStatus(bool personality, bool allpages, unsigned int pageNum, unsigned char *rdbuf) const;
IanBenzMaxim 25:bdb1c5a53b58 148 };
IanBenzMaxim 25:bdb1c5a53b58 149
IanBenzMaxim 25:bdb1c5a53b58 150 #endif