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.
OneWire_Masters/DS2465/DS2465.hpp@33:a4c015046956, 2016-03-31 (annotated)
- Committer:
- IanBenzMaxim
- Date:
- Thu Mar 31 11:56:01 2016 -0500
- Revision:
- 33:a4c015046956
- Parent:
- 32:bce180b544ed
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
IanBenzMaxim | 21:00c94aeb533e | 1 | #ifndef DS2465_H |
IanBenzMaxim | 21:00c94aeb533e | 2 | #define DS2465_H |
IanBenzMaxim | 21:00c94aeb533e | 3 | |
IanBenzMaxim | 21:00c94aeb533e | 4 | #include "OneWire_Masters/OneWireMaster.h" |
IanBenzMaxim | 21:00c94aeb533e | 5 | #include "OneWire_Masters/ISha256MacCoprocessor.hpp" |
IanBenzMaxim | 21:00c94aeb533e | 6 | |
IanBenzMaxim | 27:d5aaefa252f1 | 7 | namespace mbed |
IanBenzMaxim | 27:d5aaefa252f1 | 8 | { |
IanBenzMaxim | 27:d5aaefa252f1 | 9 | class I2C; |
IanBenzMaxim | 27:d5aaefa252f1 | 10 | } |
IanBenzMaxim | 27:d5aaefa252f1 | 11 | |
IanBenzMaxim | 21:00c94aeb533e | 12 | class DS2465 : public OneWireMaster, public ISha256MacCoprocessor |
IanBenzMaxim | 21:00c94aeb533e | 13 | { |
IanBenzMaxim | 32:bce180b544ed | 14 | public: |
IanBenzMaxim | 21:00c94aeb533e | 15 | |
IanBenzMaxim | 21:00c94aeb533e | 16 | enum PageRegion |
IanBenzMaxim | 21:00c94aeb533e | 17 | { |
IanBenzMaxim | 21:00c94aeb533e | 18 | REGION_FULL_PAGE = 0x03, |
IanBenzMaxim | 21:00c94aeb533e | 19 | REGION_FIRST_HALF = 0x01, |
IanBenzMaxim | 21:00c94aeb533e | 20 | REGION_SECOND_HALF = 0x02 |
IanBenzMaxim | 21:00c94aeb533e | 21 | }; |
IanBenzMaxim | 21:00c94aeb533e | 22 | |
IanBenzMaxim | 21:00c94aeb533e | 23 | enum MemoryAddr |
IanBenzMaxim | 21:00c94aeb533e | 24 | { |
IanBenzMaxim | 21:00c94aeb533e | 25 | ADDR_SPAD = 0x00, |
IanBenzMaxim | 21:00c94aeb533e | 26 | ADDR_CMD_REG = 0x60, |
IanBenzMaxim | 21:00c94aeb533e | 27 | ADDR_STATUS_REG = 0x61, |
IanBenzMaxim | 21:00c94aeb533e | 28 | ADDR_DATA_REG = 0x62, |
IanBenzMaxim | 21:00c94aeb533e | 29 | ADDR_MAC_READ = 0x63, |
IanBenzMaxim | 21:00c94aeb533e | 30 | ADDR_SHA_SELECT_REG = 0x66, |
IanBenzMaxim | 21:00c94aeb533e | 31 | ADDR_WCFG_REG = 0x67, |
IanBenzMaxim | 24:8942d8478d68 | 32 | ADDR_TRSTL_REG = 0x68, |
IanBenzMaxim | 24:8942d8478d68 | 33 | ADDR_TMSP_REG = 0x69, |
IanBenzMaxim | 24:8942d8478d68 | 34 | ADDR_TW0L_REG = 0x6A, |
IanBenzMaxim | 24:8942d8478d68 | 35 | ADDR_TREC0_REG = 0x6B, |
IanBenzMaxim | 24:8942d8478d68 | 36 | ADDR_RWPU_REG = 0x6C, |
IanBenzMaxim | 24:8942d8478d68 | 37 | ADDR_TW1L_REG = 0x6D, |
IanBenzMaxim | 21:00c94aeb533e | 38 | ADDR_USER_MEM_PAGE_0 = 0x80, |
IanBenzMaxim | 21:00c94aeb533e | 39 | ADDR_USER_MEM_PAGE_1 = 0xA0 |
IanBenzMaxim | 21:00c94aeb533e | 40 | }; |
IanBenzMaxim | 21:00c94aeb533e | 41 | |
IanBenzMaxim | 32:bce180b544ed | 42 | struct Config |
IanBenzMaxim | 32:bce180b544ed | 43 | { |
IanBenzMaxim | 32:bce180b544ed | 44 | bool c1WS, cSPU, cPDN, cAPU; |
IanBenzMaxim | 32:bce180b544ed | 45 | |
IanBenzMaxim | 32:bce180b544ed | 46 | std::uint8_t readByte() const; |
IanBenzMaxim | 32:bce180b544ed | 47 | std::uint8_t writeByte() const; |
IanBenzMaxim | 32:bce180b544ed | 48 | |
IanBenzMaxim | 32:bce180b544ed | 49 | void reset(); |
IanBenzMaxim | 32:bce180b544ed | 50 | Config() { reset(); } |
IanBenzMaxim | 32:bce180b544ed | 51 | }; |
IanBenzMaxim | 32:bce180b544ed | 52 | |
IanBenzMaxim | 27:d5aaefa252f1 | 53 | DS2465(mbed::I2C & I2C_interface, std::uint8_t I2C_address); |
IanBenzMaxim | 21:00c94aeb533e | 54 | |
IanBenzMaxim | 21:00c94aeb533e | 55 | // Const member functions should not change the settings of the DS2465 or affect the state of the 1-Wire bus. |
IanBenzMaxim | 21:00c94aeb533e | 56 | // Read pointer, scratchpad, MAC output register, and command register on the DS2465 are considered mutable. |
IanBenzMaxim | 21:00c94aeb533e | 57 | |
IanBenzMaxim | 21:00c94aeb533e | 58 | //Misc. Functions |
IanBenzMaxim | 21:00c94aeb533e | 59 | OneWireMaster::CmdResult Detect(void); |
IanBenzMaxim | 21:00c94aeb533e | 60 | OneWireMaster::CmdResult Reset(void); // Resets DS2465 (NOTE: This is NOT a 1-Wire Reset) |
IanBenzMaxim | 32:bce180b544ed | 61 | OneWireMaster::CmdResult WriteConfig(const Config & config); |
IanBenzMaxim | 32:bce180b544ed | 62 | Config CurrentConfig() const; |
IanBenzMaxim | 21:00c94aeb533e | 63 | |
IanBenzMaxim | 21:00c94aeb533e | 64 | // DS2465 Memory Commands |
IanBenzMaxim | 27:d5aaefa252f1 | 65 | OneWireMaster::CmdResult ReadMemory(std::uint8_t addr, std::uint8_t * buf, std::size_t bufLen, bool skip_set_pointer = false) const; |
IanBenzMaxim | 24:8942d8478d68 | 66 | OneWireMaster::CmdResult WriteMemory(std::uint8_t addr, const std::uint8_t * buf, std::size_t bufLen) { return CWriteMemory(addr, buf, bufLen); } |
IanBenzMaxim | 24:8942d8478d68 | 67 | OneWireMaster::CmdResult WriteScratchpad(const std::uint8_t * buf, std::size_t bufLen) const { return CWriteMemory(ADDR_SPAD, buf, bufLen); } |
IanBenzMaxim | 21:00c94aeb533e | 68 | OneWireMaster::CmdResult CopyScratchpad(bool dest_secret, unsigned int pageNum, bool notFull, unsigned int segmentNum); |
IanBenzMaxim | 21:00c94aeb533e | 69 | |
IanBenzMaxim | 21:00c94aeb533e | 70 | // 1-Wire Master Commands |
IanBenzMaxim | 21:00c94aeb533e | 71 | virtual OneWireMaster::CmdResult OWInitMaster(void); |
IanBenzMaxim | 21:00c94aeb533e | 72 | virtual OneWireMaster::CmdResult OWReset(void); // Issues a 1-Wire Reset Pulse |
IanBenzMaxim | 32:bce180b544ed | 73 | virtual OneWireMaster::CmdResult OWTouchBit(std::uint8_t & sendrecvbit, OWLevel after_level); |
IanBenzMaxim | 32:bce180b544ed | 74 | virtual OneWireMaster::CmdResult OWReadByte(std::uint8_t & recvbyte, OWLevel after_level); |
IanBenzMaxim | 32:bce180b544ed | 75 | virtual OneWireMaster::CmdResult OWWriteByte(std::uint8_t sendbyte, OWLevel after_level); |
IanBenzMaxim | 27:d5aaefa252f1 | 76 | virtual OneWireMaster::CmdResult OWReadBlock(std::uint8_t *rx_buf, std::uint8_t rx_len); |
IanBenzMaxim | 27:d5aaefa252f1 | 77 | virtual OneWireMaster::CmdResult OWWriteBlock(const std::uint8_t *tran_buf, std::uint8_t tran_len); |
IanBenzMaxim | 27:d5aaefa252f1 | 78 | OneWireMaster::CmdResult OWWriteBlock(bool tx_mac, const std::uint8_t *tran_buf, std::uint8_t tran_len); |
IanBenzMaxim | 32:bce180b544ed | 79 | virtual OneWireMaster::CmdResult OWSetSpeed(OWSpeed new_speed); |
IanBenzMaxim | 32:bce180b544ed | 80 | virtual OneWireMaster::CmdResult OWSetLevel(OWLevel new_level); |
IanBenzMaxim | 24:8942d8478d68 | 81 | |
IanBenzMaxim | 32:bce180b544ed | 82 | virtual OneWireMaster::CmdResult OWTriplet(SearchDirection & search_direction, std::uint8_t & sbr, std::uint8_t & tsb); |
IanBenzMaxim | 21:00c94aeb533e | 83 | |
IanBenzMaxim | 21:00c94aeb533e | 84 | //DS2465 Coprocessor Commands |
IanBenzMaxim | 33:a4c015046956 | 85 | OneWireMaster::CmdResult computeNextMasterSecret(bool swap, unsigned int pageNum, PageRegion region); |
IanBenzMaxim | 33:a4c015046956 | 86 | OneWireMaster::CmdResult computeWriteMac(bool regwrite, bool swap, unsigned int pageNum, unsigned int segmentNum) const; |
IanBenzMaxim | 33:a4c015046956 | 87 | OneWireMaster::CmdResult computeSlaveSecret(bool swap, unsigned int pageNum, PageRegion region); |
IanBenzMaxim | 33:a4c015046956 | 88 | OneWireMaster::CmdResult computeAuthMac(bool swap, unsigned int pageNum, PageRegion region) const; |
IanBenzMaxim | 21:00c94aeb533e | 89 | |
IanBenzMaxim | 33:a4c015046956 | 90 | // ISha256MacCoprocessor Commands |
IanBenzMaxim | 33:a4c015046956 | 91 | virtual ISha256MacCoprocessor::CmdResult setMasterSecret(const Secret & secret); |
IanBenzMaxim | 33:a4c015046956 | 92 | virtual ISha256MacCoprocessor::CmdResult computeWriteMac(const WriteMacData & writeMacData, Mac & mac) const; |
IanBenzMaxim | 33:a4c015046956 | 93 | virtual ISha256MacCoprocessor::CmdResult computeAuthMac(const DevicePage & devicePage, const DeviceScratchpad & challenge, const AuthMacData & authMacData, Mac & mac) const; |
IanBenzMaxim | 33:a4c015046956 | 94 | virtual ISha256MacCoprocessor::CmdResult computeSlaveSecret(const DevicePage & devicePage, const DeviceScratchpad & deviceScratchpad, const SlaveSecretData & slaveSecretData); |
IanBenzMaxim | 21:00c94aeb533e | 95 | |
IanBenzMaxim | 21:00c94aeb533e | 96 | private: |
IanBenzMaxim | 21:00c94aeb533e | 97 | |
IanBenzMaxim | 27:d5aaefa252f1 | 98 | mbed::I2C & m_I2C_interface; |
IanBenzMaxim | 21:00c94aeb533e | 99 | std::uint8_t m_I2C_address; |
IanBenzMaxim | 24:8942d8478d68 | 100 | Config m_curConfig; |
IanBenzMaxim | 21:00c94aeb533e | 101 | |
IanBenzMaxim | 24:8942d8478d68 | 102 | OneWireMaster::CmdResult CWriteMemory(std::uint8_t addr, const std::uint8_t * buf, std::size_t bufLen) const; |
IanBenzMaxim | 27:d5aaefa252f1 | 103 | OneWireMaster::CmdResult PollBusy(std::uint8_t * pStatus = NULL); |
IanBenzMaxim | 32:bce180b544ed | 104 | OneWireMaster::CmdResult ConfigureLevel(OWLevel level); |
IanBenzMaxim | 21:00c94aeb533e | 105 | }; |
IanBenzMaxim | 21:00c94aeb533e | 106 | |
IanBenzMaxim | 21:00c94aeb533e | 107 | #endif |