ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32F407+RTL8201F百兆以太网原理图与调试避坑指南

STM32F407+RTL8201F百兆以太网原理图与调试避坑指南 前段时间做了一块带百兆网口的采集板主控用的是STM32F407PHY芯片选了RTL8201F。这颗料在百兆以太网方案里属于“常青树”消费路由、工业网关、通信模块上都能看到它的身影价格便宜、货源稳定、参考设计也多。不过真的动手画原理图的时候我发现网上关于它的系统性资料并不多大多是直接丢一个PDF让你自己看踩坑经验更是散落得七零八落。所以我把这次从选型、原理图、布局布线到调试出link的完整过程记录下来重点是把那些“数据手册里没写透、焊接完才发现的坑”摆到台面上讲给后面要用这颗料的兄弟们省点时间。如果你现在正在用RTL8201F做原理图或者正纠结到底用RMII还是MII、时钟到底谁来给、变压器该怎么接这篇内容应该能帮你少走不少弯路。就算你已经画完了板子看看避坑那一段也能排查出不少隐患。1. 先搞清楚RTL8201F的定位再谈画原理图很多新手拿到芯片就急着画图结果做到一半发现接口选错了、时钟方向搞反了直接推翻重来。所以我建议先花半天时间把这颗芯片的定位、优势、限制搞清楚后面会顺畅很多。1.1 它是干什么的有什么本事RTL8201F是一颗单端口10/100M自适应以太网物理层芯片行业里一般叫PHY。它的工作就是把MAC层过来的数字信号变成可以上双绞线的模拟差分信号同时负责接收端的解码、时钟恢复、链路协商这些脏活累活。MAC和PHY之间通常走MII或者RMII接口RTL8201F两种接口都支持这给了设计很大的灵活性。接口MII RMIIRMII下信号线从十几根压缩到七八根接MCU非常方便。速率10/100M自适应带Auto-Negotiation也就是自动协商。供电典型3.3V单电源具体要仔细看数据手册的电源引脚定义。封装常见的是LQFP48手工焊接有点难度但是用风枪加上好的助焊剂也能搞定。工作温度有商业级和工业级版本工控场景一定要选工业级。对于普通MCU联网项目来说RMII接口是主流选择因为占用的GPIO少走线也简单。RTL8201F的RMII模式配置一般通过芯片的strapping引脚去设定这一点你画原理图的时候就要定死不要指望软件能随便改。1.2 和LAN8720、DP83848比优势在哪市面上百兆PHY的选择不少最常见的三个是RTL8201F、LAN8720A和DP83848。我简单列个对比方便你判断自己该用哪颗对比项RTL8201FLAN8720ADP83848接口支持MII RMII仅RMIIMII RMII典型供电3.3V内核需关注3.3V内置LDO3.3V或2.5V封装LQFP48QFN24LQFP48焊接难度中等较难底部焊盘中等价格区间便宜便宜稍贵参考设计丰富度很丰富很丰富很丰富从我实际用下来的感觉LAN8720A的QFN封装对新手不太友好底部焊盘虚焊是家常便饭一旦虚焊link就起不来排查起来非常痛苦。DP83848规格很强但是价格和采购周期没那么友好。RTL8201F则是典型的“耐操型”选手LQFP封装好焊接IO也皮实性能中规中矩做工业控制板非常合适。当然选型不是越贵越好关键看你的主控、PCB空间和采购渠道。如果你用的是ESP32这类只接得了RMII的芯片LAN8720也是合理选择如果你需要MII接口RTL8201F和DP83848都可以如果追求低成本且对信号完整性有把握RTL8201F就很稳。1.3 选型前必须确认的三件事这几件事我建议你在画原理图之前就确认清楚否则后面麻烦不断。芯片后缀差异RTL8201F有不同后缀的版本有些带不同等级的温度范围有些可能是RMII-only的简化版。采购之前一定要让代理商提供对应型号的完整Datasheet并确认你拿到的芯片和资料一致。时钟源方案RMII模式需要50MHz参考时钟这个时钟可以由主控输出给PHY也可以由PHY输出给主控还可用外部有源晶振必须提前和主控的RMII接口对应起来。选错了就是link起不来。第二货源如果是量产项目建议确认RTL8201F的替代料。比如RTL8201CP在某些设计里可以作为备选但引脚定义和配置可能不完全一样量产前一定要做完整的兼容性测试。2. 原理图设计实操从电源到变压器的完整连接原理图是整块板子的地基地板打不牢后面层层的坑都会冒出来。我按电源、时钟、接口、变压器、辅助电路这个顺序拆开来讲。2.1 电源树先把供电理顺RTL8201F的电源引脚不算复杂但很容易被人忽略的是模拟电源和数字电源的区分。芯片一般会有AVDD、DVDD这些引脚甚至还有给PLL供电的独立引脚。布线的时候如果全部用一个3.3V直接铺过去测起来可能也能工作但稳定性和EMI表现会差很多尤其是100M跑满速的时候容易出现偶发丢包。我这次的做法是主电源3.3V进来后先过一颗磁珠再分成模拟3.3V和数字3.3V两大块。模拟电源区域放的电容以低ESR的陶瓷电容为主0.1uF和10uF配合贴在对应电源引脚旁边。数字电源引脚也是0.1uF逐脚去耦同一颗芯片频率高去耦电容不要省。内核电压如果数据手册要求独立供电千万不要自作主张从数字电源上直连必须按手册的推荐电路来。上电顺序也要看手册。部分PHY对DVDD和AVDD的上电时序有要求虽然RTL8201F在这方面不算特别敏感但量产设计还是建议加一个简单的电源监控复位电路确保所有电压稳定后再释放复位信号。2.2 时钟电路25M晶振和50M参考时钟RTL8201F需要一个基准时钟一般是25MHz晶振接到XI和XO引脚配合两颗负载电容。晶振频率不要选错我之前见过有人拿32.768K的晶振往上焊那肯定是起不来的。负载电容值要根据晶振的规格来计算常见的12pF、18pF、22pF都可以。计算方式是CL (C1 × C2) / (C1 C2) 寄生电容寄生电容一般估3-5pF。如果你用18pF的电容串联后的等效电容大概是9pF加上寄生电容约12-14pF这个范围通常能匹配大多数8MHz到25MHz的贴片晶振。实际板子回来后有条件最好用示波器测一下晶振波形确认起振正常且频率稳定。RMII模式下还需要50MHz参考时钟。这里有两种做法主控提供时钟STM32的MCO引脚输出50MHz给PHY的REF_CLK前提是PHY配置为REF_CLK输入模式。PHY提供时钟PHY使用25MHz晶振内部倍频后从REF_CLK引脚输出50MHz给主控前提是PHY配置为REF_CLK输出模式。这两种方式取决于芯片的时钟方向和模式配置选型时就定死。我个人比较喜欢用主控MCO提供50MHz的方式因为这样PHY的晶振频率就是标准的25MHz和MII模式也能复用方便调试。但要注意MCO引脚本身的输出能力如果需要走很长线建议串联一个22-33欧姆的电阻减小振铃。2.3 RMII接口与STM32的连线RMII接口的信号线不多只有TXD0、TXD1、TX_EN、RXD0、RXD1、CRS_DV、REF_CLK加上管理接口MDIO、MDC总共九根线。以STM32F407为例常用引脚映射是STM32引脚RTL8201F信号方向说明PA1REF_CLK50MHz参考时钟来自MCOPA2MDIO管理数据双向PA3MDC管理时钟输出PA4RXD0接收数据PHY输出PA5RXD1接收数据PHY输出PA7CRS_DV载波侦听/数据有效PB11TX_EN发送使能PB12TXD0发送数据PB13TXD1发送数据不同MCU的IO复用可能不一样画图前一定要打开参考手册的Alternate Function表格核对一遍不要照抄别人的接线。MDIO/MDC需要在PHY侧做上拉或按手册要求接上拉电阻否则管理接口读写会不稳定。TX、RX信号线上建议串联22欧姆左右的电阻作用是抑制振铃、减小EMI。这个电阻不是必须的但加了之后实测波形会干净很多对过EMC测试也有帮助。如果板子空间紧张也可以不贴但预留焊盘是比较成熟的做法。2.4 网络变压器与RJ45座子PHY芯片不能直接接RJ45中间必须加网络变压器。变压器的作用是电气隔离、共模抑制和阻抗匹配省掉它不但容易烧PHY而且过不了认证。网络变压器有两种方案分离式变压器 普通RJ45座子灵活替换方便但占PCB面积。集成变压器RJ45座子比如HR911105A这类一颗座子搞定方便省事小模块常用。我这次用的是集成变压器的RJ45座焊接和布线都简单一些。变压器中心抽头的处理方式是关键PHY侧中心抽头通过RC到地电阻常见50欧电容常见1000pF/2kV这叫Bob Smith端接用来提供共模噪声泄放路径。如果你用的RJ45座子内部已经集成好了端接电路那就不需要额外加但一定要确认座子的原理图正确。变压器和PHY之间的差分线对必须严格遵守数据手册的极性定义。TX、TX-、RX、RX-不要接反我在下面避坑部分会细讲。变压器到RJ45的线对按照RJ45标准定义1-2是TX、3-6是RX多数座子都标好了按图接即可。2.5 strap电阻、复位和LED看起来不起眼但很关键PHY芯片上电时有一堆strapping引脚它们的电平状态决定芯片的工作模式。比如PHY地址、RMII/MII模式、时钟方向、是否使能Auto-MDIX等。这些引脚通常通过上拉或下拉电阻设定状态正常工作后这些引脚还可以复用为其他功能。这里最大的坑是strap电阻的默认值和你想要的状态不一致。比如你希望PHY地址是1就按数据手册的表格给对应引脚配上拉/下拉不要依赖默认值默认值大部分情况下是0多片板子如果都用的地址0MDIO管理接口就会冲突。复位电路我习惯用简单的阻容复位加一个手动复位按键RC时间常数按照数据手册要求来一般是至少1ms的低电平复位脉冲。RC取值如果太小上电瞬间PHY可能没有完全复位就开始初始化导致状态机卡死。用一个10uF电容加10K电阻时间常数在100ms左右够稳。LED引脚需要串联限流电阻一般470欧到1K欧根据座子的LED额定电流来算。千万不要把LED直接接到3.3V不然电流过大烧灯或者拉低电平影响PHY内部状态。另外所有NC引脚和不用的引脚按照数据手册的推荐处理有的需要接地有的需要悬空不要为了偷懒一把全接地或者全悬空尤其注意不能把电源引脚和NC混淆焊错直接短路。3. 原理图避坑指南这些坑我替你踩过了这节是整篇文章的重头戏。下面这些坑都是我在实际项目中遇到的每一个都真实导致过板子返工或者调试了一整天。3.1 坑一差分对极性接反link死活不起来第一次画RTL8201F的时候我在变压器选型上没仔细看直接把之前一个RJ45座子的封装拿过来用了。结果板子回来后PHY的link灯怎么都不亮。用万用表量电压都正常示波器看波形也能看到发送端有数据但就是两边协商不上。排查了很久最后拿着网络变压器的手册一页页对才发现问题RJ45座子内部1-2和3-6的线序和常规标准不一样我又把PHY的TX接到了变压器的RX侧等于把发送和接收给交换了。虽然很多PHY支持Auto-MDIX也就是能自动交叉TX和RX但这是要在芯片配置正确、且对端也支持的情况下才能生效。如果对端是普通交换机或者电脑网卡一般没问题但如果对端是另一块同样没有正确开启Auto-MDIX的板子就直接哑火。更麻烦的是有的PHY在RMII模式下对Auto-MDIX的启用有额外配置要求你画图时根本没注意到。所以画完原理图一定要做一遍差分线对核对PHY的TX± → 变压器发送绕组 → RJ45的1、2脚PHY的RX± → 变压器接收绕组 → RJ45的3、6脚。不要只看信号名一定要顺着网络标签看到底连到了哪个封装焊盘。这个核对过程十分钟能给你省下至少一天的焊接返工时间。3.2 坑二RMII参考时钟方向没统一偶发丢包RMII模式对REF_CLK的要求是50MHz但关键问题是谁给谁。我遇到过一次是在一块板子上PHY配成了REF_CLK输出模式而STM32的MCO也配置成输出50MHz等于两边都在输出互相打架。结果就是链路偶尔能link上但跑大包测试的时候丢包率惨不忍睹百思不得其解。后来用示波器同时抓PHY的REF_CLK引脚和STM32的MCO输出才发现两个信号在同一个网络上互相干扰波形都已经畸变了。处理方法是把PHY改成REF_CLK输入模式只用STM32的MCO引脚提供50MHz问题立刻消失。这个坑的原理很简单RMII标准里REF_CLK有且只能有一个源要么MAC给PHY要么PHY给MAC要么外部晶振给两边绝对不能两边同时驱动同一个引脚。所以画原理图时要主动把时钟方向写进设计说明里并对着数据手册的strapping表逐个确认。另外50MHz参考时钟的走线要尽量短并且远离电源和高速数字线否则即使方向对了信号质量不佳也会导致偶发丢包。可以在MCO输出到PHY的REF_CLK之间串联一个22欧姆电阻能明显改善波形。3.3 坑三PHY地址strap被忽略MDIO读写对不上MDIO管理接口是访问PHY内部寄存器的最主要途径。MDIO协议里每条命令都带一个PHY地址字段只有地址匹配的PHY才会响应。RTL8201F的PHY地址通过strap引脚在上电时锁定我的板子一开始没接任何strap电阻结果所有引脚默认状态组合出来的PHY地址是0而驱动代码里用的是1导致读寄存器一直超时。很多人遇到MDIO读不到数据第一反应是怀疑时序、怀疑上拉、怀疑主控配置其实最该先查的就是PHY地址到底是多少。用万用表量strap引脚的上下拉状态再对数据手册找对应地址值这一步五秒钟能定位。量产的话我建议把PHY地址固定为1因为有些主控或网络协议栈默认地址是1用0虽然也能改但容易和复位状态混淆。strapping电阻的精度和布局也有讲究电阻要靠近PHY引脚放置而且不要在附近走高速信号否则上电瞬间的状态可能被干扰。3.4 坑四复位电路太简单上电后PHY不进正常状态PHY的复位信号需要在供电稳定后保持一段时间的低电平然后释放芯片才开始正常的初始化流程。我在一块小模块上偷懒直接用一个RC复位电容取太小了结果每次上电PHY都有一半概率link不上要手动按一下复位键才能恢复。原因很简单电容太小复位时间太短3.3V还在爬升过程中复位信号就已经释放了PHY在电源没稳定的时候就开始了初始化状态机卡在某个中间态。后来我把RC改成10uF电容加10K电阻上电复位时间拉长到100ms左右问题解决了。另外如果你用的是MCU的GPIO来控制PHY复位那么在MCU固件启动时也要保证输出一个足够长的低电平脉冲然后再拉高。这个GPIO的复位逻辑要去抖不能在MCU启动过程中出现多次翻转。3.5 坑五电源去耦不到位自适应不稳定有一版板子PHY单独工作没问题但只要把网口插上交换机偶尔会出现协商速率掉到10M、甚至断开重连的情况。一开始怀疑是变压器的问题换了好几个座子都一样。后来用示波器看3.3V电源纹波发现PHY高速收发时电流突变很大电源引脚附近的高频纹波已经超标。问题出在去耦电容布局上。我最初为了布线方便把所有去耦电容都放在芯片的一侧离电源引脚太远高频退耦效果基本等于零。后来重新调整布局把0.1uF电容尽量贴在每一个电源引脚旁边再配合10uF的储能电容问题明显改善。这个坑的经验是电源去耦电容的“摆放位置”比“电容值”更重要。0.1uF的小电容必须和电源引脚构成最小的地环路如果中间隔了几个过孔或者绕了一段线那这个电容基本就是摆设。模拟和数字电源之间的磁珠隔离也要留好位置不要为了省空间跳过。3.6 坑六LED指示灯和NC引脚处理不当RTL8201F的LED引脚一般是开漏输出或者推挽输出需要外接限流电阻。有些参考设计直接用一个LED串联电阻到3.3V这是可以的但要注意LED极性。我见过板子焊好后link灯常亮拔了网线仍然常亮查了半天发现是把LED接到了电源常亮那边而不是PHY的link状态指示。另外PHY芯片上有一些NC引脚或者工厂测试引脚在一些Datasheet里标注为“Do Not Connect”或“Reserved”。这些引脚的处理方式一定要按手册来有的需要接地有的需要悬空有的还要求串联磁珠。如果全都不接大部分情况下也能工作但量产时的良率和一致性可能会出问题。我踩过的具体例子是某个NC引脚被我不小心和地平面短接了结果PHY的PLL工作异常link速度偶尔掉到10M。后来飞线割开恢复正常。所以画图前一定要把每个引脚的“推荐接法”过一遍不要在引脚处理上偷懒。4. PCB布局布线画完原理图不算完原理图只是第一步布局布线的好坏直接决定你能不能正常跑满100M。很多初学者照着参考设计画出来能工作但EMI不过、丢包、时延大都是布局布线的锅。4.1 差分走线和非差分信号RMII接口虽然不是特别高速但100M以太网的TX±、RX±差分线对依然值得认真对待。要求是差分阻抗控制在100欧姆左右双层板可以通过计算线宽和线距来逼近四层板会好控制很多。TX和TX-要等长误差最好控制在5mil以内RX对同理。差分对要远离时钟线、电源开关节点和其他高频信号避免串扰。每对差分线周围要有连续的地参考平面不要跨越分割线。如果你的板子只有两层线宽线距计算可以用常见的阻抗计算工具比如Saturn PCB Toolkit输入叠层厚度、铜厚、介电常数很快能算出一组参考值。做不出来精确100欧也没关系尽量接近差分对等长和参考平面完整对实际性能的影响更大。4.2 晶振、电源和参考平面25MHz晶振要尽量靠近PHY的XI、XO引脚走线要短两边最好包地对打一排地孔防止晶振辐射干扰周围电路。晶振下方不要走其他高速信号我见过晶振下面过了RMII的TXD信号线结果丢包率一直压不下去。电源平面和地平面要完整。四层板的话第二层做完整地平面第三层做电源平面这是最理想的结构。两层板就要特别注意电源走线的宽度和过孔数量PHY的瞬时功耗不小电源走线太细会导致电压跌落。模拟地和数字地之间如果要分割注意不要破坏差分信号和参考时钟的参考平面完整性。我见过有人为了模拟数字分离在PHY下方把地平面割了一条缝结果差分对跨越了地缝信号质量严重劣化。其实只要布局合理、模拟电源用磁珠隔离地平面不分割反而更好。4.3 变压器的位置与隔离带网络变压器或集成变压器座子的摆放位置有讲究PHY到变压器之间的走线短变压器到RJ45之间的走线也短两边都短。一般来说PHY放在板子一侧变压器和RJ45放在靠近板边的位置和接插件在同一侧。集成变压器座子内部有隔离带分割机械地和信号地。PCB上在变压器下方要留出禁布区不要让地平面和电源平面跨过隔离带否则隔离效果会打折扣。如果座子本身自带隔离槽那就以座子的实际结构来决定分割位置。我自己习惯的做法是PHY和主控放在同一侧变压器和RJ45放在板边中间的信号走线尽量短能不过孔就不过孔。差分对换层一定要成对打过孔并且打孔附近加一个回流地孔减少回流路径突变。5. 上电调试与问题定位板子焊完接下来就是最刺激的上电调试环节。下面这套排查顺序是我多年来总结出来最有效的路线先电源、再时钟、然后管理接口、最后看link。5.1 上电第一眼电源、时钟、LED上电不要急着接网线先看几个关键测试点3.3V电源是否正常纹波多少万用表和示波器都量一下。25MHz晶振是否起振频率是否准确幅值是否满足PHY的要求。复位脚的电平是否稳定在高电平有没有反复跳变。PHY的LED灯有没有初始化动作。这一步能快速排除低级错误。比如电源短路、晶振不起振、复位拉不住这些都是焊接或原理图层面的问题在这里发现是最省时间的。确认电源和时钟正常后再接网线到交换机或者电脑网卡观察link灯是否有反应。如果link灯亮了大概率硬件已经通了如果没亮进入下一步排查。5.2 用MDIO寄存器验证PHY是否正常link灯不亮或者你想确认PHY是不是真的在正常工作MDIO寄存器是很好的诊断工具。通过MDIO接口读PHY的基础寄存器基本能判断PHY的状态寄存器地址寄存器名称关键内容0x00BMCR复位、自协商使能、速率设置0x01BMSRLink状态、自协商完成、能力0x1F厂家特定寄存器根据手册定义用STM32的HAL库读PHY寄存器很简单uint32_t addr PHY_ADDRESS; uint16_t reg0 HAL_ETH_ReadPHYRegister(heth, addr, 0); uint16_t reg1 HAL_ETH_ReadPHYRegister(heth, addr, 1);如果读出来的BMSR中Link Status位是1说明PHY已经检测到对端链路。如果一直读不到有效数据优先检查MDC/MDIO的时序、上拉电阻、PHY地址配置。也可以用逻辑分析仪抓MDIO波形手动分析是不是有ACK信号返回。顺便提一句如果你用的是嵌入式Linux系统PHY的地址是通过设备树配置的比如“reg 1”这个值和原理图上的strap电阻一定要对应上不然PHY驱动加载时会报错。5.3 常见问题速查表调试过程中遇到的问题五花八门这里整理一个速查表方便你对照排查现象可能原因处理办法link灯完全不亮电源、晶振、复位、差分接线、变压器按调试流程逐级排查link灯亮但ping不通主控RMII接口配置错误、时钟方向不对核对MCU引脚复用和REF_CLK方向能link上但协商到10M差分线质量差、变压器、去耦不良检查差分走线等长和参考平面丢包率严重REF_CLK信号质量差、电源纹波大、地平面不完整串电阻改善时钟波形、加深去耦、优化地平面MDIO读不到寄存器PHY地址不对、复位不彻底、MDC时序问题检查strap电阻、RC复位极性、用逻辑分析仪抓波形插上网线PHY发热严重电源短路、变压器规格不对、PHY地址冲突断电检查3.3V对地阻抗、更换变压器、核对寄存器上电偶尔link不上复位时间不够、电源爬升太慢增大RC复位时间常数、检查电源监控芯片遇到问题不要慌最大的敌人是“觉得哪里都可能有问题然后乱动”。先把范围锁定在电源、时钟、复位、管理接口这四类基础项上每个测试点都量化记录下来基本能定位到具体模块。最后再分享一个心得做RTL8201F这种成熟PHY芯片90%的问题都出在“配置和文档没对齐”而不是芯片本身。画原理图之前把Datasheet里的strapping表格、电源引脚表、时钟要求通读一遍标注在每个功能模块旁边画图时照着做就能避开绝大多数坑。剩下的就是焊接细心点、测试耐心点网络通讯这种东西只要物理层稳了上层就不容易出幺蛾子。
返回列表