STMCU小助手
发布时间:2021-7-23 14:55
|
之前的文章主要介绍了STM32的ExternalPHY Intereface部分,《STM32网络电路设计》也就是下图区域1。 本文将重点讲解STM32的MAC控制器,也就是下图区域2。, h. ]. _. b; B z! b2 ~4 p
9 Y8 n4 C; U+ T( ^4 m R 1 p% ~2 m+ w8 Q! Y% [( u; b 01: P! ^- D3 C3 Z& X8 ^2 x k$ ]! d2 m7 M STM32的MAC概述 % z- S3 z H* N: H6 o" p STM32的MAC控制器全称是:MediaAccess Control。7 X- E& e9 i' E& r+ C1 _ M5 N5 _) i STM32F207的MAC控制器支持的模式 符合IEEE 802.3 MAC& _* b, B4 K. q {0 q; p 10/100Mbps网络 全双工和半双工通信* s. D: X9 W! @6 m2 Y5 u% M 和外部PHY的MII接口和RMII接口- {4 ] b. B5 ^4 [- P 支持前导码和帧起始数据(SFD)插入或删除% B1 R- r" s D; e8 q% e 支持IPv4的头部checksum校验和检查7 L8 G6 h& j0 Y' B 支持以太网唤醒/ K/ l. M0 O- \3 y) X. p 有效载荷检查
其实ST在设计MAC控制器时,设计了其他功能,PTP(IEEE1588)精确时间协议,MMC网络统计功能,这些功能并不常用,本人也没有接触,就不再讲解。 对于上面说到的:支持前导码和帧起始数据(SFD)插入或删除。 之前的推文《以太网数据首部》中并没有说到前导码和帧起始数据(SFD)。一个以太网数据结构如下:
大多数网络设备都是支持前导码和帧起始数据(SFD)插入或删除。所以可以说,这是网络硬件设备在以太网帧前打包的数据。个人认为并不属于TCP/IP协议簇的内容。/ h$ m! E: k+ m: J9 E- Z ; Q# A: X( T- ^4 b1 ] 023 v# y2 I1 _+ S MAC地址过滤" x/ u, f0 q" K" ]' ]" f 0 Q: `7 N1 Y$ K1 G STM32的MAC控制器支持MAC地址过滤的。 目的地址过滤: 单播过滤 组播过滤( a( a5 p M, K& Q- Y: R% v 广播过滤 注意:广播过滤会导致ARP广播也收不到,具体请看《TCP/IP协议簇中ARP协议》。 x6 i4 `% [6 j7 c 源地址过滤:单播过滤0 D) G* f0 u- |: ^ 1 q# j9 {( F6 B, T! G' m $ {0 Q* v$ ^' W: J+ h' L, @- k+ z STM32的MAC控制器还支持:规则翻转,比如,原来只允许单播过滤接收,翻转之后,只有单播不接收。! m* ]' Y4 q. {; H& r 在STM32实际项目开发中,只需要调用ST的库文件即可
% P2 C! ?* x6 e5 ?9 K3 {2 F ! r$ c3 I+ H4 s( E3 L. v3 Z! x 03 有效载荷检查 0 V6 [! B% M# B4 I2 Y" G6 P8 C* i- O 有效载荷检查其实是IP协议要求长度必须大于46个字节,不足时填充pad字节,具体细节请看《5000字“肝”了这篇IP协议》。2 s C4 o8 H- }; D9 u/ X 当从应用程序接收的字节数低于60时(DA+SA+LT+Data),零被附加到发送帧以使数据长度正好为46字节,以满足最小数据字段的要求IEEE802.3要求。9 w# a$ }* x! e' g4 d
: {( P; `7 M- r" C 04 Checksum校验和 首先明确,STM32的MAC控制器并不能对TCP/IP协议中所有的Checksum自动校验。STM32实现了IPv4,ICMP,TCP和UDP协议的Checksum校验和。 发送的时候,STM32会自动计算Checksum校验和并自动插入。 接收的时候,STM32会自动校验Checksum校验和是否正确。 上述功能可以通过以下操作开启: 通过在ETH_MACCR寄存器中设置IPCO位来启用接收校验和卸载。' _4 B, H( o5 Q( L/ Q 通过在TDES1寄存器中设置CIC位,在传输时启用校验和计算和插入。 但实际代码开发中,并不需要操作寄存器,使用ST的库接口如下:/ S8 _( J9 C, ]
|
微信公众号
手机版