The flags field indicates what UDP checksum policy that should be used for a UDP session. This can be either to switch UDP checksumming off completely, or to use UDP Lite in which the checksum covers only parts of the datagram...
// main.c
static void vSetupIFTask (void *pvParameters) {
...
while (1) {
physts = lpcPHYStsPoll();
if (physts & PHY_LINK_CHANGED) {
if (physts & PHY_LINK_CONNECTED) {
tcpip_callback_with_block((tcpip_callback_fn) netif_set_link_up, (void *) &lpc_netif, 1);
}
else {
tcpip_callback_with_block((tcpip_callback_fn) netif_set_link_down, (void *) &lpc_netif, 1);
}
vTaskDelay(configTICK_RATE_HZ / 4);
}
}
}
// main.c -- no-RTOS
static void vSetupIFTask (void *pvParameters) {
...
netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, ethernet_input)
...
}
// main.c -- FreeRTOS
static void vSetupIFTask (void *pvParameters) {
...
if (!netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, tcpip_input))
{
...
}
// ethernetif.c
err_t ethernetif_init(struct netif *netif) // lpc_enetif_init
{
...
low_level_init(netif);
return ERR_OK;
}
// ethernetif.c
static void low_level_init(struct netif *netif)
{
...
netif->mtu = 1500;
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;
/* Do whatever else is needed to initialize interface. */
}
// lpc17xx_40xx_emac.c
err_t lpc_enetif_init(struct netif *netif)
{
...
err = low_level_init(netif);
if (err != ERR_OK) {
return err;
}
...
netif->output = lpc_etharp_output;
netif->linkoutput = lpc_low_level_output;
...
return ERR_OK;
}
// lpc17xx_40xx_emac.c
STATIC err_t lpc_etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
{
/* Only send packet is link is up */
if (netif->flags & NETIF_FLAG_LINK_UP) {
return etharp_output(netif, q, ipaddr);
}
return ERR_CONN;
}
هنگام انتخاب IPv4/IPv6 Stack برای سیستم توکار خود، حتما به مستندات آن، مِن جمله، به Supported Devices آن نگاه دقیقی داشته باشید...
|
Ethernet PHY Transceiver |
LandTiger V2.0 LPC1768 Development Board |
DP83848 |
LPC1769 LPCXpresso board |
LAN8720 |
در صورتی که سیستم به هر دلیلی خاموش و روشن شد! طول پالس Reset ارسالی به PHY، باید مطابق با مستندات آن قطعه باشد...