LibDriver LAN8720
Loading...
Searching...
No Matches
driver_lan8720_basic.c
Go to the documentation of this file.
1
36
38
39static lan8720_handle_t gs_handle;
40
49uint8_t lan8720_basic_init(uint8_t addr)
50{
51 uint8_t res;
52
53 /* link interface function */
64
65 /* set address */
66 res = lan8720_set_address(&gs_handle, addr);
67 if (res != 0)
68 {
69 lan8720_interface_debug_print("lan8720: set address failed.\n");
70
71 return 1;
72 }
73
74 /* init */
75 res = lan8720_init(&gs_handle);
76 if (res != 0)
77 {
78 lan8720_interface_debug_print("lan8720: init failed.\n");
79
80 return 1;
81 }
82
83 /* disable loop back */
85 if (res != 0)
86 {
87 lan8720_interface_debug_print("lan8720: set loop back failed.\n");
88 (void)lan8720_deinit(&gs_handle);
89
90 return 1;
91 }
92
93 /* set default speed */
95 if (res != 0)
96 {
97 lan8720_interface_debug_print("lan8720: set speed select failed.\n");
98 (void)lan8720_deinit(&gs_handle);
99
100 return 1;
101 }
102
103 /* disable auto negotiation */
105 if (res != 0)
106 {
107 lan8720_interface_debug_print("lan8720: set auto negotiation failed.\n");
108 (void)lan8720_deinit(&gs_handle);
109
110 return 1;
111 }
112
113 /* disable power down */
115 if (res != 0)
116 {
117 lan8720_interface_debug_print("lan8720: set power down failed.\n");
118 (void)lan8720_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* disable electrical isolation */
125 if (res != 0)
126 {
127 lan8720_interface_debug_print("lan8720: set electrical isolation failed.\n");
128 (void)lan8720_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* disable restart auto negotiate */
135 if (res != 0)
136 {
137 lan8720_interface_debug_print("lan8720: set restart auto negotiate failed.\n");
138 (void)lan8720_deinit(&gs_handle);
139
140 return 1;
141 }
142
143 /* set default duplex mode */
145 if (res != 0)
146 {
147 lan8720_interface_debug_print("lan8720: set duplex mode failed.\n");
148 (void)lan8720_deinit(&gs_handle);
149
150 return 1;
151 }
152
153 /* set phy address */
154 res = lan8720_set_phy_address(&gs_handle, addr);
155 if (res != 0)
156 {
157 lan8720_interface_debug_print("lan8720: set phy address failed.\n");
158 (void)lan8720_deinit(&gs_handle);
159
160 return 1;
161 }
162
163 return 0;
164}
165
174{
175 uint8_t res;
176
177 res = lan8720_deinit(&gs_handle);
178 if (res != 0)
179 {
180 return 1;
181 }
182
183 return 0;
184}
185
197{
198 uint8_t res;
199
200 /* get link status */
201 res = lan8720_get_link_status(&gs_handle, status);
202 if (res != 0)
203 {
204 return 1;
205 }
206
207 return 0;
208}
209
221{
222 uint8_t res;
223 uint16_t timeout = 1000;
224 lan8720_bool_t enable;
225
226 /* enable auto negotiation */
228 if (res != 0)
229 {
230 return 1;
231 }
232
233 /* loop for timeout */
234 while (timeout != 0)
235 {
236 /* get auto negotiation done */
237 res = lan8720_get_auto_negotiation_done(&gs_handle, &enable);
238 if (res != 0)
239 {
240 return 1;
241 }
242
243 /* check break */
244 if (enable == LAN8720_BOOL_TRUE)
245 {
246 break;
247 }
248
249 /* timeout-- */
250 timeout--;
251
252 /* delay 10ms */
254 }
255
256 /* get speed indication */
257 res = lan8720_get_speed_indication(&gs_handle, speed);
258 if (res != 0)
259 {
260 return 1;
261 }
262
263 return 0;
264}
driver lan8720 basic header file
uint8_t lan8720_get_auto_negotiation_done(lan8720_handle_t *handle, lan8720_bool_t *enable)
get auto negotiation done status
uint8_t lan8720_set_phy_address(lan8720_handle_t *handle, uint8_t addr)
set phy address
uint8_t lan8720_get_speed_indication(lan8720_handle_t *handle, lan8720_speed_indication_t *speed)
get speed indication
lan8720_speed_indication_t
lan8720 speed indication enumeration definition
struct lan8720_handle_s lan8720_handle_t
lan8720 handle structure definition
uint8_t lan8720_set_duplex_mode(lan8720_handle_t *handle, lan8720_duplex_t mode)
set duplex mode
uint8_t lan8720_set_loop_back(lan8720_handle_t *handle, lan8720_bool_t enable)
enable or disable loop back
uint8_t lan8720_get_link_status(lan8720_handle_t *handle, lan8720_link_t *status)
get link status
uint8_t lan8720_set_speed_select(lan8720_handle_t *handle, lan8720_speed_t speed)
set speed select
uint8_t lan8720_init(lan8720_handle_t *handle)
initialize the chip
lan8720_bool_t
lan8720 bool enumeration definition
uint8_t lan8720_deinit(lan8720_handle_t *handle)
close the chip
uint8_t lan8720_set_restart_auto_negotiate(lan8720_handle_t *handle, lan8720_bool_t enable)
enable or disable restart auto negotiate
lan8720_link_t
lan8720 link enumeration definition
uint8_t lan8720_set_auto_negotiation(lan8720_handle_t *handle, lan8720_bool_t enable)
enable or disable auto negotiation
uint8_t lan8720_set_power_down(lan8720_handle_t *handle, lan8720_bool_t enable)
enable or disable power down
uint8_t lan8720_set_address(lan8720_handle_t *handle, uint8_t addr)
set the chip address
uint8_t lan8720_set_electrical_isolation(lan8720_handle_t *handle, lan8720_bool_t enable)
enable or disable electrical isolation
@ LAN8720_BOOL_FALSE
@ LAN8720_BOOL_TRUE
uint8_t lan8720_basic_auto_negotiation(lan8720_speed_indication_t *speed)
basic example auto negotiation
#define LAN8720_BASIC_DEFAULT_DUPLEX_MODE
uint8_t lan8720_basic_link_status(lan8720_link_t *status)
basic example get link status
uint8_t lan8720_basic_init(uint8_t addr)
basic example init
uint8_t lan8720_basic_deinit(void)
basic example deinit
#define LAN8720_BASIC_DEFAULT_SPEED
lan8720 basic example default definition
uint8_t lan8720_interface_reset_gpio_deinit(void)
interface reset gpio deinit
uint8_t lan8720_interface_reset_gpio_write(uint8_t level)
interface reset gpio write
void lan8720_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t lan8720_interface_smi_deinit(void)
interface smi bus deinit
uint8_t lan8720_interface_smi_init(void)
interface smi bus init
uint8_t lan8720_interface_smi_read(uint8_t addr, uint8_t reg, uint16_t *data)
interface smi bus read
void lan8720_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t lan8720_interface_reset_gpio_init(void)
interface reset gpio init
uint8_t lan8720_interface_smi_write(uint8_t addr, uint8_t reg, uint16_t data)
interface smi bus write