搜索
查看: 2047|回复: 3

[求助] STM32F746以太网UDP通信提示jabber 定时器过期

[复制链接]

该用户从未签到

12

主题

496

帖子

111

蝴蝶豆

金牌会员

最后登录
2020-6-12
发表于 2018-1-24 21:44:04 | 显示全部楼层 |阅读模式
本帖最后由 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发送一帧数据(不分片)时都没有问题,只是当分片时会出现该问题。


回复

使用道具 举报

该用户从未签到

29

主题

1285

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-6-27
发表于 2018-1-25 09:35:07 | 显示全部楼层

回帖奖励 +10 ST金币

帮顶         
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

496

帖子

111

蝴蝶豆

金牌会员

最后登录
2020-6-12
 楼主| 发表于 2018-1-26 06:23:16 | 显示全部楼层
问题找到原因了,与大家共享一下。

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

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

这可是昨晚睡觉的时候突然想到的,哈哈
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2018-1-26 09:10:22 | 显示全部楼层
    yu0405jie 发表于 2018-1-26 06:23
    问题找到原因了,与大家共享一下。

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

    恭喜恭喜,找到问题就好。
    我也琢磨了半天,正要找个带网络的给试试呢。这下好了,你解决了,该向你学习了,也避免以后自已用时走弯路
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-29 07:55 , Processed in 0.161249 second(s), 37 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表