网络篇 例程讲解部分对常用协议的例程进行讲解说明。后期更新的例程,手册也会同步更新版本补足。如有任何疑惑,欢迎与炜世科技联系。 例程使用前,我们需要了解网络的分层结构,这样会更加方便了解例程代码。 为了使网络应用更为普及,ISO(国际标准化组织)推出了OSI参考模型。将网络划分为七层结构,其分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;具体信息如表1所示。 OSI参考模型 | 各层的解释 | 应用层 | 为应用程序提供服务 | 表示层 | 数据格式转化、数据加密 | 会话层 | 建立、管理和维护会话 | 传输层 | 建立、管理和维护都端的连接 | 网络层 | IP选址及路由选择 | 数据链路层 | 途观介质问和链路管理 | 物理层 | 物理介质传达电子信号 |
表1:OSI参考模型 TCP/IP协议中则将网络划分为五层结构,其分别为:物理层、数据链路层、网络层、传输层、应用层;其中应用层将OSI参考模型中的会话层、表示层、应用层都整合在内如表2所示。 TCP/IP协议五层结构 | 应用层 | 传输层 | 数据链路层 | 物理层 |
表2:TCP/IP协议五层结构 而W7500芯片内部,将TCP、UDP协议通过逻辑门电路实现,在硬件上完成了传输层功能,应用层则由MCU负责。使得用户接入网络更为便捷。 第十七章 Network install17.1 Network install例程概述 Network install例程实现功能为:初始化配置W7500各基本功能,完成W7500EVB基本网络参数初始化配置,最终使W7500EVB成功接入网络。 配置的主要参数介绍: 1. IP地址 IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫做“因特网协议”。 Internet依靠TCP/IP协议,在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的互联。在Internet上,每一个节点都依靠唯一的IP地址互相区分和相互联系。IP地址是一个32位二进制数的地址, 由4个8位字段组成,每个字段之间用点号隔开,用于标识TCP/IP宿主机。 每个IP地址都包含两部分:网络ID和主机ID。网络ID标识在同一个物理网络上的所有宿主机,主机ID 标识该物理网络上的每一个宿主机,于是整个Internet上的每个计算机都依靠各自唯一的IP地址来标识。 IP地址构成了整个Internet的基础,它是如此重要,每一台联网的计算机无权自行设定IP地址,有一个统一的机构—IANA负责对申请的组织分配唯一的网络ID,而该组织可以对自己的网络中的每一个主机分配一个唯一的主机ID。 2. 子网掩码 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。 3. 网关 网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。 4. MAC地址 MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。 因此一个主机会有一个全球唯一的MAC地址。 - 1. #include <stdio.h>
- 2. #include "W7500x.h"
- 3. #include "ip_config.h"
- 4. #include "time_delay.h"
- 5. #include "bsp_uart.h"
- 6.
- 7. int main()
- 8. {
- 9. SystemInit(); /* 系统内部时钟初始化 */
- 10. S_UART_Init(115200); /* 初始化串口2波特率为115200 */
- 11. delay_init(); /* 系统滴答时钟配置 */
- 12. phy_init(); /* PHY初始化设置 */
- 13. set_w7500_ip();
- 14. printf(" 网络已完成初始化!\r\n");
- 15. printf(" 在Dos命令行中输入cmd之后,输入ping %d.%d.%d.%d\r\n",ConfigMsg.lip[0],ConfigMsg.lip[1],ConfigMsg.lip[2],ConfigMsg.lip[3]);
- 16.
- 17. while(1)
- 18. {
- 19.
- 20. }
- 21. }
复制代码
此段代码为主函数部分。 1~5行是基本的头文件引用。7~21 行为主函数部分。其中9、10行函数是单片机的初始化,9行函数初始化滴答定时器,10行函数初始化串口通信(波特率为115200), 12行函数是PHY初始化和检查W7500EVB物理层是否连接,13行函数配置W7500EVB的MAC地址、IP地址、网关、子网掩码、8个socket的收发缓存。 下面着重讲解set_w7500_ip();函数。 - 1. void set_w7500_ip(void)
- 2. {
- 3. /*将IP配置信息写入W7500相应寄存器*/
- 4. setSHAR(mac);
- 5. setSIPR(lip);
- 6. setGAR(gw);
- 7. setSUBR(sub);
- 8. /* Set Network Configuration */
- 9. wizchip_init(tx_size, rx_size);
- 10. getSHAR(mac);
- 11. printf(" MAC ADDRESS : %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\r\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
- 12. getSIPR(lip);
- 13. printf("IP ADDRESS : %d.%d.%d.%d\r\n",ConfigMsg.lip[0] = lip[0],ConfigMsg.lip[1] = lip[1],ConfigMsg.lip[2] = lip[2],ConfigMsg.lip[3] = lip[3]);
- 14. getGAR(gw);
- 15. printf("GW ADDRESS : %d.%d.%d.%d\r\n",gw[0],gw[1],gw[2],gw[3]);
- 16. getSUBR(sub);
- 17. printf("SN MASK: %d.%d.%d.%d\r\n",sub[0],sub[1],sub[2],sub[3]);
- 18. }
复制代码
4~7行是将IP地址、子网掩码、网关等信息写入到W7500EVB对应的寄存器中,10~17行则并且读取相应的寄存器打印串口发送出来的IP信息,判断是否正确。 至此,Network install例程代码解析就结束了。将Network install例程编译烧录后打印串口信息结果如图17.1.1。 图17.1.1 Network install例程打印结果 打印串口信息表明网络已完成初始化,我们尝试PC机能否Ping通W7500EVB。结果如图17.1.2,成功Ping通W7500EVB,至此W7500EVB网络参数初始化配置成功,已与PC机接入同一网络中。 图17.1.2 Ping结果
|