Linduino  1.3.0
Linear Technology Arduino-Compatible Demonstration Board
LTC4260.h
Go to the documentation of this file.
1 /*!
2 LTC4260: Hot Swap Controller with I2C Compatible Monitoring
3 
4 @verbatim
5 
6 The LTC4260 Hot Swap controller allows a board to be safely inserted and removed
7 from a live backplane. Using an external N-channel pass transistor, board supply
8 voltage and inrush current are ramped up at an adjustable rate. An I2C interface
9 and onboard ADC allow for monitoring of load current, voltage and fault status.
10 
11 I2C DATA FORMAT (MSB FIRST):
12 
13 Data Out:
14 Byte #1 Byte #2 Byte #3
15 
16 START SA6 SA5 SA4 SA3 SA2 SA1 SA0 W SACK C7 C6 C5 C4 C3 C2 C1 C0 SACK D7 D6 D5 D4 D3 D2 D1 D0 SACK STOP
17 
18 Data In:
19 Byte #1 Byte #2 Byte #3
20 
21 START SA6 SA5 SA4 SA3 SA2 SA1 SA0 W SACK C7 C6 C5 C4 C3 C2 C1 C0 SACK Repeat Start SA6 SA5 SA4 SA3 SA2 SA1 SA0 R SACK
22 
23 Byte #4 Byte #5
24 MSB LSB
25 D15 D14 D13 D12 D11 D10 D9 D8 MACK D7 D6 D5 D4 D3 D2 D1 D0 MNACK STOP
26 
27 START : I2C Start
28 Repeat Start: I2C Repeat Start
29 STOP : I2C Stop
30 SAx : I2C Address
31 SACK : I2C Slave Generated Acknowledge (Active Low)
32 MACK : I2C Master Generated Acknowledge (Active Low)
33 MNACK : I2C Master Generated Not Acknowledge
34 W : I2C Write (0)
35 R : I2C Read (1)
36 Cx : Command Code
37 Dx : Data Bits
38 X : Don't care
39 
40 
41 Example Code:
42 
43  float adin_lsb = (2.56/255); // ADIN Voltage Data is 8-Bit Data with 4.82mV LSB and 1.23V Full Scale
44  float adin_resisive_ratio = ((392 + 10)/10); // Resistor divider circuit at ADIN pin.
45  ack |= LTC4260_read(LTC4260_I2C_ADDRESS, LTC4260_ADIN_REG, &adin_code); // Read ADIN Register
46  adin_voltage = LTC4260_code_to_voltage(adin_code, adin_lsb, adin_resisive_ratio); // Calculate ADIN Voltage from ADIN Register data
47 
48 @endverbatim
49 
50 http://www.linear.com/product/LTC4260
51 
52 http://www.linear.com/product/LTC4260#demoboards
53 
54 
55 Copyright 2018(c) Analog Devices, Inc.
56 
57 All rights reserved.
58 
59 Redistribution and use in source and binary forms, with or without
60 modification, are permitted provided that the following conditions are met:
61  - Redistributions of source code must retain the above copyright
62  notice, this list of conditions and the following disclaimer.
63  - Redistributions in binary form must reproduce the above copyright
64  notice, this list of conditions and the following disclaimer in
65  the documentation and/or other materials provided with the
66  distribution.
67  - Neither the name of Analog Devices, Inc. nor the names of its
68  contributors may be used to endorse or promote products derived
69  from this software without specific prior written permission.
70  - The use of this software may or may not infringe the patent rights
71  of one or more patent holders. This license does not release you
72  from the requirement that you obtain separate licenses from these
73  patent holders to use this software.
74  - Use of the software either in source or binary form, must be run
75  on or directly connected to an Analog Devices Inc. component.
76 
77 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
78 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
79 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
80 IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
81 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
82 LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
83 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
84 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
85 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
86 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
87 */
88 
89 /*! @file
90  @ingroup LTC4260
91  Header for LTC4260: Hot Swap Controller with I2C Compatible Monitoring
92 */
93 
94 #ifndef LTC4260_H
95 #define LTC4260_H
96 
97 //! @name LTC4261 Address Assignment
98 //! @{
99 #define LTC4260_I2C_ADDRESS 0x44 //ADDR2 = L, ADDR1 = L, ADDR0 = L
100 #define LTC4260_I2C_ALERT_RESPONSE 0x0C
101 #define LTC4260_I2C_MASS_WRITE 0x5F
102 //!@}
103 
104 //! @name LTC4260 Register addresses
105 //! @{
106 // Register Addresses
107 #define LTC4260_CONTROL_REG 0x00
108 #define LTC4260_ALERT_REG 0x01
109 #define LTC4260_STATUS_REG 0x02
110 #define LTC4260_FAULT_REG 0x03
111 #define LTC4260_SENSE_REG 0x04
112 #define LTC4260_SOURCE_REG 0x05
113 #define LTC4260_ADIN_REG 0x06
114 //!@}
115 
116 //! @name LTC4260 Fault Register Bits
117 //! @{
118 // Fault Register Bit Positions
119 #define LTC4260_FET_SHORT_FAULT 0x20
120 #define LTC4260_EN_STATE_CHANGE 0x10
121 #define LTC4260_POWER_BAD_FAULT 0x08
122 #define LTC4260_OVERCURRENT_FAULT 0x04
123 #define LTC4260_UNDERVOLTAGE_FAULT 0x02
124 #define LTC4260_OVERVOLTAGE_FAULT 0x01
125 //!@}
126 
127 //! @name LTC4260 Alert Register Bits
128 //! @{
129 // Alert Register Bits
130 #define LTC4260_GPIO_OUTPUT_ENABLE 0x40
131 #define LTC4260_GPIO_OUTPUT_DISABLE 0xBF
132 #define LTC4260_FET_SHORT_ENABLE 0x20
133 #define LTC4260_FET_SHORT_DISABLE 0xDF
134 #define LTC4260_EN_STATE_ENABLE 0x10
135 #define LTC4260_EN_STATE_DISABLE 0xEF
136 #define LTC4260_POWER_BAD_ENABLE 0x08
137 #define LTC4260_POWER_BAD_DISABLE 0xF7
138 #define LTC4260_OVERCURRENT_ENABLE 0x04
139 #define LTC4260_OVERCURRENT_DISABLE 0xFB
140 #define LTC4260_UNDERVOLTAGE_ENABLE 0x02
141 #define LTC4260_UNDERVOLTAGE_DISABLE 0xFD
142 #define LTC4260_OVERVOLTAGE_ENABLE 0x01
143 #define LTC4260_OVERVOLTAGE_DISABLE 0xFE
144 //!@}
145 
146 //! @name LTC4260 Control Register Bits
147 //! @{
148 // Control Register Bit Positions
149 #define LTC4260_PGIO_POWER_GOODX 0x00
150 #define LTC4260_PGIO_POWER_GOOD 0x80
151 #define LTC4260_PGIO_GENERAL_PURPOSE_OUTPUT 0x40
152 #define LTC4260_PGIO_GENERAL_PURPOSE_INPUT 0xC0
153 
154 #define LTC4260_TEST_MODE_ENABLE 0x20
155 #define LTC4260_TEST_MODE_DISABLE 0xDF
156 
157 #define LTC4260_MASS_WRITE_ENABLE 0x10
158 #define LTC4260_MASS_WRITE_DISABLE 0xEF
159 
160 #define LTC4260_FET_ON 0x08
161 #define LTC4260_FET_OFF 0xF7
162 
163 #define LTC4260_OVERCURRENT_AUTO_RETRY_ENABLE 0x04
164 #define LTC4260_OVERCURRENT_AUTO_RETRY_DISABLE 0xFB
165 
166 #define LTC4260_UNDERVOLTAGE_AUTO_RETRY_ENABLE 0x02
167 #define LTC4260_UNDERVOLTAGE_AUTO_RETRY_DISABLE 0xFD
168 
169 #define LTC4260_OVERVOLTAGE_AUTO_RETRY_ENABLE 0x01
170 #define LTC4260_OVERVOLTAGE_AUTO_RETRY_DISABLE 0xFE
171 //!@}
172 
173 //! Calculates voltage from register code data
174 //! @return The function returns valtage calculated from register data
175 float LTC4260_code_to_voltage(uint8_t register_code, //! Data from registers
176  float LSB, //! Smallest incremental voltage
177  float resistor_divider_ratio //! the ratio that the voltages have been divided down. Set to 1 for no resistir divider circuit
178  );
179 
180 //! SMBus Alert ResponseProtocol: Sends an alert response command and releases /ALERT pin. LTC4260 responds with its address
181 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge
182 int8_t LTC4260_ARA(uint8_t alert_response_address, //!< the Alert Response Address on the I2C bus
183  uint8_t *i2c_address //!< the address of the alert source
184  );
185 
186 //! Write an 8-bit code to the LTC4260
187 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
188 int8_t LTC4260_write(uint8_t i2c_address, //! LTC4260 I2C ADDRESS
189  uint8_t command, //! Register address to be written into
190  uint8_t code //! Data to be written into the register
191  );
192 
193 
194 //! Reads an 8-bit adc_code from LTC4260
195 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
196 int8_t LTC4260_read(uint8_t i2c_address, //! LTC4260 I2C ADDRESS
197  uint8_t command, //! Register address to read from
198  uint8_t *code //! Contents of the requested register
199  );
200 
201 #endif
uint8_t i2c_address
int8_t LTC4260_ARA(uint8_t alert_response_address, uint8_t *i2c_address)
SMBus Alert ResponseProtocol: Sends an alert response command and releases /ALERT pin...
Definition: LTC4260.cpp:81
#define LSB
Location of Least Signficant Byte when Word is accessed as Byte Array.
Definition: Linduino.h:90
int8_t LTC4260_read(uint8_t i2c_address, uint8_t command, uint8_t *code)
Reads an 8-bit adc_code from LTC4260.
Definition: LTC4260.cpp:97
float LTC4260_code_to_voltage(uint8_t register_code, float LSB, float resistor_divider_ratio)
Calculates voltage from register code data.
Definition: LTC4260.cpp:72
int8_t LTC4260_write(uint8_t i2c_address, uint8_t command, uint8_t code)
Write an 8-bit code to the LTC4260.
Definition: LTC4260.cpp:89