TPS23861 Power over Ethernet  1.0.0
Software Application Programming Interface for Command and Control of the TI TPS23861 PSE Controller
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
C:/Users/a0207881/workspace_v5_3/PowerOverEthernet/TPS23861.h
Go to the documentation of this file.
1 /*************************************************************************************************************************************************/
10 /**************************************************************************************************************************************************
11 * Copyright © 2013-2014 Texas Instruments Incorporated - http://www.ti.com/ *
12 ***************************************************************************************************************************************************
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  *
17  * Redistributions of source code must retain the above copyright
18  * notice, this list of conditions and the following disclaimer.
19  *
20  * Redistributions in binary form must reproduce the above copyright
21  * notice, this list of conditions and the following disclaimer in the
22  * documentation and/or other materials provided with the
23  * distribution.
24  *
25  * Neither the name of Texas Instruments Incorporated nor the names of
26  * its contributors may be used to endorse or promote products derived
27  * from this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 * *
41 **************************************************************************************************************************************************/
42 #ifndef __TPS23861_H_
43 #define __TPS23861_H_
44 
45 #define TPS_SUCCESSFUL 0x00
46 #define TPS_ERR_PORT_IN_USE 0x80
47 #define TPS_ERR_PORT_NOT_IN_USE 0x81
48 #define TPS_ERR_NO_PORT_AVAILABLE 0x82
49 #define TPS_ERR_I2C_ERROR 0x83
50 #define TPS_ERR_I2C_ADDRESS_MISMATCH 0x40
51 
52 #define TPS_GIVE_ME_NEXT_PORT_AVAILABLE 0xff
53 #define TPS_PORT_NOT_REGISTERED_VALUE 0xff
54 
55 #define SWIZZLE_BYTES(x) {unsigned short y; y = x; x = (((y & 0xff) << 8) | (y >> 8)); }
56 
57 #define TPS_MAX_SYSTEM_PORTS 32
58 
59 typedef enum {
60  TPS_OFF = 0x0,
61  TPS_ON = 0x1
63 
66 typedef enum {
72 
74 #define PORT_1_VALUE 0x1
75 #define PORT_2_VALUE 0x2
76 #define PORT_3_VALUE 0x4
77 #define PORT_4_VALUE 0x8
78 
79 typedef unsigned char TPS238x_Ports_t;
80 
81 #define TPS238X_ALL_PORTS ((TPS238x_Ports_t)0xf)
82 
83 typedef struct {
84  unsigned int i2cAddress;
87 
88 
94 typedef struct {
95  unsigned char PEC_Power_Enable_Change : 1;
96  unsigned char PGC_Power_Good_Change : 1;
97  unsigned char DISF_Disconnect_Event : 1;
98  unsigned char DETC_Detection_Cycle : 1;
99  unsigned char CLASC_Classification_Cycle : 1;
100  unsigned char IFAULT_ICUT_ILIM_Fault : 1;
101  unsigned char INRF_Inrush_Fault : 1;
102  unsigned char SUPF_Supply_Event_Fault : 1;
104 
105 #define PEC 0x01
106 #define PGC 0x02
107 #define DISF 0x04
108 #define DETC 0x08
109 #define CLASC 0x10
110 #define IFAULT 0x20
111 #define INRF 0x40
112 #define SUPF 0x80
113 
114 
115 
116 
117 
118 typedef struct {
119  unsigned char PEMSK_Power_Enable_Unmask : 1;
120  unsigned char PGMSK_Power_Good_Unmask : 1;
121  unsigned char DIMSK_Disconnect_Unmask : 1;
122  unsigned char DEMSK_Detection_Cycle_Unmask : 1;
123  unsigned char CLMSK_Classificiation_Cycle_Unmask : 1;
124  unsigned char IFMSK_IFAULT_Unmask : 1;
125  unsigned char INMSK_Inrush_Fault_Unmask : 1;
126  unsigned char SUMSK_Supply_Event_Fault_Unmask : 1;
128 
129 #define PEMSK 0x01
130 #define PGMSK 0x02
131 #define DIMSK 0x04
132 #define DEMSK 0x08
133 #define CLMSK 0x10
134 #define IFMSK 0x20
135 #define INMSK 0x40
136 #define SUMSK 0x80
137 
138 
139 
140 
141 
142 typedef struct {
143  unsigned char PEC1_Power_Enable_Port_1_Event : 1;
144  unsigned char PEC2_Power_Enable_Port_2_Event : 1;
145  unsigned char PEC3_Power_Enable_Port_3_Event : 1;
146  unsigned char PEC4_Power_Enable_Port_4_Event : 1;
147  unsigned char PGC1_Power_Good_Port_1_Event : 1;
148  unsigned char PGC2_Power_Good_Port_2_Event : 1;
149  unsigned char PGC3_Power_Good_Port_3_Event : 1;
150  unsigned char PGC4_Power_Good_Port_4_Event : 1;
152 
153 #define PEC1 0x01
154 #define PEC2 0x02
155 #define PEC3 0x04
156 #define PEC4 0x08
157 #define PGC1 0x10
158 #define PGC2 0x20
159 #define PGC3 0x40
160 #define PGC4 0x80
161 
162 #define POWER_GOOD_EVENT_SHIFT 0
163 #define POWER_ENABLE_EVENT_SHIFT 4
164 
169 typedef struct {
170  unsigned char DETC1_Detection_Cycle_Port_1_Event : 1;
171  unsigned char DETC2_Detection_Cycle_Port_2_Event : 1;
172  unsigned char DETC3_Detection_Cycle_Port_3_Event : 1;
173  unsigned char DETC4_Detection_Cycle_Port_4_Event : 1;
174  unsigned char CLSC1_Classification_Cycle_Port_1_Event : 1;
175  unsigned char CLSC2_Classification_Cycle_Port_2_Event : 1;
176  unsigned char CLSC3_Classification_Cycle_Port_3_Event : 1;
177  unsigned char CLSC4_Classification_Cycle_Port_4_Event : 1;
179 
180 #define DETC1 0x01
181 #define DETC2 0x02
182 #define DETC3 0x04
183 #define DETC4 0x08
184 #define CLSC1 0x10
185 #define CLSC2 0x20
186 #define CLSC3 0x40
187 #define CLSC4 0x80
188 
189 #define DETECTION_EVENT_SHIFT 0
190 #define CLASSIFICATION_EVENT_SHIFT 4
191 
196 typedef struct {
197  unsigned char ICUT1_ICUT_Fault_Port_1_Event : 1;
198  unsigned char ICUT2_ICUT_Fault_Port_2_Event : 1;
199  unsigned char ICUT3_ICUT_Fault_Port_3_Event : 1;
200  unsigned char ICUT4_ICUT_Fault_Port_4_Event : 1;
201  unsigned char DISF1_Disconnect_Port_1_Event : 1;
202  unsigned char DISF2_Disconnect_Port_2_Event : 1;
203  unsigned char DISF3_Disconnect_Port_3_Event : 1;
204  unsigned char DISF4_Disconnect_Port_4_Event : 1;
206 
207 #define ICUT1 0x01
208 #define ICUT2 0x02
209 #define ICUT3 0x04
210 #define ICUT4 0x08
211 #define DISF1 0x10
212 #define DISF2 0x20
213 #define DISF3 0x40
214 #define DISF4 0x80
215 
216 #define ICUT_EVENT_SHIFT 0
217 #define DISCONNECT_EVENT_SHIFT 4
218 
223 typedef struct {
224  unsigned char INR1_Inrush_Fault_Port_1_Event : 1;
225  unsigned char INR2_Inrush_Fault_Port_2_Event : 1;
226  unsigned char INR3_Inrush_Fault_Port_3_Event : 1;
227  unsigned char INR4_Inrush_Fault_Port_4_Event : 1;
228  unsigned char ILIM1_Limit_Output_Current_Port_1_Event : 1;
229  unsigned char ILIM2_Limit_Output_Current_Port_2_Event : 1;
230  unsigned char ILIM3_Limit_Output_Current_Port_3_Event : 1;
231  unsigned char ILIM4_Limit_Output_Current_Port_4_Event : 1;
233 
234 #define INR1 0x01
235 #define INR2 0x02
236 #define INR3 0x04
237 #define INR4 0x08
238 #define ILIM1 0x10
239 #define ILIM2 0x20
240 #define ILIM3 0x40
241 #define ILIM4 0x80
242 
243 #define INRUSH_EVENT_SHIFT 0
244 #define ILIM_EVENT_SHIFT 4
245 
246 
251 typedef struct {
252  unsigned char Reserved_1 : 4;
253  unsigned char VPUV_VPower_Undervoltage_Event : 1;
254  unsigned char VDUV_Vdd_UVLO_Event : 1;
255  unsigned char Reserved_2 : 1;
256  unsigned char TSD_Thermal_Shutdown_Event : 1;
258 
259 #define VPUV 0x10
260 #define VDUV 0x20
261 #define TSD 0x80
262 
269 typedef struct {
270  unsigned char Detect : 4;
271  unsigned char Class : 4;
273 
275 typedef enum {
277  CLASS_1 = 0x1,
278  CLASS_2 = 0x2,
279  CLASS_3 = 0x3,
280  CLASS_4 = 0x4,
281  CLASS_0 = 0x6,
284  CLASS_5 = 0x9
286 
288 typedef enum {
301 
302 
303 #define DETECT 0x0F
304 #define CLASS 0xF0
305 #define CLASS_SHIFT 4
306 #define DETECT_SHIFT 0
307 #define GET_DETECT(x) (x & DETECT)
308 #define GET_CLASS(x) (x >> CLASS_SHIFT)
309 
310 
315 typedef struct {
316  unsigned char PE1_Power_Enable_Port_1_Status : 1;
317  unsigned char PE2_Power_Enable_Port_2_Status : 1;
318  unsigned char PE3_Power_Enable_Port_3_Status : 1;
319  unsigned char PE4_Power_Enable_Port_4_Status : 1;
320  unsigned char PG1_Power_Good_Port_1_Status : 1;
321  unsigned char PG2_Power_Good_Port_2_Status : 1;
322  unsigned char PG3_Power_Good_Port_3_Status : 1;
323  unsigned char PG4_Power_Good_Port_4_Status : 1;
325 
326 #define PE1_STATUS 0x01
327 #define PE2_STATUS 0x02
328 #define PE3_STATUS 0x04
329 #define PE4_STATUS 0x08
330 #define PG1_STATUS 0x10
331 #define PG2_STATUS 0x20
332 #define PG3_STATUS 0x40
333 #define PG4_STATUS 0x80
334 #define POWER_ENABLE_STATUS (PE1_STATUS + PE2_STATUS + PE3_STATUS + PE4_STATUS)
335 #define POWER_GOOD_STATUS (PG1_STATUS + PG2_STATUS + PG3_STATUS + PG4_STATUS)
336 #define POWER_GOOD_SHIFT 4
337 #define GET_POWER_ENABLE_STATUS(x) (x & POWER_ENABLE_STATUS)
338 #define GET_POWER_GOOD_STATUS(x) (x >> POWER_GOOD_SHIFT)
339 
344 typedef struct {
345  unsigned char I2C_slave_address : 7;
346  unsigned char Auto : 1;
348 
349 #define AUTO_BIT 0x80
350 #define I2C_ADDRESS_MASK 0x7F
351 
352 #define TPS238X_ALERT_RESPONSE_ADDRESS 0x0C
353 #define TPS238X_BROADCAST_ADDRESS 0x30
354 #define TPS238X_UNLOCK_CODE 0xAA
355 
356 
357 
358 
359 typedef struct {
360  unsigned char Port_1_Operating_Mode : 2;
361  unsigned char Port_2_Operating_Mode : 2;
362  unsigned char Port_3_Operating_Mode : 2;
363  unsigned char Port_4_Operating_Mode : 2;
365 
367 typedef enum {
373 
374 #define OPERATING_MODE_MASK 0x3
375 
376 #define OPERATING_PORT_1_MODE 0x03
377 #define OPERATING_PORT_2_MODE 0x0C
378 #define OPERATING_PORT_3_MODE 0x30
379 #define OPERATING_PORT_4_MODE 0xC0
380 
384 typedef struct {
385  unsigned char DCDE1_Disconnect_Enable_Port_1 : 1;
386  unsigned char DCDE2_Disconnect_Enable_Port_2 : 1;
387  unsigned char DCDE3_Disconnect_Enable_Port_3 : 1;
388  unsigned char DCDE4_Disconnect_Enable_Port_4 : 1;
389  unsigned char Reserved_3 : 4;
391 
392 #define DCDE1 0x01
393 #define DCDE2 0x02
394 #define DCDE3 0x04
395 #define DCDE4 0x08
396 
397 
398 
399 
400 
401 
402 
403 
404 
405 
406 typedef struct {
407  unsigned char DETE1_Detection_Enable_Port_1 : 1;
408  unsigned char DETE2_Detection_Enable_Port_2 : 1;
409  unsigned char DETE3_Detection_Enable_Port_3 : 1;
410  unsigned char DETE4_Detection_Enable_Port_4 : 1;
411  unsigned char CLE1_Classification_Enable_Port_1 : 1;
412  unsigned char CLE2_Classification_Enable_Port_2 : 1;
413  unsigned char CLE3_Classification_Enable_Port_3 : 1;
414  unsigned char CLE4_Classification_Enable_Port_4 : 1;
416 
417 #define DETE1 0x01
418 #define DETE2 0x02
419 #define DETE3 0x04
420 #define DETE4 0x08
421 #define CLE1 0x10
422 #define CLE2 0x20
423 #define CLE3 0x40
424 #define CLE4 0x80
425 
426 
427 
428 
429 typedef struct {
430  unsigned char Reserved_4 : 4;
431  unsigned char FSE1_Fast_Shutdown_Enable_Port_1 : 1;
432  unsigned char FSE2_Fast_Shutdown_Enable_Port_2 : 1;
433  unsigned char FSE3_Fast_Shutdown_Enable_Port_3 : 1;
434  unsigned char FSE4_Fast_Shutdown_Enable_Port_4 : 1;
436 
437 #define FSE1 0x10
438 #define FSE2 0x20
439 #define FSE3 0x40
440 #define FSE4 0x80
441 
442 #define FSE_SHIFT 4
443 
447 typedef struct {
448  unsigned char TDIS_Time_Disconnect_Delay : 2;
449  unsigned char TICUT_ICUT_Fault_Timing : 2;
450  unsigned char TSTART_Start_Time : 2;
451  unsigned char TLIM_ILIM_Fault_Timing : 2;
453 
455 typedef enum {
456  TLIM_60_MS = 0x0,
457  TLIM_30_MS = 0x1,
458  TLIM_15_MS = 0x2,
459  TLIM_10_MS = 0x3
461 
463 typedef enum {
464  TSTART_60_MS = 0x0,
465  TSTART_30_MS = 0x1,
468 
470 typedef enum {
471  TICUT_60_MS = 0x0,
472  TICUT_30_MS = 0x1,
473  TICUT_120_MS = 0x2,
476 
478 typedef enum {
479  TDIS_360_MS = 0x0,
480  TDIS_90_MS = 0x1,
481  TDIS_180_MS = 0x2,
482  TDIS_720_MS = 0x3
484 
485 
486 #define TDIS_MASK 0x3
487 #define TDIS_SHIFT 0x0
488 
489 #define TICUT_MASK 0xC
490 #define TICUT_SHIFT 0x2
491 
492 #define TSTART_MASK 0x30
493 #define TSTART_SHIFT 0x4
494 
495 #define TLIM_MASK 0xC0
496 #define TLIM_SHIFT 0x6
497 
501 typedef struct {
502  unsigned char _250M_Current_Sense_250_mOhm : 1;
503  unsigned char Reserved_5 : 3;
504  unsigned char MAINS_Detection_Voltage_Measurement_Duration : 1;
505  unsigned char Reserved_6 : 2;
506  unsigned char INTEN_INT_Pin_Mask : 1;
508 
509 #define _960_A_D_CONV_PER_SECOND 0x10
510 #define _800_A_D_CONV_PER_SECOND 0x00
511 
512 
513 #define _250M 0x01
514 #define MAINS 0x10
515 #define INTEN 0x80
516 
517 
518 
519 
520 
521 
522 
523 typedef struct {
524  unsigned char RDET1_Restart_Detection_Port_1 : 1;
525  unsigned char RDET2_Restart_Detection_Port_2 : 1;
526  unsigned char RDET3_Restart_Detection_Port_3 : 1;
527  unsigned char RDET4_Restart_Detection_Port_4 : 1;
528  unsigned char RCL1_Restart_Classification_Port_1 : 1;
529  unsigned char RCL2_Restart_Classification_Port_2 : 1;
530  unsigned char RCL3_Restart_Classification_Port_3 : 1;
531  unsigned char RCL4_Restart_Classification_Port_4 : 1;
533 
534 #define RDET1 0x01
535 #define RDET2 0x02
536 #define RDET3 0x04
537 #define RDET4 0x08
538 #define RCL1 0x10
539 #define RCL2 0x20
540 #define RCL3 0x40
541 #define RCL4 0x80
542 
543 #define RESTART_DETECTION_SHIFT 0
544 #define RESTART_DETECTION_MASK 0x0F
545 
546 #define RESTART_CLASSIFCATION_SHIFT 4
547 #define RESTART_CLASSIFCATION_MASK 0xF0
548 
553 
554 typedef struct {
555  unsigned char PWON1_Power_On_Port_1 : 1;
556  unsigned char PWON2_Power_On_Port_2 : 1;
557  unsigned char PWON3_Power_On_Port_3 : 1;
558  unsigned char PWON4_Power_On_Port_4 : 1;
559  unsigned char PWOFF1_Power_On_Port_1 : 1;
560  unsigned char PWOFF2_Power_On_Port_2 : 1;
561  unsigned char PWOFF3_Power_On_Port_3 : 1;
562  unsigned char PWOFF4_Power_On_Port_4 : 1;
564 
565 #define PWON1 0x01
566 #define PWON2 0x02
567 #define PWON3 0x04
568 #define PWON4 0x08
569 #define PWOFF1 0x10
570 #define PWOFF2 0x20
571 #define PWOFF3 0x40
572 #define PWOFF4 0x80
573 
574 #define POWER_OFF_SHIFT 4
575 #define POWER_OFF_MASK 0xF0
576 
577 #define POWER_ON_SHIFT 0
578 #define POWER_ON_MASK 0x0F
579 
583 typedef struct {
584  unsigned char RESP1_Reset_Port_1 : 1;
585  unsigned char RESP1_Reset_Port_2 : 1;
586  unsigned char RESP1_Reset_Port_3 : 1;
587  unsigned char RESP1_Reset_Port_4 : 1;
588  unsigned char RESAL_Reset_Registers : 1;
589  unsigned char Reserved_7 : 1;
590  unsigned char CLINP_Clear_Interrupt_Pin : 1;
591  unsigned char CLRAIN_Clear_Interrupt_Bits : 1;
593 
594 #define RESP1 0x01
595 #define RESP2 0x02
596 #define RESP3 0x04
597 #define RESP4 0x08
598 #define RESAL 0x10
599 #define CLINP 0x40
600 #define CLRAIN 0x80
601 
605 typedef struct {
606  unsigned char ICV_IC_Version_Number : 3;
607  unsigned char MFR_ID_Manufacture_ID_Number : 5;
609 
610 #define ICV 0x07
611 #define MFR_ID 0xF8
612 #define MFR_ID_SHIFT 3
613 #define MFR_ID_DEFAULT 0x0A // This is the the results in the MFR_ID section of the register
614 #define ICV_DEFAULT 0x00
615 #define ID_REGISTER_DEFAULT ((MFR_ID_DEFAULT<<MFR_ID_SHIFT) | ICV_DEFAULT)
616 
620 typedef struct {
621  unsigned char LEGMOD1_Legacy_Detect_Port_1 : 2;
622  unsigned char LEGMOD2_Legacy_Detect_Port_2 : 2;
623  unsigned char LEGMOD3_Legacy_Detect_Port_3 : 2;
624  unsigned char LEGMOD4_Legacy_Detect_Port_4 : 2;
626 
628 typedef enum {
633 
634 
635 #define LEGMOD1 0x03
636 #define LEGMOD2 0x0C
637 #define LEGMOD3 0x30
638 #define LEGMOD4 0xC0
639 
640 #define LEGACY_MODE_MASK 3
641 
642 #define LEGMOD1_SHIFT 0
643 #define LEGMOD2_SHIFT 2
644 #define LEGMOD3_SHIFT 4
645 #define LEGMOD4_SHIFT 6
646 
650 typedef struct {
651  unsigned char TECLEN1_Two_Event_Classification_Port_1 : 2;
652  unsigned char TECLEN2_Two_Event_Classification_Port_2 : 2;
653  unsigned char TECLEN3_Two_Event_Classification_Port_3 : 2;
654  unsigned char TECLEN4_Two_Event_Classification_Port_4 : 2;
656 
658 typedef enum {
664 
665 #define TECLEN1 0x03
666 #define TECLEN2 0x0C
667 #define TECLEN3 0x30
668 #define TECLEN4 0xC0
669 
670 #define TWO_EVENT_MASK 3
671 
672 #define TECLEN1_SHIFT 0
673 #define TECLEN2_SHIFT 2
674 #define TECLEN3_SHIFT 4
675 #define TECLEN4_SHIFT 6
676 
680 typedef struct {
681  unsigned char _4P12DIS_Disconnect_Mode_Four_Port_1_2 : 3;
682  unsigned char _4P12EN_Enable_Four_Port_Mode_1_2 : 1;
683  unsigned char _4P34DIS_Disconnect_Mode_Four_Port_3_4 : 3;
684  unsigned char _4P34EN_Enable_Four_Port_Mode_3_4 : 1;
686 
688 typedef enum {
695 
696 #define _4P12DIS 0x07
697 #define _4P12EN 0x08
698 #define _4P34DIS 0x70
699 #define _4P34EN 0x80
700 
701 #define FOUR_PAIR_DISCONNECT_MASK 7
702 
703 #define _4P12DIS_SHIFT 0
704 #define _4P12EN_SHIFT 3
705 
706 #define _4P34DIS_SHIFT 4
707 #define _4P34EN_SHIFT 7
708 
712 typedef struct {
713  unsigned char TMR_Timer_Period_10_ms : 4;
714  unsigned char CL5EN1_Class_5_Enable_Port_1 : 1;
715  unsigned char CL5EN2_Class_5_Enable_Port_2 : 1;
716  unsigned char CL5EN3_Class_5_Enable_Port_3 : 1;
717  unsigned char CL5EN4_Class_5_Enable_Port_4 : 1;
719 
720 #define TMR_MASK 0x0F
721 #define CL5EN1 0x10
722 #define CL5EN2 0x20
723 #define CL5EN3 0x40
724 #define CL5EN4 0x80
725 
726 #define CLASS_5_ENABLE_SHIFT 4
727 
731 typedef struct {
732  unsigned char DCTH1_Disconnect_Current_Threshold_Port_1 : 2;
733  unsigned char DCTH2_Disconnect_Current_Threshold_Port_2 : 2;
734  unsigned char DCTH3_Disconnect_Current_Threshold_Port_3 : 2;
735  unsigned char DCTH4_Disconnect_Current_Threshold_Port_4 : 2;
737 
739 typedef enum {
745 
746 #define DCTH1 0x03
747 #define DCTH2 0x0C
748 #define DCTH3 0x30
749 #define DCTH4 0xC0
750 
751 #define DISCONNECT_THRESHOLD_MASK 3
752 
753 #define DCTH1_SHIFT 0
754 #define DCTH2_SHIFT 2
755 #define DCTH3_SHIFT 4
756 #define DCTH4_SHIFT 6
757 
762 typedef struct {
763  unsigned char ICUT_Current_Threshold_Port_1 : 3;
764  unsigned char Reserved_8 : 1;
765  unsigned char ICUT_Current_Threshold_Port_2 : 3;
766  unsigned char Reserved_9 : 1;
768 
770 typedef enum {
774 
780 
781 #define ICUT_THRESHOLD_MASK 7
782 
783 #define ICUT_PORT_1 0x07
784 #define ICUT_PORT_2 0x70
785 
786 #define ICUT_PORT_1_SHIFT 0
787 #define ICUT_PORT_2_SHIFT 4
788 
793 
794 typedef struct {
795  unsigned char ICUT_Current_Threshold_Port_3 : 3;
796  unsigned char Reserved_10 : 1;
797  unsigned char ICUT_Current_Threshold_Port_4 : 3;
798  unsigned char Reserved_11 : 1;
800 
801 #define ICUT_PORT_3 0x07
802 #define ICUT_PORT_4 0x70
803 
804 #define ICUT_PORT_3_SHIFT 0
805 #define ICUT_PORT_4_SHIFT 4
806 
810 typedef struct {
811  unsigned char Temp_Value;
813 
814 #define CONVERT_TEMP(x) (((x*652)-20000)/1000)
815 
816 
817 
818 
819 
820 typedef union {
822  unsigned short Input_Voltage : 14;
823  unsigned short Reserved_12 : 2;
824  } Input_Voltage_Short;
825 
827  unsigned char Input_Voltage_LSB : 8;
828  unsigned char Input_Voltage_MSB : 6;
829  unsigned char Reserved_13 : 2;
830  } Input_Voltage_Char;
832 
833 typedef unsigned short TPS238x_Input_Voltage_t;
834 
835 #define TPS2368X_INPUT_VOLTAGE_MASK_SHORT 0x3FFF
836 
846 
847 typedef union {
849  unsigned short Port_Current : 14;
850  unsigned short Reserved_14 : 2;
851  } Port_Current_Short;
852 
854  unsigned char Port_Current_LSB : 8;
855  unsigned char Port_Current_MSB : 6;
856  unsigned char Reserved_15 : 2;
857  } Port_Current_Char;
859 
860 typedef unsigned short TPS238x_Port_Current_t;
861 
862 #define TPS2368X_PORT_CURRENT_MASK_SHORT 0x3FFF
863 
873 typedef union {
875  unsigned short Port_Voltage : 14;
876  unsigned short Reserved_16 : 2;
877  } Port_Voltage_Short;
878 
880  unsigned char Port_Voltage_LSB : 8;
881  unsigned char Port_Voltage_MSB : 6;
882  unsigned char Reserved_17 : 2;
883  } Port_Voltage_Char;
885 
886 typedef unsigned short TPS238x_Port_Voltage_t;
887 
888 #define TPS2368X_PORT_VOLTAGE_MASK_SHORT 0x3FFF
889 
893 
894 typedef struct {
895  unsigned char Reserved_18 : 4;
896  unsigned char POEP1_Foldback_Curve_Port_1 : 1;
897  unsigned char POEP1_Foldback_Curve_Port_2 : 1;
898  unsigned char POEP1_Foldback_Curve_Port_3 : 1;
899  unsigned char POEP1_Foldback_Curve_Port_4 : 1;
901 
903 typedef enum {
907 
908 #define POEP1 0x10
909 #define POEP2 0x20
910 #define POEP3 0x40
911 #define POEP4 0x80
912 
913 #define POE_PLUS_SHIFT 4
914 
918 typedef struct {
919  unsigned char WDS_Watchdog_Status : 1;
920  unsigned char IWD_I2C_Watchdog_Disable : 4;
921  unsigned char Reserved_19 : 3;
923 
924 #define WDS 0x01
925 #define IWD 0x1E
926 
927 #define IWD_SHIFT 1
928 #define IWD_MASK_VALUE 0xB
929 
930 
931 
932 
933 typedef struct {
934  unsigned char Reserved_20 : 5;
935  unsigned char IGATE_Gate_Pullup_Current : 1;
936  unsigned char CLDN_Fault_Cool_Down_Timer : 2;
938 
940 typedef enum {
945 
946 #define IGATE 0x20
947 #define CLDN_MASK 0xC0
948 
949 #define CLDN_SHIFT 6
950 
951 #define GATE_PULLUP_CURRENT_50_MICROAMP 0
952 #define GATE_PULLUP_CURRENT_25_MICROAMP 1
953 
964 
965 typedef union {
967  unsigned short Port_Detect_Resistance : 14;
968  unsigned short Detect_Status : 2;
969  } Port_Detect_Resistance_Short;
970 
972  unsigned char Port_Detect_Resistance_LSB : 8;
973  unsigned char Port_Detect_Resistance_MSB : 6;
974  unsigned char Detect_Status : 2;
975  } Port_Detect_Resistance_Char;
977 
978 typedef unsigned short TPS238x_Port_Detect_Resistance_t;
979 
980 // Determines the most recent detection result status. Used in tps_GetDetectResistance()
981 typedef enum {
987 
988 #define PORT_RESISTANCE_MASK_SHORT 0x3FFF
989 #define RS_MASK_SHORT 0xC000
990 #define RS_SHIFT_SHORT 14
991 
1003 typedef union {
1005  unsigned short Port_Voltage_Difference : 12;
1006  unsigned short Voltage_Difference_Status : 4;
1007  } Port_Voltage_Difference_Short;
1008 
1010  unsigned char Port_Voltage_Difference_LSB : 8;
1011  unsigned char Port_Voltage_Difference_MSB : 6;
1012  unsigned char Voltage_Difference_Status : 2;
1013  } Port_Voltage_Difference_Char;
1015 
1016 typedef unsigned short TPS238x_Port_Voltage_Difference_t;
1017 
1020 typedef enum {
1028 
1029 
1030 #define PORT_VOLTAGE_DIFFERENCE_MASK_SHORT 0x0FFF
1031 #define VDS_MASK_SHORT 0xF000
1032 #define VDS_SHIFT_SHORT 12
1033 
1035 #define CONVERT_PORT_NUM(x) (1 << ((uint8_t)x-1))
1036 
1037 
1038 /**********************************************************************
1039  I2C Commands for the TPS23861
1040 ***********************************************************************/
1041 
1042 // I2C Commands Values
1043 #define TPS238X_INTERRUPT_COMMAND 0x00
1044 #define TPS238X_INTERRUPT_MASK_COMMAND 0x01
1045 #define TPS238X_POWER_EVENT_COMMAND 0x02
1046 #define TPS238X_POWER_EVENT_CLEAR_COMMAND 0x03
1047 #define TPS238X_DETECTION_EVENT_COMMAND 0x04
1048 #define TPS238X_DETECTION_EVENT_CLEAR_COMMAND 0x05
1049 #define TPS238X_FAULT_EVENT_COMMAND 0x06
1050 #define TPS238X_FAULT_EVENT_CLEAR_COMMAND 0x07
1051 #define TPS238X_INRUSH_LIMIT_EVENT_COMMAND 0x08
1052 #define TPS238X_INRUSH_LIMIT_EVENT_CLEAR_COMMAND 0x09
1053 #define TPS238X_SUPPLY_EVENT_COMMAND 0x0A
1054 #define TPS238X_SUPPLY_EVENT_CLEAR_COMMAND 0x0B
1055 #define TPS238X_PORT_1_STATUS_COMMAND 0x0C
1056 #define TPS238X_PORT_2_STATUS_COMMAND 0x0D
1057 #define TPS238X_PORT_3_STATUS_COMMAND 0x0E
1058 #define TPS238X_PORT_4_STATUS_COMMAND 0x0F
1059 #define TPS238X_POWER_STATUS_COMMAND 0x10
1060 #define TPS238X_I2C_SLAVE_ADDRESS_COMMAND 0x11
1061 #define TPS238X_OPERATING_MODE_COMMAND 0x12
1062 #define TPS238X_DISCONNECT_ENABLE_COMMAND 0x13
1063 #define TPS238X_DETECT_CLASS_ENABLE_COMMAND 0x14
1064 #define TPS238X_PORT_POWER_PRIORITY_COMMAND 0x15
1065 #define TPS238X_TIMING_CONFIGURATION_COMMAND 0x16
1066 #define TPS238X_GENERAL_MASK_1_COMMAND 0x17
1067 #define TPS238X_DETECT_CLASS_RESTART_COMMAND 0x18
1068 #define TPS238X_POWER_ENABLE_COMMAND 0x19
1069 #define TPS238X_RESET_COMMAND 0x1A
1070 #define TPS238X_ID_COMMAND 0x1B
1071 
1072 #define TPS238X_TEST_ENABLE_COMMAND 0x1D
1073 
1074 #define TPS238X_LEGACY_DETECT_MODE_COMMAND 0x20
1075 #define TPS238X_TWO_EVENT_CLASSIFICATION_COMMAND 0x21
1076 #define TPS238X_FOUR_PAIR_MODE_COMMAND 0x22
1077 
1078 #define TPS238X_CLASS_FIVE_TIMER_ENABLE_COMMAND 0x27
1079 
1080 #define TPS238X_DISCONNECT_THRESHOLD_COMMAND 0x29
1081 #define TPS238X_ICUT21_CONFIGURATION_COMMAND 0x2A
1082 #define TPS238X_ICUT43_CONFIGURATION_COMMAND 0x2B
1083 #define TPS238X_TEMPERATURE_COMMAND 0x2C
1084 
1085 #define TPS238X_INPUT_VOLTAGE_COMMAND 0x2E
1086 #define TPS238X_INPUT_VOLTAGE_LSB_COMMAND 0x2E
1087 #define TPS238X_INPUT_VOLTAGE_MSB_COMMAND 0x2F
1088 
1089 #define TPS238X_PORT_1_CURRENT_COMMAND 0x30
1090 #define TPS238X_PORT_1_CURRENT_LSB_COMMAND 0x30
1091 #define TPS238X_PORT_1_CURRENT_MSB_COMMAND 0x31
1092 
1093 #define TPS238X_PORT_1_VOLTAGE_COMMAND 0x32
1094 #define TPS238X_PORT_1_VOLTAGE_LSB_COMMAND 0x32
1095 #define TPS238X_PORT_1_VOLTAGE_MSB_COMMAND 0x33
1096 
1097 #define TPS238X_PORT_2_CURRENT_COMMAND 0x34
1098 #define TPS238X_PORT_2_CURRENT_LSB_COMMAND 0x34
1099 #define TPS238X_PORT_2_CURRENT_MSB_COMMAND 0x35
1100 
1101 #define TPS238X_PORT_2_VOLTAGE_COMMAND 0x36
1102 #define TPS238X_PORT_2_VOLTAGE_LSB_COMMAND 0x36
1103 #define TPS238X_PORT_2_VOLTAGE_MSB_COMMAND 0x37
1104 
1105 #define TPS238X_PORT_3_CURRENT_COMMAND 0x38
1106 #define TPS238X_PORT_3_CURRENT_LSB_COMMAND 0x38
1107 #define TPS238X_PORT_3_CURRENT_MSB_COMMAND 0x39
1108 
1109 #define TPS238X_PORT_3_VOLTAGE_COMMAND 0x3A
1110 #define TPS238X_PORT_3_VOLTAGE_LSB_COMMAND 0x3A
1111 #define TPS238X_PORT_3_VOLTAGE_MSB_COMMAND 0x3B
1112 
1113 #define TPS238X_PORT_4_CURRENT_COMMAND 0x3C
1114 #define TPS238X_PORT_4_CURRENT_LSB_COMMAND 0x3C
1115 #define TPS238X_PORT_4_CURRENT_MSB_COMMAND 0x3D
1116 
1117 #define TPS238X_PORT_4_VOLTAGE_COMMAND 0x3E
1118 #define TPS238X_PORT_4_VOLTAGE_LSB_COMMAND 0x3E
1119 #define TPS238X_PORT_4_VOLTAGE_MSB_COMMAND 0x3F
1120 
1121 #define TPS238X_POE_PLUS_COMMAND 0x40
1122 #define TPS238X_FIRMWARE_REVISION_COMMAND 0x41
1123 #define TPS238X_I2C_WATCHDOG_COMMAND 0x42
1124 #define TPS238X_DEVICE_ID_COMMAND 0x43
1125 
1126 #define TPS238X_COOL_DOWN_GATE_DRIVE_COMMAND 0x45
1127 
1128 #define TPS238X_PORT_1_DETECT_RESISTANCE_COMMAND 0x60
1129 #define TPS238X_PORT_1_DETECT_RESISTANCE_LSB_COMMAND 0x60
1130 #define TPS238X_PORT_1_DETECT_RESISTANCE_MSB_COMMAND 0x61
1131 
1132 #define TPS238X_PORT_2_DETECT_RESISTANCE_COMMAND 0x62
1133 #define TPS238X_PORT_2_DETECT_RESISTANCE_LSB_COMMAND 0x62
1134 #define TPS238X_PORT_2_DETECT_RESISTANCE_MSB_COMMAND 0x63
1135 
1136 #define TPS238X_PORT_3_DETECT_RESISTANCE_COMMAND 0x64
1137 #define TPS238X_PORT_3_DETECT_RESISTANCE_LSB_COMMAND 0x64
1138 #define TPS238X_PORT_3_DETECT_RESISTANCE_MSB_COMMAND 0x65
1139 
1140 #define TPS238X_PORT_4_DETECT_RESISTANCE_COMMAND 0x66
1141 #define TPS238X_PORT_4_DETECT_RESISTANCE_LSB_COMMAND 0x66
1142 #define TPS238X_PORT_4_DETECT_RESISTANCE_MSB_COMMAND 0x67
1143 
1144 #define TPS238X_PORT_1_DETECT_VOLTAGE_DIFF_COMMAND 0x68
1145 #define TPS238X_PORT_1_DETECT_VOLTAGE_DIFF_LSB_COMMAND 0x68
1146 #define TPS238X_PORT_1_DETECT_VOLTAGE_DIFF_MSB_COMMAND 0x69
1147 
1148 #define TPS238X_PORT_2_DETECT_VOLTAGE_DIFF_COMMAND 0x6A
1149 #define TPS238X_PORT_2_DETECT_VOLTAGE_DIFF_LSB_COMMAND 0x6A
1150 #define TPS238X_PORT_2_DETECT_VOLTAGE_DIFF_MSB_COMMAND 0x6B
1151 
1152 #define TPS238X_PORT_3_DETECT_VOLTAGE_DIFF_COMMAND 0x6C
1153 #define TPS238X_PORT_3_DETECT_VOLTAGE_DIFF_LSB_COMMAND 0x6C
1154 #define TPS238X_PORT_3_DETECT_VOLTAGE_DIFF_MSB_COMMAND 0x6D
1155 
1156 #define TPS238X_PORT_4_DETECT_VOLTAGE_DIFF_COMMAND 0x6E
1157 #define TPS238X_PORT_4_DETECT_VOLTAGE_DIFF_LSB_COMMAND 0x6E
1158 #define TPS238X_PORT_4_DETECT_VOLTAGE_DIFF_MSB_COMMAND 0x6F
1159 
1160 
1161 /*************************************************************************************************************/
1162 /* PROTOTYPES */
1163 /*************************************************************************************************************/
1164 
1165 #ifdef __CPLUSPLUS
1166 extern "C" {
1167 #endif
1168 
1169 uint8_t tps_RegisterPort (uint16_t device_i2c_address, TPS238x_PortNum_t devicePortNum);
1170 uint16_t tps_GetDeviceI2CAddress (uint8_t systemPortNum);
1171 TPS238x_PortNum_t tps_GetDevicePortNum (uint8_t systemPortNum);
1172 uint8_t tps_GetSystemPortNumber (uint16_t deviceI2CAddress, TPS238x_PortNum_t devicePortNum);
1173 uint8_t tps_SetI2CAddresses (uint8_t temp_i2cAddress, uint8_t numDevices, uint8_t *list_ofAddresses, TPS238x_On_Off_t *list_ofAutoMode);
1174 uint8_t tps_SetDeviceInterruptMask (uint8_t device_i2c_address, TPS238X_Interrupt_Mask_Register_t intMask, uint8_t intDelayTime);
1175 uint8_t tps_GetDeviceInterruptMask (uint8_t device_i2c_address, TPS238X_Interrupt_Mask_Register_t *intMask, uint8_t *intDelayTime);
1176 uint8_t tps_GetDeviceInterruptStatus (uint8_t device_i2c_address, TPS238X_Interrupt_Register_t *status);
1177 uint8_t tps_GetDeviceAllInterruptEvents (uint8_t device_i2c_address,
1178  TPS238x_On_Off_t clearEvent,
1179  TPS238x_Ports_t *powerEnablePortEvents,
1180  TPS238x_Ports_t *powerGoodPortEvents,
1181  TPS238x_Ports_t *detectionPortEvents,
1182  TPS238x_Ports_t *classificationPortEvents,
1183  TPS238x_Ports_t *icutPortEvents,
1184  TPS238x_Ports_t *disconnectPortEvents,
1185  TPS238x_Ports_t *inrushPortEvents,
1186  TPS238x_Ports_t *ilimPortEvents,
1187  TPS238X_Supply_Event_Register_t *supplyEvents);
1188 uint8_t tps_GetPortDetectClassStatus (uint8_t systemPortNum, TPS238x_Detection_Status_t *detectionStatus,
1189  TPS238x_Classification_Status_t *classificationStatus);
1190 uint8_t tps_GetPortDetectionStatus (uint8_t systemPortNum, TPS238x_Detection_Status_t *detectionStatus);
1191 uint8_t tps_GetPortClassificationStatus (uint8_t systemPortNum, TPS238x_Classification_Status_t *classificationStatus);
1192 uint8_t tps_GetDevicePowerStatus (uint8_t device_i2c_address, TPS238x_Ports_t *powerEnablePorts, TPS238x_Ports_t *powerGoodPorts);
1193 uint8_t tps_GetDevicePowerEnableStatus (uint8_t device_i2c_address, TPS238x_Ports_t *powerEnablePorts);
1194 uint8_t tps_GetPortPowerEnableStatus (uint8_t systemPortNum);
1195 uint8_t tps_GetDevicePowerGoodStatus (uint8_t device_i2c_address, TPS238x_Ports_t *powerGoodPorts);
1196 uint8_t tps_GetPortPowerGoodStatus (uint8_t systemPortNum);
1197 uint8_t tps_SetDevicePowerOn (uint8_t device_i2c_address, TPS238x_Ports_t portsPoweredOn);
1198 uint8_t tps_SetDevicePowerOff (uint8_t device_i2c_address, TPS238x_Ports_t portsPoweredOff);
1199 uint8_t tps_SetPortPower (uint8_t systemPortNum, TPS238x_On_Off_t on_off);
1200 uint8_t tps_GetDeviceDetectionEnable (uint8_t device_i2c_address, TPS238x_Ports_t *detectPorts);
1201 uint8_t tps_GetPortDetectionEnable (uint8_t systemPortNum);
1202 uint8_t tps_GetDeviceClassificationEnable (uint8_t device_i2c_address, TPS238x_Ports_t *classPorts);
1203 uint8_t tps_GetPortClassificationEnable (uint8_t systemPortNum);
1204 uint8_t tps_GetDeviceDetectClassEnable (uint8_t device_i2c_address, TPS238x_Ports_t *detectPorts, TPS238x_Ports_t *classPorts);
1205 uint8_t tps_SetDeviceDetectClassEnable (uint8_t device_i2c_address, TPS238x_Ports_t detectPorts, TPS238x_Ports_t classPorts);
1206 uint8_t tps_SetPortDetectClassEnable (uint8_t systemPortNum, TPS238x_On_Off_t on_off_detect, TPS238x_On_Off_t on_off_class);
1207 uint8_t tps_GetDeviceDisconnectEnable (uint8_t device_i2c_address, TPS238x_Ports_t *disconnectPorts);
1208 uint8_t tps_SetDeviceDisconnectEnable (uint8_t device_i2c_address, TPS238x_Ports_t disconnectPorts, TPS238x_Disconnect_Threshold_t disconnectThreshold1,
1209  TPS238x_Disconnect_Threshold_t disconnectThreshold2, TPS238x_Disconnect_Threshold_t disconnectThreshold3,
1210  TPS238x_Disconnect_Threshold_t disconnectThreshold4);
1211 uint8_t tps_SetPortDisconnectEnable (uint8_t systemPortNum, TPS238x_On_Off_t on_off, TPS238x_Disconnect_Threshold_t disconnectThreshold);
1212 uint8_t tps_SetDeviceTiming (uint8_t device_i2c_address, TPS238x_ILIM_Timing_t ilimTiming, TPS238x_TStart_Timing_t startTiming,
1213  TPS238x_TICUT_Timing_t icutTiming, TPS238x_TDIS_Timing_t disconnectTiming,
1214  TPS238x_Cool_Down_Timing_t coolDownFaultTiming);
1215 uint8_t tps_FastShutdownDeviceEnable (uint8_t device_i2c_address, TPS238x_Ports_t ports);
1216 uint8_t tps_FastShutdownPortEnable (uint8_t systemPortNum, TPS238x_On_Off_t on_off);
1217 uint8_t tps_ConfigPort (uint8_t systemPortNum, TPS238x_Operating_Modes_t operatingMode, TPS238x_Legacy_Detect_t legacyDetect,
1218  TPS238x_Two_Event_t twoEvent, TPS238x_On_Off_t class5Enable,
1219  TPS238x_Disconnect_Threshold_t disconnectThreshold, TPS238x_ICUT_Config_t icutCurrentThreshold,
1220  TPS238x_POE_Plus_Foldback_t poepFoldbackCurve);
1221 uint8_t tps_ConfigDevice4Pair (uint8_t device_i2c_address, TPS238x_On_Off_t on_off_Port12, TPS238x_Four_Pair_t disconnectModePort12,
1222  TPS238x_On_Off_t on_off_Port34, TPS238x_Four_Pair_t disconnectModePort34);
1223 uint8_t tps_SetPortOpMode (uint8_t systemPortNum, TPS238x_Operating_Modes_t operatingMode);
1224 uint8_t tps_SetDeviceOpMode (uint8_t device_i2c_address, TPS238x_Operating_Modes_t operatingMode1, TPS238x_Operating_Modes_t operatingMode2,
1225  TPS238x_Operating_Modes_t operatingMode3, TPS238x_Operating_Modes_t operatingMode4);
1226 uint8_t tps_RestartDeviceDetection (uint8_t device_i2c_address, TPS238x_Ports_t detectPorts);
1227 uint8_t tps_RestartPortDetection (uint8_t systemPortNum);
1228 uint8_t tps_RestartDeviceClassification (uint8_t device_i2c_address, TPS238x_Ports_t classPorts);
1229 uint8_t tps_RestartPortClassification (uint8_t systemPortNum);
1230 uint8_t tps_RestartDeviceDetectClass (uint8_t device_i2c_address, TPS238x_Ports_t detectPorts, TPS238x_Ports_t classPorts);
1231 uint8_t tps_ResetDevicePort (uint8_t systemPortNum);
1232 uint8_t tps_ResetPort (uint8_t systemPortNum);
1233 uint8_t tps_GetPortMeasurements (uint8_t systemPortNum, uint16_t *voltage, uint16_t *current);
1234 uint8_t tps_GetDeviceInputVoltage (uint8_t device_i2c_address, uint16_t *voltage);
1235 uint8_t tps_GetDeviceTemperature (uint8_t device_i2c_address, uint8_t *temperature);
1236 uint8_t tps_GetPortDetectResistance (uint8_t systemPortNum, uint16_t *detectResistance,
1237  TPS238x_Detect_Resistance_Status_t *detectResistanceStatus);
1238 uint8_t tps_GetPortDetectVoltageDifference (uint8_t systemPortNum, uint16_t *detectVoltageDiff,
1239  TPS238x_Detect_Voltage_Difference_Status_t *detectVoltageDiffStatus);
1240 uint8_t tps_ReleasePort (uint8_t systemPortNum);
1241 uint8_t tps_ResetInterruptPin (uint8_t device_i2c_address);
1242 
1243 #ifdef __CPLUSPLUS
1244 }
1245 #endif
1246 
1247 
1248 #endif /* __TPS238X_H_ */