8.3. TCP echo¶
本 demo 基于 BL706 ETH 开发板,并基于 LwIP 轻量级网络协议栈,实现了一个 TCP 协议通信的例程。
以太网 PHY 芯片这里使用的是 PHY8720
8.3.1. 硬件准备¶
一块 BL706 ETH 开发板
一块 PHY 8720 模块
一个串口线
一根标准 5/6 类网线
8.3.2. 硬件连接¶
本 demo 基于 BL706 ETH 开发板,将对应的功能引脚连接到 PHY8720 模块上,连接方式如下:
GPIO function GPIO pin
----------------------------------
RMII_CLK <--> GPIO0
RMII_TXD0 <--> GPIO1
RMII_TXD1 <--> GPIO2
RMII_RXD0 <--> GPIO7
RMII_RXD1 <--> GPIO8
RMII_MDC <--> GPIO18
RMII_MDIO <--> GPIO19
RMII_RXERR <--> GPIO20
RMII_TX_EN <--> GPIO21
RMII_RX_DV <--> GPIO22
接下来需要将 PHY8720 模块的 RJ-45 接口通过标准 5/6 类网线连接到与测试 PC 在同一局域网中的路由器或者交换机上。
8.3.3. LwIP 协议栈的配置¶
LwIP 协议栈的相关配置文件在 components/lwip/lwipopts.h
中,详细配置请阅读代码源文件
如果要使用 TCP 相关功能,需要在文件中使能 LWIP_TCP 宏定义,否则将会使用 LwIP 默认的配置
1 2 3 | /* ---------- TCP options ---------- */
#define LWIP_TCP 1
#define TCP_TTL 255
|
8.3.4. TCP 测试本地端口设置¶
在 examples\emac\lwip_tcp\tcp_server.h
文件中,通过修改宏定义即可修改测试端口号
注:由于当前测试例程使用静态 IP 配置进行的测试,如需修改可在 main.c 中进行相应的修改,也可直接使能 LWIP 的 DHCP 功能自动获取 IP 配置。
1 | #define TCP_SERVER_TEST_PORT (3365)
|
8.3.6. 实验现象¶
编译完成后,烧写到芯片正确运行后,可以通过配置的测试端口访问芯片。
串口 log 信息:
使用 Wireshark 抓取网络数据包,可以看到 TCP 协议连接的三次 “握手” 过程,以及传输的数据:
断开连接后,通过 Wireshark 抓取网络数据包,也可以观察到 TCP 协议断开连接的四次 “挥手” 过程,以及传输的数据: