打印

STM32F107 网络堵塞问题

[复制链接]
4247|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Karenjon|  楼主 | 2013-5-9 09:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分别调试stm32f107+dm9196aep,以及stm32+dp83848.。
测试方法通过UDP对设备IP地址发送大量数据包,在检测到流量大于10Mbit/S后,设备再也不能ping通,网络死掉,但是系统其它功能正常。求各位大侠给点建议
沙发
byeyear| | 2013-5-9 10:36 | 只看该作者
用调试器跟踪一下
断点下在底层接收函数上
看能否收到ping包
收不到的话查DMA
能收到的话看程序走到哪一步挂了
不过你这个10Mbps的数据包量算不上大
70-80Mbps差不多才算大

使用特权

评论回复
板凳
Karenjon|  楼主 | 2013-5-9 15:52 | 只看该作者
我跟踪测试发现在下面函数中获取p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);再也获取不到空间了。而#define MEM_SIZE                (20*1024) 已经很大了。整个程序已经用了62K没有更多空间咯。
low_level_input(struct netif *netif)
{
  struct pbuf *p, *q;
  u16_t len;
  int l =0;
  FrameTypeDef frame;
  u8 *buffer;
  
  p = NULL;
  frame = ETH_RxPkt_ChainMode();

  /* Obtain the size of the packet and put it into the "len"
     variable. */
   if(frame.length != ETH_ERROR)
   {
          len = frame.length;
          
          buffer = (u8 *)frame.buffer;
       
          /* We allocate a pbuf chain of pbufs from the pool. */
          p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
       
          if (p != NULL)
          {
            for (q = p; q != NULL; q = q->next)
            {
                  memcpy((u8_t*)q->payload, (u8_t*)&buffer[l], q->len);
              l = l + q->len;
            }   
          }
          else
          {
                   USART_Blocking_SendByte(USART2,0xAA);
                 USART_Blocking_SendByte(USART2,len);
          }
        }
        else
        {
                 p = NULL;
                 USART_Blocking_SendByte(USART2,0xBB);
        }

  /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
  frame.descriptor->Status = ETH_DMARxDesc_OWN;

  /* When Rx Buffer unavailable flag is set: clear it and resume reception */
  if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)  
  {
    /* Clear RBUS ETHERNET DMA flag */
    ETH->DMASR = ETH_DMASR_RBUS;
    /* Resume DMA reception */
    ETH->DMARPDR = 0;
  }


  return p;
}

使用特权

评论回复
地板
cjhk| | 2013-5-9 19:32 | 只看该作者
不是很了解这一块   先顶一个   呵呵   看看有没有高手能解决你的问题   顶一个

使用特权

评论回复
5
cqmiao| | 2013-5-10 10:33 | 只看该作者
类似于攻击包,专业的网络设备也会死掉

使用特权

评论回复
6
Karenjon|  楼主 | 2013-5-10 15:51 | 只看该作者
对,是攻击测试,但是我们用TI的芯片没有问题。

使用特权

评论回复
7
Karenjon|  楼主 | 2013-5-10 16:46 | 只看该作者
兄弟们解决咯。内存分配问题。改用p = pbuf_alloc(PBUF_LINK, len, PBUF_RAM);

使用特权

评论回复
8
miniqq80| | 2013-5-24 11:55 | 只看该作者
LZ能共享一下程序嘛?我最近在搞107的ethernet 缺少成功案例。

使用特权

评论回复
9
jueju300| | 2013-9-5 15:31 | 只看该作者
楼上的大神 还在不在 stm32f107vc的数据手册在哪里 在官网只有个简版的手册 没有寄存器级的手册啊

使用特权

评论回复
10
trumpxp| | 2013-9-5 19:32 | 只看该作者
这玩意   不是这个领域的问题吧   楼主

使用特权

评论回复
11
liverpoolsun| | 2013-9-17 10:23 | 只看该作者
我也是用stm32f207给电脑发大数据,到了11M/S时出现了类似情况,使用的是PBUF_TRANSPORT,如果字符串是全局变量就能发送,改成局部变量就不行了。你的字符串是哪种情况?另外我试了PBUF_LINK,不成功

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

1

粉丝