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

STM32网络之MAC控制器

[复制链接]
STMCU小助手 发布时间:2021-7-23 14:55
之前的文章主要介绍了STM32的ExternalPHY Intereface部分,《STM32网络电路设计》也就是下图区域1。( `: _- K4 D- f7 ?2 c
本文将重点讲解STM32的MAC控制器,也就是下图区域2。' g. J# a! f0 V, T( T
1.jpg
& U- z1 A0 e/ q. C9 G4 u0 n* S' l+ D$ U# A+ T

" T  Z. K- u# y( H01
" e! I1 n' G6 d5 X4 ]- HSTM32的MAC概述  G5 L" ~! D/ r! X/ a
- U9 u( ^# N1 }3 Q# E+ z9 G

& u7 h6 `" ^- z( X- {, k2 E! [" bSTM32的MAC控制器全称是:MediaAccess Control。
3 n3 C4 B( ]6 t7 r6 iSTM32F207的MAC控制器支持的模式% \' I* o0 A: i# S" K* ^
符合IEEE        802.3 MAC8 Q1 t+ q7 W9 |4 C) A
10/100Mbps网络0 K. D( _3 o$ D
全双工和半双工通信
" Q2 B+ Y! c5 n3 v9 m3 e( U和外部PHY的MII接口和RMII接口( e4 n* @: X' {- }
支持前导码和帧起始数据(SFD)插入或删除
% V* k1 a' F# ^0 I支持IPv4的头部checksum校验和检查8 n0 G. Y: L" L/ n' y0 G+ K/ C
支持以太网唤醒5 ]6 T: x/ I6 H
有效载荷检查0 G6 I2 f1 R) _  z& t& O. B
2.jpg ' M7 t# R$ x5 }: `
其实ST在设计MAC控制器时,设计了其他功能,PTP(IEEE1588)精确时间协议,MMC网络统计功能,这些功能并不常用,本人也没有接触,就不再讲解。
  u# ~! Q4 l5 w; k对于上面说到的:支持前导码和帧起始数据(SFD)插入或删除。
# ?  ]" {( a- z2 L5 Y. k# ]之前的推文《以太网数据首部》中并没有说到前导码和帧起始数据(SFD)。一个以太网数据结构如下:/ L+ c6 e, l- d$ o5 s
3.jpg
( v3 f# D/ h) q# \* E# F大多数网络设备都是支持前导码和帧起始数据(SFD)插入或删除。所以可以说,这是网络硬件设备在以太网帧前打包的数据。个人认为并不属于TCP/IP协议簇的内容。. w: L9 C! r" j' X5 ~/ a- {

2 f. J& E: V% v, j# M2 B

2 A1 L, J- `1 O. V02& k! w' p. x. g% u
MAC地址过滤
4 z& o& r  ~) m( y0 s" z
3 y) c4 B) x' V( K# Y. M

4 M" o* ^2 ~; ^0 S2 |( ~" u: fSTM32的MAC控制器支持MAC地址过滤的。: v$ }0 \+ i% G  N) n3 x
目的地址过滤:& v5 C8 d1 n3 c
单播过滤
) V; u7 e% D8 g8 L1 r6 N& V/ V组播过滤4 P$ a6 K. A6 A# o! G
广播过滤
( b1 H0 W0 z6 U3 C3 q注意:广播过滤会导致ARP广播也收不到,具体请看《TCP/IP协议簇中ARP协议》
4 U' S# O" g) y) ~3 i" Y8 T
2 T2 s+ ^' O. A, T% K3 L
% r* w4 V8 u# B- I. ?7 V
源地址过滤:单播过滤
0 p" |' B$ x! t0 L+ l# E4 |& G1 l( A8 O- o- k2 A# C4 X
: j( n# }6 Q0 J$ S& c: b0 ?4 N
STM32的MAC控制器还支持:规则翻转,比如,原来只允许单播过滤接收,翻转之后,只有单播不接收。
* I6 B  }7 J+ B5 L+ l在STM32实际项目开发中,只需要调用ST的库文件即可& a/ D1 X9 ]8 H) D
  1. <font face="Arial" size="3">ETH_InitStructure.ETH_BroadcastFramesReception =ETH_BroadcastFramesReception_Enable;//允许接收所有广播帧</font>
复制代码
关于MAC地址相关信息,什么是广播,MAC地址表示方法,请看之前的推文《以太网数据首部》
. V" O3 L  w  l9 l4 H  K
7 p. {+ d7 M5 A9 y) E
# d3 _. i* e3 B& g, g' |6 b
03
% A# ]$ N8 F/ V7 }' s5 s" I有效载荷检查
. n- h- Z% z) ]/ ?3 t, p7 i4 x! V, V9 f( Q2 R7 w2 S0 c: \
# @& I3 o! L: i; _) K2 i
有效载荷检查其实是IP协议要求长度必须大于46个字节,不足时填充pad字节,具体细节请看《5000字“肝”了这篇IP协议》
6 @. b" m) X8 ~" u当从应用程序接收的字节数低于60时(DA+SA+LT+Data),零被附加到发送帧以使数据长度正好为46字节,以满足最小数据字段的要求IEEE802.3要求。
+ F( X6 L. V* y; Y 4.jpg 4 I/ l* o2 `% I0 @& n
% k( B( C' ?/ _/ ^/ x/ Y- u! N
' R) l3 r" M8 g
04
! W3 ~& D* |' `: ~. g% OChecksum校验和3 k( k- [* o& i8 x' b/ F. _
# [) ]( }1 ~, y/ g, ^/ N7 Z. l

7 o5 a  @; M  f  O) ^' M) r0 }/ }首先明确,STM32的MAC控制器并不能对TCP/IP协议中所有的Checksum自动校验。STM32实现了IPv4,ICMP,TCP和UDP协议的Checksum校验和。6 Z6 U* c  k( Y6 v$ o7 ]
发送的时候,STM32会自动计算Checksum校验和并自动插入。5 y0 u, d. A, I% s- G/ i
接收的时候,STM32会自动校验Checksum校验和是否正确。
0 o$ t, o8 S: _8 }: a上述功能可以通过以下操作开启:3 R0 I. n7 \5 V/ B
通过在ETH_MACCR寄存器中设置IPCO位来启用接收校验和卸载。6 Z" _6 Q) }' J% L" r/ H3 `9 `5 r0 B
通过在TDES1寄存器中设置CIC位,在传输时启用校验和计算和插入。3 a; b( i" `: E- w! [$ w5 x
但实际代码开发中,并不需要操作寄存器,使用ST的库接口如下:
) Q, [& `+ O8 G' I7 B" y* t
  1. <font face="Arial" size="3">ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;    </font>
复制代码

8 P. P0 G7 p7 W( F% u5 W" E0 Q8 S9 S, ]& F/ V  M/ F
收藏 评论0 发布时间:2021-7-23 14:55

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版