本帖最后由 Litthins 于 2024-8-30 16:51 编辑
#技术资源# #申请原创# @21小跑堂
印象中,STM32第一款支持以太网的MCU应该发布在2010年以前。现在2024年,小孩都从幼儿园念到大学毕业了,MCU还在外接PHY做以太网。十几年的发展历程,MCU的以太网开发解锁了哪些新花样?本文盘点MCU接入以太网的常见形式,意在帮助将要或正在从事以太网开发的工程师更好地了解当下以太网开发的各类选择、各条技术路线的差异,重点介绍以太网协议栈芯片的功能、结构和优点,探讨协议栈芯片流行的深层原因。读完本篇,下一个项目,跟繁重的协议栈开发说再见,少一些沉闷加班的夜晚,多回家陪陪老婆孩子。
快速盘点,MCU以太网开发的5种形式 前段时间看沁恒公众号上的文章,感觉这张图对MCU以太网开发概括的还是比较到位,5种常见的开发方式都齐了,就借这个图跟大伙聊一聊。
1.经典的互联型MCU+PHY,最经典的以太网开发模式
图中第二列是最常见也最经典的开发方式。互联型MCU内置以太网的MAC控制器,像STM32F207、STM32F417通常还需要外接一个PHY芯片。MAC控制器其实就是以太网的外设,套上PHY,连到网口上就可以实现基本的数据收发。以太网协议种类很多,都是根据项目按需选用,比如TCP、UDP,这就需要在MCU上跑一个协议栈,协议栈有开源的比如LwIP,也有一些商用的。这种开发模式,外接的PHY芯片需要选型,硬件上涉及到MII/RMII/RGMII接口匹配、网口匹配,软件代码虽然网上一大把,有时候读别人的代码却比自己从头写还痛苦,真要用还建议多参考厂商配套例程,原厂的Demo不一定完全满足需求,但至少是验证过的、可靠的。
2.内置PHY的互联型MCU
上一种以太网开发包含PHY芯片的选型和测试环节,这会导致成本增加并引入额外的风险。一些MCU厂商会提供内置PHY的互联型MCU,相当于把PHY选型和兼容性测试的成本转移到自己身上,可以节省成本并更好地控制风险。内置PHY有个显而易见的好处,就是省外部PHY芯片,节省MII接口的18个I/O,因此MCU的封装可以更小、EMI也好很多,MCU的4根线直接怼到网口上,可以有效简化连接。
3.MAC+PHY,基于控制器芯片的网口数量扩展
某些情况下会需要使用以太网控制器芯片,比如主控只有一个网口,方案却需要更多网口;或者方案量产后,后续升级款式要添加以太网功能,主控没有以太网却不方便更换。控制器芯片用SPI或并口等常见接口与主控通信,本质上是把MCU的MAC外设搬到外部芯片里同时集成PHY。以太网控制器芯片有DM9000、DM9051和CH390,其工作方式还是基于对寄存器的操作,协议栈跑在MCU上。因为可以与主控的MAC共存,因此在多网口的MCU应用上比较多见。
以上三种方式,无一例外都需要在MCU上跑协议栈。但协议栈的移植、开发和测试一直是个两难的抉择:LwIP等开放的协议栈,虽然免费商用,但学习曲线陡、难度大,开发时间长、试错成本高;商用协议栈技术服务好,但价格贵。曾有工程师吐槽,学习以太网协议栈的难度大于学习两个RTOS。如何可以把协议栈的开发成本和风险转移出去?这就要用到以太网的协议栈芯片。
4.协议栈芯片,省事,嵌入式联网的新宠
协议栈芯片将整个以太网功能最核心的三大块:PHY、控制器、协议栈从MCU上独立出去,仅需简单的指令配置或调用现成的接口即可实现以太网通信。由于内置了协议栈,MCU上不需要做协议栈的移植、开发和测试。只需要告诉协议芯片,与哪个IP地址的哪个端口建立套接字,使用TCP还是UDP等形式收发数据就可以,特别省事,而且网络兼容性有保障,相比MCU+PHY能节省几个月的开发和验证时间。
协议栈芯片显著降低了嵌入式设备接入以太网的门槛:直观上看,协议栈芯片转移了协议栈开发的成本和风险;其次,也降低了对主控资源和性能的要求。协议栈如果跑在MCU上,基本的Flash和SRAM占用要从30~40kB往上走,部分性能较弱的MCU,可能还会出现“小马拉不动大车”的情况。协议栈的负担从MCU上移除之后,对主控性能的要求就明显降低。
市面上常见的百兆以太网协议栈芯片有国产CH395/CH394和韩国Wiznet的W5500。下表根据手册简单对比了一些参数。
CH395/CH394与W5500功能、性能对比 从手册抓几个比较有意思的点。首先W5500支持80MHz的SPI,吞吐量却只有15Mbps;相比之下,CH394的SPI只到40MHz,却有30Mbps的吞吐量;进去的时钟频率减半,出来带宽提升一倍,如果拿私家车作比,颇有种“一半油耗双倍行程”的感觉,算下来应该是4倍的性能提升,估计是CH394内部所谓垂直打通后的效果。
另一个点,W5500不支持Auto-MDIX自动交叉,这容易引发兼容性问题。不了解以太网的朋友,可能觉得天下网线都长一个样,怼上就完事了。实际上,网线除规格有五类、超五类、六类线等,还有直连线和交叉线的差异。原因是某些设备的网口用1、2脚发送,3、6脚接收,而另一些设备则正好相反。正是这种差异,导致网线连上了有时候却无法正常工作。下图展示了两种网线的使用场景。
同种网口用交叉线,异种网口用直连线。线选错了,就像串口的TX怼到了TX上,无法通信。这时,要么换线,要么芯片内部把TX/RX对调一下。所谓Auto-MDIX,就是在芯片内部自动对调以太网的TX/RX,这样就解决了接口线序的匹配问题。从这个角度讲,支持Auto-MDIX的设备可以无视交叉/非交叉网线的差异,相当于可以盲插,降低工程现场的安装要求。
宽接口电压与内置唯一MAC地址也并非CH395/CH394独有的特性,实际上沁恒整个以太网接口芯片产品都具有宽接口电压和内置MAC地址的特征,印象中有一个QFN20封装的以太网PHY芯片CH182D,竟然也自带MAC地址,这也算个亮点吧。MAC地址就是网络世界里的手机号,如果芯片不带号,让用量不大的普通玩家到哪弄MAC地址?据说在局域网这种小范围里就有些玩家“自创”MAC地址。
5.透传芯片,网络小白也能轻松联网
透传芯片在协议栈芯片的基础上提供更高层次的抽象,可以说网络小白也能轻松使用,是最省事的以太网芯片。针对只需要以太网TCP/UDP的Server/Client功能的开发者,透传芯片将以太网通信简化至串口透传,是最易上手的网络解决方案。
本文盘点了MCU常见的5种以太网开发方式,重点介绍了以太网协议栈芯片的结构、功能和用法,希望对大家有所帮助。
|
此文章已获得独家原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。
挺不错的盘点,基本囊括了现阶段的MCU介入以太网的方式,总结的较为全面,几种方式的特点和优缺点均有概括,适合读者筛选比对。