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

【经验分享】使用 CCM 导致以太网通信失败

[复制链接]
STMCU小助手 发布时间:2022-2-19 17:28
问题:
. N# ]. K' g- ?/ H8 k2 X6 ^9 ?该问题由某客户提出,发生在 STM32F407IGT6 器件上。据其工程师讲述:在其产品设计中使用了STM32 的以太网接口进行通信。在软件最初的调试中,该接口工作正常。后来为了满足软件对内存容量的需求,启用了 STM32 的 CCM 存贮器,但启用后发现以太网接口不能通信。所使用的开发工具为Keil MDK,相关的内存分配如表(一):1 z5 I( S7 v: J2 M. _0 B
UKK]E%S{_)02L5NL%O]{K8J.png ( v/ J" \$ d2 p2 l5 O- X

0 V/ F' z7 J' k( m) M调研:' G( O3 l, Q  N! `
进一步了解得知,在其软件中,使用了动态内存对以太网的数据报文进行了缓存,并且数据在以太网MAC 和内存中的缓存之间的传输是通过以太网的 DMA 功能进行的。于是,修改内存分配如表(二),然后得新测试。测试结果表明,以太网接口可以正常通信了。
( R0 B( Z9 ]5 c3 U6 t6 f% S5 Q8 M6 }) H: i+ D* H

. s  j" c6 e- b2 m! ~# i2 `* {9 }, \ UTTXGLHQ(FBNLY1)V}R(K_N.png - s+ _+ t" ?3 Z

" X: _/ v, \  [) b# X, E结论:% W: B" Z6 a5 X( D' K8 ?
对 STM32 的 CCM 存贮器使用不当。因为以太网的 DMA 与 CCM 存贮器之间没有数据通道,它们之间的数据传输数据是不能实现的。
! }9 E6 P+ J6 w( {, {: Y$ ?& H+ h/ r4 m- S- `  Z4 Y" X6 M
处理:1 S2 V! m7 R* V" V6 V
修改内存分配,如表(二)。' I# ]: q6 O2 r5 C/ S/ A& v5 }

6 a3 u) j0 g1 w" h* ?建议:
0 d! d  o1 [5 [2 E为进一步提高对数据的处理性能,在 STM32F4 中设有 CCM 存贮器。与常规的存贮器不同,CCM 存贮器是 CPU 独享的存贮器。CCM 存贮器与 CPU 之间的数据传输不经过总线矩阵,以提高 CPU 对 CCM存贮的访问效率,如图(一)所示。这样的组织结构也决定了,只有 CPU 才能够访问 CCM 存贮器,而DMA 以及其它的外设与 CCM 存贮器之间没有数据通道,也就无法对其访问。在通常的应用中,适合将程序的栈放在 CCM 存贮器中,以提高中断的响应速度,以及对子程序的调用速度。同时,如果使用 C语言编程,函数的局部变量是定义在栈上的,所以把栈放在 CCM 存贮器中,也可以提高 CPU 对函数的局部变量的访问速度。对于一些算法的实现,比如 DSP 计算或浮点数计算,适合于把参与计算数据及计算出的结果存放在 CCM 存贮存器中,这样可以提高计算的效率。如果希望动态的管理 CCM 存贮器,则最好将其与常规存贮器加以区分。因为两种存贮器的属性不同,用途也不同。CCM 存贮器不能
" r% {: A# \2 c4 X% G由 DMA 访问,而常规存贮器会降低 CPU 对数据的处理效率。
! `( J8 a0 h% O% d; C8 B/ g( I5 i2 F5 a2 k' D4 e

9 i7 J4 R2 ^) T& L6 _4 T/ ?2 l! F Q@[5$FZZ@JG@BE{{XUI{PDV.png
/ g8 A+ h0 T' F8 k; G* H* n  M; ~8 \$ [! F1 p# i# z1 X; C- t+ V, O& V
2 V  U* y; ~0 M, v' U
赞 收藏 评论0 发布时间:2022-2-19 17:28

举报

0个回答

所属标签

相似技术帖

官网相关资源

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