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.5. 编译和下载

  • 命令行编译

1
2
$ cd bl_mcu_sdk
$ make APP=lwip_tcp

8.3.6. 实验现象

编译完成后,烧写到芯片正确运行后,可以通过配置的测试端口访问芯片。

串口 log 信息:

使用 Wireshark 抓取网络数据包,可以看到 TCP 协议连接的三次 “握手” 过程,以及传输的数据:

断开连接后,通过 Wireshark 抓取网络数据包,也可以观察到 TCP 协议断开连接的四次 “挥手” 过程,以及传输的数据: