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

STM32F746以太网UDP通信提示jabber 定时器过期

[复制链接]
随风飘扬 提问时间:2018-1-24 21:44 /
本帖最后由 yu0405jie 于 2018-1-26 06:23 编辑

        在使用STM32F746 Disc开发板发送数据时,ETH_DMASR寄存器的第三位TJTS置位,按手册中的说明是“此位指示发送 jabber 定时器已过期,这意味着发送器过度有效。发送过程会中止并将其置于停止状态。这会导致对发送 jabber 超时 TDES0[14] 标志进行置位”,但不明白造成超时的原因是什么?
        需要说明的是在实验中我没有使用LWIP库,也没有使用HAL库,问题发生在使用UDP发送数据的过程中,由于数据量比较大,我将数据量分了八片,采用环形描述符,描述符第一个缓冲区保存协议首部,第二个缓冲区包含实际数据,大小为1024字节. 我是每采集一片数据(时间大约0.6s),就对对应的描述符状态进行更新,当八片数据全部采集完成后调用发送指令(写DMA 发送轮询要求寄存器),此时会提示上述错误。

       实验中ping、arp以及UDP发送一帧数据(不分片)时都没有问题,只是当分片时会出现该问题。


收藏 评论3 发布时间:2018-1-24 21:44

举报

3个回答
斜阳 回答时间:2018-1-25 09:35:07
帮顶         
随风飘扬 回答时间:2018-1-26 06:23:16
问题找到原因了,与大家共享一下。

这个问题的原因在于自己对UDP分包和以太网DMA描述符的关系的理解上有错误。

原来认为一个UDP分了八片,对应八个描述符,那就是一个完整的帧跨越了8个描述符,因此将第一个描述符标记为第一个,第八个描述符标记为了最后一个。但实际情况是,当一个UDP包分了八片时,每一片都是一个完整的帧,也就是每一个描述符都包含一个完整的帧,都需要标记为第一个和最后一个。

这可是昨晚睡觉的时候突然想到的,哈哈
七哥 回答时间:2018-1-26 09:10:22
yu0405jie 发表于 2018-1-26 06:23
问题找到原因了,与大家共享一下。

这个问题的原因在于自己对UDP分包和以太网DMA描述符的关系的理解上有错 ...

恭喜恭喜,找到问题就好。
我也琢磨了半天,正要找个带网络的给试试呢。这下好了,你解决了,该向你学习了,也避免以后自已用时走弯路
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版