你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32网络之MAC控制器

[复制链接]
STMCU小助手 发布时间:2021-7-23 14:55
之前的文章主要介绍了STM32的ExternalPHY Intereface部分,《STM32网络电路设计》也就是下图区域1。
, P4 L0 A( X  t/ T! ^本文将重点讲解STM32的MAC控制器,也就是下图区域2。, h. ]. _. b; B  z! b2 ~4 p
1.jpg 2 L9 _6 p+ \. ]6 J/ Z: _
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概述
+ e9 q2 {1 ~% S; e. s1 M1 _
+ j6 V, _9 _; `1 [. P' e3 ?8 c
% 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控制器支持的模式
4 f) I$ F9 R  v9 S4 d符合IEEE        802.3 MAC& _* b, B4 K. q  {0 q; p
10/100Mbps网络
! Z. P$ q9 A% T8 z2 q& S3 D" w7 ?全双工和半双工通信* 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
有效载荷检查
- C* v% Y0 m. [6 t3 i) z1 _ 2.jpg
$ f1 R# H/ z7 {+ N- l# z, c, ]其实ST在设计MAC控制器时,设计了其他功能,PTP(IEEE1588)精确时间协议,MMC网络统计功能,这些功能并不常用,本人也没有接触,就不再讲解。
% B# b" C7 A+ }3 B# v对于上面说到的:支持前导码和帧起始数据(SFD)插入或删除。
7 |. {& e1 h& s& h之前的推文《以太网数据首部》中并没有说到前导码和帧起始数据(SFD)。一个以太网数据结构如下:
- s0 k  M5 x* ^; f7 i) }$ Y 3.jpg
0 D$ M& k$ ^/ O6 e" k大多数网络设备都是支持前导码和帧起始数据(SFD)插入或删除。所以可以说,这是网络硬件设备在以太网帧前打包的数据。个人认为并不属于TCP/IP协议簇的内容。/ h$ m! E: k+ m: J9 E- Z

. v. Q- ^! ?, w/ w! y, R  }, i
; 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

# s6 w' C7 p! {. f8 a9 tSTM32的MAC控制器支持MAC地址过滤的。
$ @7 g8 t/ a- b% Q5 e  r目的地址过滤:
/ I( n8 b* @! h+ y/ W" \3 N% o单播过滤
! E7 f0 v: P  a1 g组播过滤( a( a5 p  M, K& Q- Y: R% v
广播过滤
/ E. ~; a! X- q: l! N' s: I! a注意:广播过滤会导致ARP广播也收不到,具体请看《TCP/IP协议簇中ARP协议》。
/ Y8 _1 h  l8 U' k& K
3 ?. Y4 N. O2 n# V
  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的库文件即可
# d' X* q5 M( R$ h/ }
  1. <font face="Arial" size="3">ETH_InitStructure.ETH_BroadcastFramesReception =ETH_BroadcastFramesReception_Enable;//允许接收所有广播帧</font>
复制代码
关于MAC地址相关信息,什么是广播,MAC地址表示方法,请看之前的推文《以太网数据首部》。3 p' e+ h3 j3 D" l9 K
% P2 C! ?* x6 e5 ?9 K3 {2 F
! r$ c3 I+ H4 s( E3 L. v3 Z! x
03
1 k/ O, O. J8 P- N* y5 D3 e有效载荷检查
1 E4 L- Q" |0 }+ M/ R$ [. R% k
9 f" l  ]7 P. {& \+ M( b! @
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
4.jpg
3 w$ g$ z# F  I9 B; G
' r6 b+ W6 C+ C' n3 Q: ~7 z
: {( P; `7 M- r" C
04
: g5 \* l& ?4 yChecksum校验和
$ K, V+ T* H8 c) @, [% m
8 g5 x2 Z4 U9 l/ T" M5 P

0 ~! @  o/ X* U首先明确,STM32的MAC控制器并不能对TCP/IP协议中所有的Checksum自动校验。STM32实现了IPv4,ICMP,TCP和UDP协议的Checksum校验和。
8 r# r+ q& u' E- e) S6 Y1 @, {) a发送的时候,STM32会自动计算Checksum校验和并自动插入。
1 s* m5 \0 A1 W7 U/ f- }1 q接收的时候,STM32会自动校验Checksum校验和是否正确。
, m# N. o9 p0 y5 r  F上述功能可以通过以下操作开启:
6 q" y% a+ \1 h通过在ETH_MACCR寄存器中设置IPCO位来启用接收校验和卸载。' _4 B, H( o5 Q( L/ Q
通过在TDES1寄存器中设置CIC位,在传输时启用校验和计算和插入。
8 D" g2 h$ A9 A9 e, F8 t0 d* B但实际代码开发中,并不需要操作寄存器,使用ST的库接口如下:/ S8 _( J9 C, ]
  1. <font face="Arial" size="3">ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;    </font>
复制代码

% n- b% D9 _! A6 [6 g
& {' I, E, P2 |+ l& |6 R' Y
赞 收藏 评论0 发布时间:2021-7-23 14:55

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版