lan8831_driver.h
Go to the documentation of this file.
1 /**
2  * @file lan8831_driver.h
3  * @brief LAN8831 Gigabit Ethernet PHY driver
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2026 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneTCP Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.6.0
29  **/
30 
31 #ifndef _LAN8831_DRIVER_H
32 #define _LAN8831_DRIVER_H
33 
34 //Dependencies
35 #include "core/nic.h"
36 
37 //PHY address
38 #ifndef LAN8831_PHY_ADDR
39  #define LAN8831_PHY_ADDR 3
40 #elif (LAN8831_PHY_ADDR < 0 || LAN8831_PHY_ADDR > 31)
41  #error LAN8831_PHY_ADDR parameter is not valid
42 #endif
43 
44 //LAN8831 PHY registers
45 #define LAN8831_BMCR 0x00
46 #define LAN8831_BMSR 0x01
47 #define LAN8831_PHYID1 0x02
48 #define LAN8831_PHYID2 0x03
49 #define LAN8831_ANAR 0x04
50 #define LAN8831_ANLPAR 0x05
51 #define LAN8831_ANER 0x06
52 #define LAN8831_ANNPTR 0x07
53 #define LAN8831_ANNPRR 0x08
54 #define LAN8831_GBCR 0x09
55 #define LAN8831_GBSR 0x0A
56 #define LAN8831_MMDACR 0x0D
57 #define LAN8831_MMDAADR 0x0E
58 #define LAN8831_GBESR 0x0F
59 #define LAN8831_PCS_LB_SWAP_POL_CTRL 0x11
60 #define LAN8831_LINKMD 0x12
61 #define LAN8831_DPMAPCSS 0x13
62 #define LAN8831_RXERCTR 0x15
63 #define LAN8831_LED_MODE_SEL 0x16
64 #define LAN8831_LED_BEHAVIOR 0x17
65 #define LAN8831_OUT_CTRL 0x19
66 #define LAN8831_LEGACY_LED_MODE 0x1A
67 #define LAN8831_ISR 0x1B
68 #define LAN8831_AUTOMDI 0x1C
69 #define LAN8831_SPDC 0x1D
70 #define LAN8831_EXT_LOOPBACK 0x1E
71 #define LAN8831_PHYCON 0x1F
72 
73 //LAN8831 MMD registers
74 #define LAN8831_MEAN_SLICER_ERROR 0x01, 0xE1
75 #define LAN8831_DCQ_MEAN_SQUARE_ERROR 0x01, 0xE2
76 #define LAN8831_DCQ_MEAN_SQUARE_ERROR_WORST_CASE 0x01, 0xE3
77 #define LAN8831_DCQ_SQI 0x01, 0xE4
78 #define LAN8831_DCQ_PEAK_MSE 0x01, 0xE5
79 #define LAN8831_DCQ_CTRL 0x01, 0xE6
80 #define LAN8831_DCQ_CONFIG 0x01, 0xE7
81 #define LAN8831_DCQ_SQI_TABLE 0x01, 0xE8
82 #define LAN8831_COMMON_CTRL 0x02, 0x00
83 #define LAN8831_STRAP_STAT 0x02, 0x01
84 #define LAN8831_OP_MODE_STRAP_OVERRIDE 0x02, 0x02
85 #define LAN8831_OP_MODE_STRAP 0x02, 0x03
86 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW 0x02, 0x04
87 #define LAN8831_RGMII_RX_DATA_PAD_SKEW 0x02, 0x05
88 #define LAN8831_RGMII_TX_DATA_PAD_SKEW 0x02, 0x06
89 #define LAN8831_CLK_PAD_SKEW 0x02, 0x08
90 #define LAN8831_SELF_TEST_PKT_COUNT_LO 0x02, 0x09
91 #define LAN8831_SELF_TEST_PKT_COUNT_HI 0x02, 0x0A
92 #define LAN8831_SELF_TEST_STAT 0x02, 0x0B
93 #define LAN8831_SELF_TEST_FRAME_COUNT_EN 0x02, 0x0C
94 #define LAN8831_SELF_TEST_PGEN_EN 0x02, 0x0D
95 #define LAN8831_SELF_TEST_EN 0x02, 0x0E
96 #define LAN8831_WOL_CTRL 0x02, 0x10
97 #define LAN8831_WOL_MAC_LO 0x02, 0x11
98 #define LAN8831_WOL_MAC_MI 0x02, 0x12
99 #define LAN8831_WOL_MAC_HI 0x02, 0x13
100 #define LAN8831_CUSTOM_PKT0_CRC_LO 0x02, 0x14
101 #define LAN8831_CUSTOM_PKT0_CRC_HI 0x02, 0x15
102 #define LAN8831_CUSTOM_PKT1_CRC_LO 0x02, 0x16
103 #define LAN8831_CUSTOM_PKT1_CRC_HI 0x02, 0x17
104 #define LAN8831_CUSTOM_PKT2_CRC_LO 0x02, 0x18
105 #define LAN8831_CUSTOM_PKT2_CRC_HI 0x02, 0x19
106 #define LAN8831_CUSTOM_PKT3_CRC_LO 0x02, 0x1A
107 #define LAN8831_CUSTOM_PKT3_CRC_HI 0x02, 0x1B
108 #define LAN8831_CUSTOM_PKT0_MASK_LL 0x02, 0x1C
109 #define LAN8831_CUSTOM_PKT0_MASK_LH 0x02, 0x1D
110 #define LAN8831_CUSTOM_PKT0_MASK_HL 0x02, 0x1E
111 #define LAN8831_CUSTOM_PKT0_MASK_HH 0x02, 0x1F
112 #define LAN8831_CUSTOM_PKT1_MASK_LL 0x02, 0x20
113 #define LAN8831_CUSTOM_PKT1_MASK_LH 0x02, 0x21
114 #define LAN8831_CUSTOM_PKT1_MASK_HL 0x02, 0x22
115 #define LAN8831_CUSTOM_PKT1_MASK_HH 0x02, 0x23
116 #define LAN8831_CUSTOM_PKT2_MASK_LL 0x02, 0x24
117 #define LAN8831_CUSTOM_PKT2_MASK_LH 0x02, 0x25
118 #define LAN8831_CUSTOM_PKT2_MASK_HL 0x02, 0x26
119 #define LAN8831_CUSTOM_PKT2_MASK_HH 0x02, 0x27
120 #define LAN8831_CUSTOM_PKT3_MASK_LL 0x02, 0x28
121 #define LAN8831_CUSTOM_PKT3_MASK_LH 0x02, 0x29
122 #define LAN8831_CUSTOM_PKT3_MASK_HL 0x02, 0x2A
123 #define LAN8831_CUSTOM_PKT3_MASK_HH 0x02, 0x2B
124 #define LAN8831_WOL_CTRL_STAT 0x02, 0x2C
125 #define LAN8831_WOL_CUSTOM_PKT_RECEIVE_STAT 0x02, 0x2D
126 #define LAN8831_WOL_MAGIC_PKT_RECEIVE_STAT 0x02, 0x2E
127 #define LAN8831_WOL_DATA_MODULE_STAT 0x02, 0x2F
128 #define LAN8831_CUSTOM_PKT0_RCVD_CRC_L 0x02, 0x30
129 #define LAN8831_CUSTOM_PKT0_RCVD_CRC_H 0x02, 0x31
130 #define LAN8831_CUSTOM_PKT1_RCVD_CRC_L 0x02, 0x32
131 #define LAN8831_CUSTOM_PKT1_RCVD_CRC_H 0x02, 0x33
132 #define LAN8831_CUSTOM_PKT2_RCVD_CRC_L 0x02, 0x34
133 #define LAN8831_CUSTOM_PKT2_RCVD_CRC_H 0x02, 0x35
134 #define LAN8831_CUSTOM_PKT3_RCVD_CRC_L 0x02, 0x36
135 #define LAN8831_CUSTOM_PKT3_RCVD_CRC_H 0x02, 0x37
136 #define LAN8831_SELF_TEST_CORRECT_COUNT_LO 0x02, 0x3C
137 #define LAN8831_SELF_TEST_CORRECT_COUNT_HI 0x02, 0x3D
138 #define LAN8831_SELF_TEST_ERROR_COUNT_LO 0x02, 0x3E
139 #define LAN8831_SELF_TEST_ERROR_COUNT_HI 0x02, 0x3F
140 #define LAN8831_RX_DLL_CTRL 0x02, 0x4C
141 #define LAN8831_TX_DLL_CTRL 0x02, 0x4D
142 #define LAN8831_1000M_FAST_LINK_DOWN_EN 0x02, 0x5A
143 #define LAN8831_DRIVING_STRENGTH 0x02, 0x6F
144 #define LAN8831_GPIO_EN 0x02, 0x80
145 #define LAN8831_GPIO_DIR 0x02, 0x81
146 #define LAN8831_GPIO_BUF 0x02, 0x82
147 #define LAN8831_GPIO_DATA_SEL1 0x02, 0x83
148 #define LAN8831_GPIO_DATA_SEL2 0x02, 0x84
149 #define LAN8831_GPIO_DATA 0x02, 0x85
150 #define LAN8831_GPIO_INT_STS 0x02, 0x86
151 #define LAN8831_GPIO_INT_EN 0x02, 0x87
152 #define LAN8831_GPIO_INT_POL 0x02, 0x88
153 #define LAN8831_PCS_CTRL1 0x03, 0x00
154 #define LAN8831_PCS_STAT1 0x03, 0x01
155 #define LAN8831_EEE_QUIET_TIMER 0x03, 0x08
156 #define LAN8831_EEE_UPDATE_TIMER 0x03, 0x09
157 #define LAN8831_EEE_LINK_FAIL_TIMER 0x03, 0x0A
158 #define LAN8831_EEE_POST_UPDATE_TIMER 0x03, 0x0B
159 #define LAN8831_EEE_WAIT_WQ_TIMER 0x03, 0x0C
160 #define LAN8831_EEE_WAKE_TIMER 0x03, 0x0D
161 #define LAN8831_EEE_WAKE_TX_TIMER 0x03, 0x0E
162 #define LAN8831_EEE_WAKE_MZ_TIMER 0x03, 0x0F
163 #define LAN8831_EEE_CTRL_CAPABILITY 0x03, 0x14
164 #define LAN8831_EEE_WAKE_ERROR_COUNTER 0x03, 0x16
165 #define LAN8831_EEE_100_TIMER0 0x03, 0x18
166 #define LAN8831_EEE_100_TIMER1 0x03, 0x19
167 #define LAN8831_EEE_100_TIMER2 0x03, 0x1A
168 #define LAN8831_EEE_100_TIMER3 0x03, 0x1B
169 #define LAN8831_EEE_ADV 0x07, 0x3C
170 #define LAN8831_EEE_LP_ABILITY 0x07, 0x3D
171 #define LAN8831_EEE_LP_ABILITY_OVERRIDE 0x07, 0x3E
172 #define LAN8831_EEE_MSG_CODE 0x07, 0x3F
173 #define LAN8831_XTAL_CTRL 0x1C, 0x01
174 #define LAN8831_AFED_CTRL 0x1C, 0x09
175 #define LAN8831_LDO_CTRL 0x1C, 0x0E
176 #define LAN8831_EDPD_CTRL 0x1C, 0x24
177 #define LAN8831_EMITX_CTRL 0x1C, 0x25
178 #define LAN8831_EMITX_COEFF 0x1C, 0x26
179 
180 //Basic Control register
181 #define LAN8831_BMCR_RESET 0x8000
182 #define LAN8831_BMCR_LOOPBACK 0x4000
183 #define LAN8831_BMCR_SPEED_SEL_LSB 0x2000
184 #define LAN8831_BMCR_AN_EN 0x1000
185 #define LAN8831_BMCR_POWER_DOWN 0x0800
186 #define LAN8831_BMCR_ISOLATE 0x0400
187 #define LAN8831_BMCR_RESTART_AN 0x0200
188 #define LAN8831_BMCR_DUPLEX_MODE 0x0100
189 #define LAN8831_BMCR_COL_TEST 0x0080
190 #define LAN8831_BMCR_SPEED_SEL_MSB 0x0040
191 
192 //Basic Status register
193 #define LAN8831_BMSR_100BT4 0x8000
194 #define LAN8831_BMSR_100BTX_FD 0x4000
195 #define LAN8831_BMSR_100BTX_HD 0x2000
196 #define LAN8831_BMSR_10BT_FD 0x1000
197 #define LAN8831_BMSR_10BT_HD 0x0800
198 #define LAN8831_BMSR_100BT2_FD 0x0400
199 #define LAN8831_BMSR_100BT2_HD 0x0200
200 #define LAN8831_BMSR_EXTENDED_STATUS 0x0100
201 #define LAN8831_BMSR_UNIDIRECTIONAL_ABLE 0x0080
202 #define LAN8831_BMSR_MF_PREAMBLE_SUPPR 0x0040
203 #define LAN8831_BMSR_AN_COMPLETE 0x0020
204 #define LAN8831_BMSR_REMOTE_FAULT 0x0010
205 #define LAN8831_BMSR_AN_CAPABLE 0x0008
206 #define LAN8831_BMSR_LINK_STATUS 0x0004
207 #define LAN8831_BMSR_JABBER_DETECT 0x0002
208 #define LAN8831_BMSR_EXTENDED_CAPABLE 0x0001
209 
210 //Device Identifier 1 register
211 #define LAN8831_PHYID1_PHY_ID_MSB 0xFFFF
212 #define LAN8831_PHYID1_PHY_ID_MSB_DEFAULT 0x0022
213 
214 //Device Identifier 2 register
215 #define LAN8831_PHYID2_PHY_ID_LSB 0xFC00
216 #define LAN8831_PHYID2_PHY_ID_LSB_DEFAULT 0x1400
217 #define LAN8831_PHYID2_MODEL_NUM 0x03F0
218 #define LAN8831_PHYID2_MODEL_NUM_DEFAULT 0x0250
219 #define LAN8831_PHYID2_REVISION_NUM 0x000F
220 
221 //Auto-Negotiation Advertisement register
222 #define LAN8831_ANAR_NEXT_PAGE 0x8000
223 #define LAN8831_ANAR_REMOTE_FAULT 0x2000
224 #define LAN8831_ANAR_EXTENDED_NEXT_PAGE 0x1000
225 #define LAN8831_ANAR_ASYM_PAUSE 0x0800
226 #define LAN8831_ANAR_SYM_PAUSE 0x0400
227 #define LAN8831_ANAR_100BT4 0x0200
228 #define LAN8831_ANAR_100BTX_FD 0x0100
229 #define LAN8831_ANAR_100BTX_HD 0x0080
230 #define LAN8831_ANAR_10BT_FD 0x0040
231 #define LAN8831_ANAR_10BT_HD 0x0020
232 #define LAN8831_ANAR_SELECTOR 0x001F
233 #define LAN8831_ANAR_SELECTOR_DEFAULT 0x0001
234 
235 //Auto-Negotiation Link Partner Base Page Ability register
236 #define LAN8831_ANLPAR_NEXT_PAGE 0x8000
237 #define LAN8831_ANLPAR_ACK 0x4000
238 #define LAN8831_ANLPAR_REMOTE_FAULT 0x2000
239 #define LAN8831_ANLPAR_EXTENDED_NEXT_PAGE 0x1000
240 #define LAN8831_ANLPAR_ASYM_PAUSE 0x0800
241 #define LAN8831_ANLPAR_PAUSE 0x0400
242 #define LAN8831_ANLPAR_100BT4 0x0200
243 #define LAN8831_ANLPAR_100BTX_FD 0x0100
244 #define LAN8831_ANLPAR_100BTX_HD 0x0080
245 #define LAN8831_ANLPAR_10BT_FD 0x0040
246 #define LAN8831_ANLPAR_10BT_HD 0x0020
247 #define LAN8831_ANLPAR_SELECTOR 0x001F
248 #define LAN8831_ANLPAR_SELECTOR_DEFAULT 0x0001
249 
250 //Auto-Negotiation Expansion register
251 #define LAN8831_ANER_RECEIVE_NP_LOC_ABLE 0x0040
252 #define LAN8831_ANER_RECEIVE_NP_STOR_LOC 0x0020
253 #define LAN8831_ANER_PAR_DETECT_FAULT 0x0010
254 #define LAN8831_ANER_LP_NEXT_PAGE_ABLE 0x0008
255 #define LAN8831_ANER_NEXT_PAGE_ABLE 0x0004
256 #define LAN8831_ANER_PAGE_RECEIVED 0x0002
257 #define LAN8831_ANER_LP_AN_ABLE 0x0001
258 
259 //Auto-Negotiation Next Page TX register
260 #define LAN8831_ANNPTR_NEXT_PAGE 0x8000
261 #define LAN8831_ANNPTR_MSG_PAGE 0x2000
262 #define LAN8831_ANNPTR_ACK2 0x1000
263 #define LAN8831_ANNPTR_TOGGLE 0x0800
264 #define LAN8831_ANNPTR_MESSAGE 0x07FF
265 
266 //Auto-Negotiation Next Page RX register
267 #define LAN8831_ANNPRR_NEXT_PAGE 0x8000
268 #define LAN8831_ANNPRR_ACK 0x4000
269 #define LAN8831_ANNPRR_MSG_PAGE 0x2000
270 #define LAN8831_ANNPRR_ACK2 0x1000
271 #define LAN8831_ANNPRR_TOGGLE 0x0800
272 #define LAN8831_ANNPRR_MESSAGE 0x07FF
273 
274 //Auto-Negotiation Master Slave Control register
275 #define LAN8831_GBCR_TEST_MODE 0xE000
276 #define LAN8831_GBCR_MS_MAN_CONF_EN 0x1000
277 #define LAN8831_GBCR_MS_MAN_CONF_VAL 0x0800
278 #define LAN8831_GBCR_PORT_TYPE 0x0400
279 #define LAN8831_GBCR_1000BT_FD 0x0200
280 #define LAN8831_GBCR_1000BT_HD 0x0100
281 
282 //Auto-Negotiation Master Slave Status register
283 #define LAN8831_GBSR_MS_CONF_FAULT 0x8000
284 #define LAN8831_GBSR_MS_CONF_RES 0x4000
285 #define LAN8831_GBSR_LOCAL_RECEIVER_STATUS 0x2000
286 #define LAN8831_GBSR_REMOTE_RECEIVER_STATUS 0x1000
287 #define LAN8831_GBSR_LP_1000BT_FD 0x0800
288 #define LAN8831_GBSR_LP_1000BT_HD 0x0400
289 #define LAN8831_GBSR_IDLE_ERR_COUNT 0x00FF
290 
291 //MMD Access Control register
292 #define LAN8831_MMDACR_FUNC 0xC000
293 #define LAN8831_MMDACR_FUNC_ADDR 0x0000
294 #define LAN8831_MMDACR_FUNC_DATA_NO_POST_INC 0x4000
295 #define LAN8831_MMDACR_FUNC_DATA_POST_INC_RW 0x8000
296 #define LAN8831_MMDACR_FUNC_DATA_POST_INC_W 0xC000
297 #define LAN8831_MMDACR_DEVAD 0x001F
298 
299 //Extended Status register
300 #define LAN8831_GBESR_1000BX_FD 0x8000
301 #define LAN8831_GBESR_1000BX_HD 0x4000
302 #define LAN8831_GBESR_1000BT_FD 0x2000
303 #define LAN8831_GBESR_1000BT_HD 0x1000
304 
305 //PCS Loopback Swap/Polarity Control register
306 #define LAN8831_PCS_LB_SWAP_POL_CTRL_REMOTE_LOOPBACK 0x0100
307 #define LAN8831_PCS_LB_SWAP_POL_CTRL_MR_LED_SEL 0x00C0
308 #define LAN8831_PCS_LB_SWAP_POL_CTRL_10BT_PREAMBLE_EN 0x0004
309 
310 //LinkMD Cable Diagnostic register
311 #define LAN8831_LINKMD_TEST_EN 0x8000
312 #define LAN8831_LINKMD_TX_DIS 0x4000
313 #define LAN8831_LINKMD_PAIR 0x3000
314 #define LAN8831_LINKMD_PAIR_A 0x0000
315 #define LAN8831_LINKMD_PAIR_B 0x1000
316 #define LAN8831_LINKMD_PAIR_C 0x2000
317 #define LAN8831_LINKMD_PAIR_D 0x3000
318 #define LAN8831_LINKMD_SEL 0x0C00
319 #define LAN8831_LINKMD_STATUS 0x0300
320 #define LAN8831_LINKMD_STATUS_NORMAL 0x0000
321 #define LAN8831_LINKMD_STATUS_OPEN 0x0100
322 #define LAN8831_LINKMD_STATUS_SHORT 0x0200
323 #define LAN8831_LINKMD_STATUS_TEST_FAILED 0x0300
324 #define LAN8831_LINKMD_FAULT_DATA 0x00FF
325 
326 //Digital PMA/PCS Status register
327 #define LAN8831_DPMAPCSS_1000BT_LINK_STATUS 0x0002
328 #define LAN8831_DPMAPCSS_100BTX_LINK_STATUS 0x0001
329 
330 //LED Mode Select register
331 #define LAN8831_LED_MODE_SEL_LED4_CONFIG 0xF000
332 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_ACT 0x0000
333 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_1000_ACT 0x1000
334 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_100_ACT 0x2000
335 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_10_ACT 0x3000
336 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_100_1000_ACT 0x4000
337 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_10_1000_ACT 0x5000
338 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_LINK_10_100_ACT 0x6000
339 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_DUPLEX_COL 0x8000
340 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_COL 0x9000
341 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_ACT 0xA000
342 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_AN_FAULT 0xC000
343 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_OFF 0xE000
344 #define LAN8831_LED_MODE_SEL_LED4_CONFIG_ON 0xF000
345 #define LAN8831_LED_MODE_SEL_LED3_CONFIG 0x0F00
346 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_ACT 0x0000
347 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_1000_ACT 0x0100
348 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_100_ACT 0x0200
349 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_10_ACT 0x0300
350 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_100_1000_ACT 0x0400
351 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_10_1000_ACT 0x0500
352 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_LINK_10_100_ACT 0x0600
353 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_DUPLEX_COL 0x0800
354 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_COL 0x0900
355 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_ACT 0x0A00
356 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_AN_FAULT 0x0C00
357 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_OFF 0x0E00
358 #define LAN8831_LED_MODE_SEL_LED3_CONFIG_ON 0x0F00
359 #define LAN8831_LED_MODE_SEL_LED2_CONFIG 0x00F0
360 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_ACT 0x0000
361 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_1000_ACT 0x0010
362 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_100_ACT 0x0020
363 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_10_ACT 0x0030
364 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_100_1000_ACT 0x0040
365 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_10_1000_ACT 0x0050
366 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_LINK_10_100_ACT 0x0060
367 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_DUPLEX_COL 0x0080
368 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_COL 0x0090
369 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_ACT 0x00A0
370 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_AN_FAULT 0x00C0
371 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_OFF 0x00E0
372 #define LAN8831_LED_MODE_SEL_LED2_CONFIG_ON 0x00F0
373 #define LAN8831_LED_MODE_SEL_LED1_CONFIG 0x000F
374 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_ACT 0x0000
375 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_1000_ACT 0x0001
376 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_100_ACT 0x0002
377 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_10_ACT 0x0003
378 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_100_1000_ACT 0x0004
379 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_10_1000_ACT 0x0005
380 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_LINK_10_100_ACT 0x0006
381 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_DUPLEX_COL 0x0008
382 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_COL 0x0009
383 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_ACT 0x000A
384 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_AN_FAULT 0x000C
385 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_OFF 0x000E
386 #define LAN8831_LED_MODE_SEL_LED1_CONFIG_ON 0x000F
387 
388 //LED Behavior register
389 #define LAN8831_LED_BEHAVIOR_LED_ACT_OUT_SEL 0x4000
390 #define LAN8831_LED_BEHAVIOR_LED_PULSING_EN 0x1000
391 #define LAN8831_LED_BEHAVIOR_LED_BLINK_RATE 0x0C00
392 #define LAN8831_LED_BEHAVIOR_LED_BLINK_RATE_2_5HZ 0x0000
393 #define LAN8831_LED_BEHAVIOR_LED_BLINK_RATE_5HZ 0x0400
394 #define LAN8831_LED_BEHAVIOR_LED_BLINK_RATE_10HZ 0x0800
395 #define LAN8831_LED_BEHAVIOR_LED_BLINK_RATE_20HZ 0x0C00
396 #define LAN8831_LED_BEHAVIOR_LED_PULSE_STRECH_EN 0x01E0
397 #define LAN8831_LED_BEHAVIOR_LED_PULSE_STRECH_EN_LED4 0x0100
398 #define LAN8831_LED_BEHAVIOR_LED_PULSE_STRECH_EN_LED3 0x0080
399 #define LAN8831_LED_BEHAVIOR_LED_PULSE_STRECH_EN_LED2 0x0040
400 #define LAN8831_LED_BEHAVIOR_LED_PULSE_STRECH_EN_LED1 0x0020
401 #define LAN8831_LED_BEHAVIOR_LED_COMBINATION_DIS 0x000F
402 #define LAN8831_LED_BEHAVIOR_LED_COMBINATION_DIS_LED4 0x0008
403 #define LAN8831_LED_BEHAVIOR_LED_COMBINATION_DIS_LED3 0x0004
404 #define LAN8831_LED_BEHAVIOR_LED_COMBINATION_DIS_LED2 0x0002
405 #define LAN8831_LED_BEHAVIOR_LED_COMBINATION_DIS_LED1 0x0001
406 
407 //Output Control register
408 #define LAN8831_OUT_CTRL_MDIO_BUFFER_TYPE 0x8000
409 #define LAN8831_OUT_CTRL_INT_BUFFER_TYPE 0x4000
410 #define LAN8831_OUT_CTRL_LED_BUFFER_TYPE 0x3F00
411 #define LAN8831_OUT_CTRL_LED_BUFFER_TYPE_LED4 0x0800
412 #define LAN8831_OUT_CTRL_LED_BUFFER_TYPE_LED3 0x0400
413 #define LAN8831_OUT_CTRL_LED_BUFFER_TYPE_LED2 0x0200
414 #define LAN8831_OUT_CTRL_LED_BUFFER_TYPE_LED1 0x0100
415 #define LAN8831_OUT_CTRL_PME_POLARITY 0x0080
416 #define LAN8831_OUT_CTRL_LED_POLARITY 0x003F
417 #define LAN8831_OUT_CTRL_LED_POLARITY_LED4 0x0008
418 #define LAN8831_OUT_CTRL_LED_POLARITY_LED3 0x0004
419 #define LAN8831_OUT_CTRL_LED_POLARITY_LED2 0x0002
420 #define LAN8831_OUT_CTRL_LED_POLARITY_LED1 0x0001
421 
422 //KSZ9031 LED Mode register
423 #define LAN8831_LEGACY_LED_MODE_KSZ9031_LED_MODE 0x4000
424 
425 //Interrupt Status register
426 #define LAN8831_ISR_ENERGY_NOT_DETECT 0x0800
427 #define LAN8831_ISR_ENERGY_DETECT 0x0400
428 #define LAN8831_ISR_GPIO 0x0100
429 #define LAN8831_ISR_JABBER 0x0080
430 #define LAN8831_ISR_RECEIVE_ERROR 0x0040
431 #define LAN8831_ISR_PAGE_RECEIVED 0x0020
432 #define LAN8831_ISR_PAR_DETECT_FAULT 0x0010
433 #define LAN8831_ISR_LP_ACK 0x0008
434 #define LAN8831_ISR_LINK_DOWN 0x0004
435 #define LAN8831_ISR_ADC_FIFO_ERROR 0x0002
436 #define LAN8831_ISR_LINK_UP 0x0001
437 
438 //Auto-MDI/MDI-X register
439 #define LAN8831_AUTOMDI_MDI_SET 0x0080
440 #define LAN8831_AUTOMDI_SWAP_OFF 0x0040
441 
442 //Software Power Down Control register
443 #define LAN8831_SPDC_CLK_GATE_OVERRIDE 0x0800
444 #define LAN8831_SPDC_PLL_DIS 0x0400
445 #define LAN8831_SPDC_IO_DC_TEST_EN 0x0080
446 #define LAN8831_SPDC_VOH 0x0040
447 
448 //External Loopback register
449 #define LAN8831_EXT_LOOPBACK_EXT_LPBK 0x0008
450 
451 //Control register
452 #define LAN8831_PHYCON_INT_POL_INVERT 0x4000
453 #define LAN8831_PHYCON_JABBER_EN 0x0200
454 #define LAN8831_PHYCON_SQE_TEST_EN 0x0100
455 #define LAN8831_PHYCON_SPEED_1000BT 0x0040
456 #define LAN8831_PHYCON_SPEED_100BTX 0x0020
457 #define LAN8831_PHYCON_SPEED_10BT 0x0010
458 #define LAN8831_PHYCON_DUPLEX_STATUS 0x0008
459 #define LAN8831_PHYCON_1000BT_MS_STATUS 0x0004
460 #define LAN8831_PHYCON_SOFT_RESET 0x0002
461 #define LAN8831_PHYCON_LINK_STATUS_CHECK_FAIL 0x0001
462 
463 //Common Control register
464 #define LAN8831_COMMON_CTRL_SINGLE_LED 0x0010
465 #define LAN8831_COMMON_CTRL_CLK125_EN 0x0002
466 #define LAN8831_COMMON_CTRL_ALL_PHYAD_EN 0x0001
467 
468 //Strap Status register
469 #define LAN8831_STRAP_STAT_LEDPOLX_STRAP_IN_STATUS 0x3F00
470 #define LAN8831_STRAP_STAT_LED_MODE_STRAP_IN_STATUS 0x0080
471 #define LAN8831_STRAP_STAT_CLK125_EN_STRAP_IN_STATUS 0x0020
472 #define LAN8831_STRAP_STAT_PHYAD_2_0_STRAP_IN_STATUS 0x001F
473 
474 //Operation Mode Strap Override register
475 #define LAN8831_OP_MODE_STRAP_OVERRIDE_MAGJACK_MODE 0x4000
476 #define LAN8831_OP_MODE_STRAP_OVERRIDE_1000_FD_SLAVE_MODE 0x2000
477 #define LAN8831_OP_MODE_STRAP_OVERRIDE_100_HD_MODE 0x1000
478 #define LAN8831_OP_MODE_STRAP_OVERRIDE_100_FD_MODE 0x0800
479 #define LAN8831_OP_MODE_STRAP_OVERRIDE_1000_FD_MASTER_MODE 0x0400
480 #define LAN8831_OP_MODE_STRAP_OVERRIDE_SPD_PLL_DIS_MODE 0x0200
481 #define LAN8831_OP_MODE_STRAP_OVERRIDE_SPD_PLL_EN_MODE 0x0100
482 #define LAN8831_OP_MODE_STRAP_OVERRIDE_IDDQ_SCAN_MODE 0x0080
483 #define LAN8831_OP_MODE_STRAP_OVERRIDE_NTREE_MODE 0x0010
484 #define LAN8831_OP_MODE_STRAP_OVERRIDE_GMII_MODE 0x0002
485 #define LAN8831_OP_MODE_STRAP_OVERRIDE_RGMII_MODE 0x0001
486 
487 //Operation Mode Strap register
488 #define LAN8831_OP_MODE_STRAP_STRAP_MAGJACK_MODE 0x4000
489 #define LAN8831_OP_MODE_STRAP_STRAP_1000_FD_SLAVE_MODE 0x2000
490 #define LAN8831_OP_MODE_STRAP_STRAP_100_HD_MODE 0x1000
491 #define LAN8831_OP_MODE_STRAP_STRAP_100_FD_MODE 0x0800
492 #define LAN8831_OP_MODE_STRAP_STRAP_1000_FD_MASTER_MODE 0x0400
493 #define LAN8831_OP_MODE_STRAP_STRAP_SPD_PLL_DIS_MODE 0x0200
494 #define LAN8831_OP_MODE_STRAP_STRAP_SPD_PLL_EN_MODE 0x0100
495 #define LAN8831_OP_MODE_STRAP_STRAP_IDDQ_SCAN_MODE 0x0080
496 #define LAN8831_OP_MODE_STRAP_STRAP_NTREE_MODE 0x0010
497 #define LAN8831_OP_MODE_STRAP_STRAP_GMII_MODE 0x0002
498 #define LAN8831_OP_MODE_STRAP_STRAP_RGMII_MODE 0x0001
499 
500 //Clock Invert and Control Signal Pad Skew register
501 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW_INV_GMII_RX_CLK_IN 0x0200
502 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW_INV_RGMII_TXC_IN 0x0100
503 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW_RX_DV_RX_CTL_SKEW 0x00F0
504 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW_RX_DV_RX_CTL_SKEW_DEFAULT 0x0070
505 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW_TX_EN_TX_CTL_SKEW 0x000F
506 #define LAN8831_CLOCK_INV_CTRL_SIGNAL_PAD_SKEW_TX_EN_TX_CTL_SKEW_DEFAULT 0x0007
507 
508 //RGMII RX Data Pad Skew register
509 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD3_PAD_SKEW 0xF000
510 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD3_PAD_SKEW_DEFAULT 0x7000
511 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD2_PAD_SKEW 0x0F00
512 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD2_PAD_SKEW_DEFAULT 0x0700
513 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD1_PAD_SKEW 0x00F0
514 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD1_PAD_SKEW_DEFAULT 0x0070
515 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD0_PAD_SKEW 0x000F
516 #define LAN8831_RGMII_RX_DATA_PAD_SKEW_RXD0_PAD_SKEW_DEFAULT 0x0007
517 
518 //RGMII TX Data Pad Skew register
519 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD3_PAD_SKEW 0xF000
520 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD3_PAD_SKEW_DEFAULT 0x7000
521 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD2_PAD_SKEW 0x0F00
522 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD2_PAD_SKEW_DEFAULT 0x0700
523 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD1_PAD_SKEW 0x00F0
524 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD1_PAD_SKEW_DEFAULT 0x0070
525 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD0_PAD_SKEW 0x000F
526 #define LAN8831_RGMII_TX_DATA_PAD_SKEW_TXD0_PAD_SKEW_DEFAULT 0x0007
527 
528 //Clock Pad Skew register
529 #define LAN8831_CLK_PAD_SKEW_TX_CLK_PAD_IN_SKEW 0x7C00
530 #define LAN8831_CLK_PAD_SKEW_GTX_CLK_TXC_PAD_IN_SKEW 0x03E0
531 #define LAN8831_CLK_PAD_SKEW_RX_CLK_RXC_PAD_OUT_SKEW 0x001F
532 
533 //Self-Test Packet Count LO register
534 #define LAN8831_SELF_TEST_PKT_COUNT_LO_SELF_TEST_FRAME_CNT_15_0 0xFFFF
535 
536 //Self-Test Packet Count HI register
537 #define LAN8831_SELF_TEST_PKT_COUNT_HI_SELF_TEST_FRAME_CNT_31_16 0xFFFF
538 
539 //Self-Test Status register
540 #define LAN8831_SELF_TEST_STAT_SELF_TEST_DONE 0x0001
541 
542 //Self-Test Frame Count Enable register
543 #define LAN8831_SELF_TEST_FRAME_COUNT_EN_SELF_TEST_FRAME_CNT_EN 0x0001
544 
545 //Self-Test PGEN Enable register
546 #define LAN8831_SELF_TEST_PGEN_EN_FORCE_SELF_TEST_PGEN_EN 0x0010
547 #define LAN8831_SELF_TEST_PGEN_EN_SELF_TEST_PGEN_EN 0x0001
548 
549 //Self-Test Enable register
550 #define LAN8831_SELF_TEST_EN_SELF_TEST_EXTERNAL_CLK_SEL 0x8000
551 #define LAN8831_SELF_TEST_EN_SELF_TEST_PACKET_TYPE 0x6000
552 #define LAN8831_SELF_TEST_EN_SELF_TEST_PACKET_TYPE_RANDOM_DATA_BIT 0x0000
553 #define LAN8831_SELF_TEST_EN_SELF_TEST_PACKET_TYPE_ALL_ZEROES 0x2000
554 #define LAN8831_SELF_TEST_EN_SELF_TEST_PACKET_TYPE_ALL_ONES 0x4000
555 #define LAN8831_SELF_TEST_EN_SELF_TEST_PACKET_TYPE_RANDOM 0x6000
556 #define LAN8831_SELF_TEST_EN_SELF_TEST_CLR_CNT_ON_LINK_DOWN 0x0200
557 #define LAN8831_SELF_TEST_EN_SELF_TEST_CRC_CHECKER_EN 0x0100
558 #define LAN8831_SELF_TEST_EN_GMII_TX_CRC_CHECK_EN 0x0010
559 
560 //RX DLL Control register
561 #define LAN8831_RX_DLL_CTRL_RXDLL_TUNE_DIS 0x8000
562 #define LAN8831_RX_DLL_CTRL_BYPASS_RXDLL 0x4000
563 #define LAN8831_RX_DLL_CTRL_RXDLL_TAP_SEL 0x3F80
564 #define LAN8831_RX_DLL_CTRL_RXDLL_TAP_SEL_DEFAULT 0x0D80
565 #define LAN8831_RX_DLL_CTRL_RXDLL_TAP_ADJ 0x007F
566 #define LAN8831_RX_DLL_CTRL_RXDLL_TAP_ADJ_DEFAULT 0x001B
567 
568 //TX DLL Control register
569 #define LAN8831_TX_DLL_CTRL_TXDLL_TUNE_DIS 0x8000
570 #define LAN8831_TX_DLL_CTRL_BYPASS_TXDLL 0x4000
571 #define LAN8831_TX_DLL_CTRL_TXDLL_TAP_SEL 0x3F80
572 #define LAN8831_TX_DLL_CTRL_TXDLL_TAP_SEL_DEFAULT 0x0D80
573 #define LAN8831_TX_DLL_CTRL_TXDLL_TAP_ADJ 0x007F
574 #define LAN8831_TX_DLL_CTRL_TXDLL_TAP_ADJ_DEFAULT 0x001B
575 
576 //1000M Fast Link Down Enable register
577 #define LAN8831_1000M_FAST_LINK_DOWN_EN_1000M_FAST_LINK_DOWN_EN 0x0100
578 
579 //C++ guard
580 #ifdef __cplusplus
581 extern "C" {
582 #endif
583 
584 //LAN8831 Ethernet PHY driver
585 extern const PhyDriver lan8831PhyDriver;
586 
587 //LAN8831 related functions
588 error_t lan8831Init(NetInterface *interface);
589 void lan8831InitHook(NetInterface *interface);
590 
591 void lan8831Tick(NetInterface *interface);
592 
593 void lan8831EnableIrq(NetInterface *interface);
594 void lan8831DisableIrq(NetInterface *interface);
595 
596 void lan8831EventHandler(NetInterface *interface);
597 
598 void lan8831WritePhyReg(NetInterface *interface, uint8_t address,
599  uint16_t data);
600 
601 uint16_t lan8831ReadPhyReg(NetInterface *interface, uint8_t address);
602 
603 void lan8831DumpPhyReg(NetInterface *interface);
604 
605 void lan8831WriteMmdReg(NetInterface *interface, uint8_t devAddr,
606  uint16_t regAddr, uint16_t data);
607 
608 uint16_t lan8831ReadMmdReg(NetInterface *interface, uint8_t devAddr,
609  uint16_t regAddr);
610 
611 //C++ guard
612 #ifdef __cplusplus
613 }
614 #endif
615 
616 #endif
Ethernet PHY driver.
Definition: nic.h:311
uint8_t data[]
Definition: ethernet.h:224
void lan8831WritePhyReg(NetInterface *interface, uint8_t address, uint16_t data)
Write PHY register.
uint16_t lan8831ReadPhyReg(NetInterface *interface, uint8_t address)
Read PHY register.
void lan8831WriteMmdReg(NetInterface *interface, uint8_t devAddr, uint16_t regAddr, uint16_t data)
Write MMD register.
error_t
Error codes.
Definition: error.h:43
void lan8831InitHook(NetInterface *interface)
LAN8831 custom configuration.
#define NetInterface
Definition: net.h:40
void lan8831DisableIrq(NetInterface *interface)
Disable interrupts.
void lan8831DumpPhyReg(NetInterface *interface)
Dump PHY registers for debugging purpose.
error_t lan8831Init(NetInterface *interface)
LAN8831 PHY transceiver initialization.
const PhyDriver lan8831PhyDriver
LAN8831 Ethernet PHY driver.
uint16_t regAddr
void lan8831EventHandler(NetInterface *interface)
LAN8831 event handler.
Ipv6Addr address[]
Definition: ipv6.h:345
Network interface controller abstraction layer.
uint16_t lan8831ReadMmdReg(NetInterface *interface, uint8_t devAddr, uint16_t regAddr)
Read MMD register.
void lan8831Tick(NetInterface *interface)
LAN8831 timer handler.
void lan8831EnableIrq(NetInterface *interface)
Enable interrupts.