博主最近发现一个问题,自己做了挺多带网络功能的项目,但很少关注网络功能硬件层面是如何实现的,一般都是调调应用层的代码。处于好奇,想了解下网络的硬件是如何设计的,所以带着疑问上网搜索了一圈,顺道整理了MCU常见的几种联网方案,和大家一起分享一下。
文章目录
一、以太网的组成
在说联网方案前先来说说网络通信的必要组成部分,想要进行网络通信最少要包含:应用代码、协议栈、MAC、PHY。
1、应用代码
这没什么好说的,就是我们的业务代码,包括Socket创建、连接,数据的组包、解析等
2、协议栈
协议栈就是用来约定双方通信的规则,常见的协议栈:TCP/IP协议组、OSI协议栈、NetWare SPX/IPX协议
3、MAC控制器
MAC 是 Media Access Control 的缩写,即媒体访问控制子层协议。该协议位于 OSI 七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。在发送数据的时候,MAC 协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC 协议首先判断输入的信息是否发生传输错误,如果没有错误,则去掉控制信息发送至 LLC 层。以太网 MAC 由 IEEE-802.3 以太网标准定义。
4、PHY收发器
PHY 是物理接口收发器,它实现物理层。包括 MII/GMII (介质独立接口) 子层、PCS (物理编码子层) 、PMA (物理介质附加) 子层、PMD (物理介质相关) 子层、MDI 子层。定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。物理层的芯片称之为PHY。
二、MCU常见的5种联网方式
1、MCU+透传芯片(协议栈、MAC控制器、PHY收发器)
例如CH9121、CH9120,这种芯片内部集成了协议栈+MAC控制器+PHY收发器,通过串口和MCU连接。MCU只需要通过串口就能完成网络通信。这种方式用法简单但是局限挺多的,比如传输速率、IP不能灵活改变等。
反正博主没用过这种方案。
2、MCU+以太网协议芯片(协议栈、MAC控制器、PHY收发器)
例如W5500、CH395,这种芯片内部集成了协议栈+MAC控制器+PHY收发器,通过SPI/串口和MCU连接。MCU仅需简单的指令配置或调用现成的接口即可实现以太网通信。这种方案适用于性能较差的MCU,比如STM32F103,通信数据不大的话可以选择这个,一般是10M/100M自适应。
这种方案博主用的比较多,如果有需要的话可以看看我的这几篇文章,是W5500的使用例程
https://blog.youkuaiyun.com/m0_46295154/article/details/143492901
https://blog.youkuaiyun.com/m0_46295154/article/details/143525529
https://blog.youkuaiyun.com/m0_46295154/article/details/143578596
3、MCU(协议栈)+以太网控制器(MAC控制器、PHY收发器)
例如DM9000、CH390等,这种芯片内部集成了MAC控制器+PHY收发器,通过SPI/串口和MCU连接。该类实现方式所用MCU一般为通用型MCU,且MCU资源较大(如FLASH、RAM够大),该类MCU无内置MAC和PHY,如STM32F103大容量系列等,需要外接以太网MAC控制器和PHY进行以太网通信,MCU端需要运行以太网协议栈。此时一般配合外接一个以太网控制器即可实现以太网通信。
这种方案用的也挺多的(博主没用过)。
4、MCU(协议栈、MAC控制器)+PHY芯片(PHY收发器)
例如RTL8201、LAN8720、CH182等,该类实现方式所用MCU一般为高性能或互联型MCU,该类MCU一般会内置MAC控制
器,如STM32F205/207系列,此时仅需外接以太网PHY(如RTL8201、LAN8720、CH182)即可实现MCU的以太网通信。
这种方案用的也比较多,博主用过但是没有写过文章,不过找了一篇文章写的不错,分享给大家参考:
https://blog.youkuaiyun.com/lrqblack/article/details/123791613
5、MCU(协议栈、MAC控制器、PHY收发器)
最后一种是集成了协议栈+MAC控制器+PHY收发器的MCU,如CH32V307、CH32F207等。这种方案也挺省事的吧,作为开发人员调试的时候比较方便,由于所有功能都集成到了MCU内部,所以一般不会出现由于硬件问题导致网络无法通信。
这种方案博主也没用过,大家如果用到的话可以自己找找资料。
三、总结
以上内容是关于MCU联网的常用方案,由于博主不是做硬件的,很多东西说的不是很专业,欢迎大家指正。最后,附上博主写这篇文章参考的资料,原文写的更详细一些:
https://blog.youkuaiyun.com/ic2121/article/details/142289831
文写的更详细一些:
https://blog.youkuaiyun.com/ic2121/article/details/142289831
https://www.cnblogs.com/liaigu/p/17580408.html