STMCU小助手
发布时间:2021-9-18 13:58
|
之前的文章主要介绍了STM32的ExternalPHY Intereface部分,《STM32网络电路设计》也就是下图区域1。 _9 K& {, A5 B* M6 d: r1 f & \8 ^. K: ?, q, X 本文将重点讲解STM32的MAC控制器,也就是下图区域2。, y; x! T. Y$ E. h* m' ?
01 STM32的MAC概述 STM32的MAC控制器全称是:MediaAccess Control。 % w0 R6 j( D j# \ ( _, C3 K. g' G0 d STM32F207的MAC控制器支持的模式/ ^' B0 _& t0 C) }. }8 i + c6 {6 t' e& }/ r9 M ( d5 h# P) ^# {3 m- f; z 符合IEEE 802.3 MAC+ G' y1 A& l! N & ^- Q$ W. t" x" K 10/100Mbps网络( O$ @- |0 d- t 2 ]: b h" _' z A( x 全双工和半双工通信* y/ j! n n- H% G5 s( Y) i " H) m; c# t7 X; N% a 和外部PHY的MII接口和RMII接口 . q- ]- b! J" M7 f/ |6 y/ M, b 支持前导码和帧起始数据(SFD)插入或删除 6 u; [3 ~( u/ r# _ 支持IPv4的头部checksum校验和检查 2 J3 \. g v, Q Q* ^. |2 O( ] 支持以太网唤醒" r# r' f; V. J& }3 ]2 `% o! i 有效载荷检查0 E: [) Q* r6 |! o d
其实ST在设计MAC控制器时,设计了其他功能,PTP(IEEE1588)精确时间协议,MMC网络统计功能,这些功能并不常用,本人也没有接触,就不再讲解。 # M! F" ?% W; X8 f* r 0 d5 t- X6 a7 l0 T 对于上面说到的:支持前导码和帧起始数据(SFD)插入或删除。# S* h* ^, [$ U3 a. U5 \ / t4 A }1 P( V( K/ U( [: L 之前的推文《以太网数据首部》中并没有说到前导码和帧起始数据(SFD)。一个以太网数据结构如下: 6 D9 |6 d2 n- a! ?3 z) M m : F( m- r9 _6 U" N w- `3 x% i) E
大多数网络设备都是支持前导码和帧起始数据(SFD)插入或删除。所以可以说,这是网络硬件设备在以太网帧前打包的数据。个人认为并不属于TCP/IP协议簇的内容。) R' b( K9 Q) y% B) p# j2 n" a# u ^ + {3 `' ?4 |) B8 T; E2 a1 D A; | 02 MAC地址过滤3 B/ d0 w: V7 C' A STM32的MAC控制器支持MAC地址过滤的。 7 j N. z+ L# M. H4 ]2 \0 k0 M 4 N1 O( g' d$ _: {: z 目的地址过滤: ·单播过滤 ·组播过滤% S E: J* {' }; z( m T; i3 f6 l$ h ·广播过滤) p3 l* c W) K. R2 n% q d$ Q* R5 C. @3 E# Q+ O- E# D$ l , @2 U3 L0 J. t- A8 u T0 e 注意:广播过滤会导致ARP广播也收不到,具体请看《TCP/IP协议簇中ARP协议》。 ~/ O0 ^, n( @0 F& Y 源地址过滤:# k6 O9 D, Q3 B2 g 单播过滤9 i5 v# s4 L9 y2 _' k( D2 m STM32的MAC控制器还支持:规则翻转,比如,原来只允许单播过滤接收,翻转之后,只有单播不接收。 在STM32实际项目开发中,只需要调用ST的库文件即可 - i F' m2 O, N+ E5 \* A8 s; O3 R + I; a, V# b( a7 ^ ETH_InitStructure.ETH_BroadcastFramesReception =ETH_BroadcastFramesReception_Enable;//允许接收所有广播帧 y/ w( D- O. ~) L$ L 关于MAC地址相关信息,什么是广播,MAC地址表示方法,请看之前的推文《以太网数据首部》。 & }0 i1 B7 B+ V( z0 Y, ] 03 有效载荷检查 有效载荷检查其实是IP协议要求长度必须大于46个字节,不足时填充pad字节,具体细节请看《5000字“肝”了这篇IP协议》。3 W; u& t; a+ S) i 4 {4 l/ Z# t; M6 e2 j/ a 4 O- j" N: V* K& O& U" F 当从应用程序接收的字节数低于60时(DA+SA+LT+Data),零被附加到发送帧以使数据长度正好为46字节,以满足最小数据字段的要求IEEE802.3要求。
- v4 j K0 z8 T/ D' N F8 u , @! Z. T5 l( A) p# }5 X ~ 04 Checksum校验和 ( U5 H9 R2 l1 n, H8 W% F* i" \# { 首先明确,STM32的MAC控制器并不能对TCP/IP协议中所有的Checksum自动校验。STM32实现了IPv4,ICMP,TCP和UDP协议的Checksum校验和。# ~/ u+ {* F! b$ Y 发送的时候,STM32会自动计算Checksum校验和并自动插入。 接收的时候,STM32会自动校验Checksum校验和是否正确。. z7 R3 x+ d+ }# ?, S: f 上述功能可以通过以下操作开启:6 k0 G0 Z0 r3 R! | 通过在ETH_MACCR寄存器中设置IPCO位来启用接收校验和卸载。 i" j* z! j) {: ~! R7 _: o4 Q) L 通过在TDES1寄存器中设置CIC位,在传输时启用校验和计算和插入。 但实际代码开发中,并不需要操作寄存器,使用ST的库接口如下:
/ r! _8 D3 Z% Q! a |
微信公众号
手机版