LibDriver LAN8720  1.0.0
LAN8720 full-featured driver
driver_lan8720_basic.c
Go to the documentation of this file.
1 
37 #include "driver_lan8720_basic.h"
38 
39 static lan8720_handle_t gs_handle;
49 uint8_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 */
84  res = lan8720_set_loop_back(&gs_handle, LAN8720_BOOL_FALSE);
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 */
114  res = lan8720_set_power_down(&gs_handle, LAN8720_BOOL_FALSE);
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 
173 uint8_t lan8720_basic_deinit(void)
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
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
lan8720 handle structure definition