37 lines
1.3 KiB
Markdown
37 lines
1.3 KiB
Markdown
# lwIP Ethernet Driver for CH32V208
|
|
|
|
This is a simple ethernetif.c driver to get lwIP working on the WCH CH32V208 MCU using the ch32fun lib.
|
|
It uses the chip's internal 10Mbps Ethernet MAC. The MAC address is pulled from the chip's 6-byte unique ID.
|
|
|
|
The provided main.c is an example that starts up, gets an IP address via DHCP, and runs a small HTTP server.
|
|
|
|
## Usage
|
|
|
|
1. Initialize lwIP and add the network interface.
|
|
2. Poll the driver and service lwIP's timers in your main loop.
|
|
|
|
```c
|
|
netif_add(&g_netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
|
|
netif_set_default(&g_netif);
|
|
netif_set_up(&g_netif);
|
|
dhcp_start(&g_netif);
|
|
|
|
while (1) {
|
|
// poll for incoming packets
|
|
ethernetif_input(&g_netif);
|
|
|
|
// handle lwIP timers (for TCP, DHCP, etc.)
|
|
sys_check_timeouts();
|
|
|
|
// poll link for link up/down cb
|
|
ethernetif_link_poll(&g_netif);
|
|
}
|
|
```
|
|
|
|
## Impl note
|
|
|
|
This driver is kinda functional but not optimized
|
|
|
|
- **Packet RX:** ~~This is done by polling~~ RXIF works now. You must call `ethernetif_input()` continuously in your main loop to check for and process incoming packets
|
|
- **Packet TX:** TX isn't exactly typical DMA? The CPU has to copy the packet into a single transmit buffer and then manually start the transmission. An ISR will signal when the buffer is free to send the next packet
|