AN0052 应用笔记 |
AT32 EMAC client and server |
前言
随着物联网的发展,各式各样的装置都必须具备连网的能力,单芯片也不例外,为此我们以雅特力的AT32F407系列,演示了一系列的范例,以其用户能基于这些范例,使用雅特力的开发板发展出自己所需要的功能。
支持型号列表:
支持型号 | 具备EMAC的型号 |
目录
2 AT32 TCP client/server程序设置.. 6
表目录
图目录
使用TCP执行通讯时,会有Server与Client的差别。Server是经由开启特定的Port来等待来自Client端的连线需求;而Client端则是向Server端提出连线需求,此例程使用LwIP作为协议栈,可以使用tcp_bind(), tcp_listen()与tcp_accept()这三种系统呼叫来使Server端接受Client的连线要求。
本使用指南会分别说明TCP client与TCP server该如何与PC端通信。
- tcp_client, TCP client源程序,运行TCP客户端程序
- tcp_server, TCP server源程序,运行TCP服务端程序
表1. 管脚配置
EMAC信号 | 管脚 |
EMAC_MDC | PC1 |
EMAC_MDIO | PA2 |
EMAC_RMII_REF_CLK | PA1 |
EMAC_RMII_CRS_DV | PD8 |
EMAC_RMII_RXD0 | PD9 |
EMAC_RMII_RXD1 | PD10 |
EMAC_RMII_TX_EN | PB11 |
EMAC_RMII_TXD0 | PB12 |
EMAC_RMII_TXD1 | PB13 |
-
- LwIP设置
硬件资源只提供从PHY到MAC的信号处理,若要进行开发,则需要实作TCP/IP协议栈,在本应用中使用LwIP协议栈,该协议栈主要关注的是怎样减少减少内存的使用和程序代码的大小,这样就可以让LwIP适用于资源有限的小型平台例如嵌入式系统,更详细的内容可以访问官方网站。
由于整个协议栈已经整合到代码中,大部分的内容都无须修改,使用者只要根据自己的网段去设定IP地址及闸口地址即可,这两个全局变量宣告在netconf.c的上头。
图1. 配置芯片的IP地址
在初始化LwIP协议栈之后,就可以配置TCP client的应用了,芯片作为客户端是发出请求的一方,所以必须要配置往哪里发送数据,也就是说要知道服务端的socket。所谓的socket就是IP地址加上端口,在代码中我们宣告了几个宏定义代表服务端的socket, 可以在tcp_client.h中找到TCP_SERVER_IP跟TCP_SERVER_PORT这两个宏定义,用户可以根据网段跟应用修改这两个宏。
图2. 配置服务端的socket
确认网段与服务端一致后,下载代码到芯片上,服务器端会一秒打印一次” tcp client experiment!”,同时LED2, 3, 4也会跟着闪烁。
- 设定上位机的IP地址、网路屏蔽及闸口,IP地址与闸口需要跟芯片设置在同一个网段下。
- 打开上位机端的服务器软件,这里使用网路调适助手为例。协议类型选择TCP server, 本地IP地址为代码中的TCP_SERVER_IP,本地端口号为代码中的TCP_SERVER_PORT,按下连线即建立连线。
- 连线建立后,会出现以下画面,不断打印来自TCP client的数据。
图3. 设置PC端的IP、网路屏蔽与闸口
图4. 设置服务器软件
图5. 接收TCP client的数据
在初始化LwIP协议栈之后,就可以配置TCP server的应用了,芯片作为客户端是接受请求的一方,所以必须要配置在哪里接受数据,也就是说要开个端口给客户端丢数据进来。在代码中我们宣告了一个宏定义代表服务端的端口, 可以在tcp_server.h中找到TCP_LOCAL_PORT这个宏定义,用户可以根据应用修改这个宏。
图6. 服务器端口的宏定义
- 设定上位机的IP地址、网路屏蔽及闸口,IP地址与闸口需要跟芯片设置在同一个网段下,请参考图3。
- 打开上位机端的服务器软件,这里使用网路调适助手为例。协议类型选择TCP client, 服务器IP地址为芯片的IP地址,本地端口号为代码中的TCP_LOCAL_PORT,按下连线即建立连线。
- 此时会出现讯息在视窗中,可以透过调试助手下方的区块输入字符串发送给服务器,服务器会响应输入的字符串到视窗中。
图7. 设置上位机的客户端软件
图8. 显示讯息到视窗中并响应发送的字符串
表2. 文档版本历史
日期 | 版本 | 变更 |
2021.09.03 | 2.0.0 | 最初版本 |