硬汉嵌入式论坛

 找回密码
 立即注册
查看: 11200|回复: 60
收起左侧

[RL-TCPnet] 在STM32F407上移植的TCPnet可以进ETH_IRQHandler中断,但是不进入send_frame函数且ping不通

  [复制链接]

18

主题

285

回帖

339

积分

高级会员

积分
339
发表于 2018-9-21 09:45:45 | 显示全部楼层 |阅读模式
如题,eth中断是可以进的但是ping不通板子,且send_frame函数也进不去,仿真了一天也搞不定啊,哪位前辈给看看,谢谢
下面是调试输出的信息:
2018-09-21_094522.png

回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-21 09:46:55 | 显示全部楼层
没有使能DHCP,用的是固定IP方式
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-21 11:47:35 | 显示全部楼层
那估计是发送配置有问题。

中断主要是用于接收的。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-21 13:35:28 | 显示全部楼层
eric2013 发表于 2018-9-21 11:47
那估计是发送配置有问题。

中断主要是用于接收的。

嗯,还在改驱动。请教硬汉哥图片中的几个问题哈,谢谢啦 2018-09-21_132054.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-21 15:08:44 | 显示全部楼层
木兰花 发表于 2018-9-21 13:35
嗯,还在改驱动。请教硬汉哥图片中的几个问题哈,谢谢啦

这里是做了个4字节对齐,方便以4字节为单位做数据的复制粘贴,这样比一个字节一个字节复制理论要快4倍。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-21 15:37:28 | 显示全部楼层
eric2013 发表于 2018-9-21 15:08
这里是做了个4字节对齐,方便以4字节为单位做数据的复制粘贴,这样比一个字节一个字节复制理论要快4倍。

哦,-4,~3,+3这三个操作共同构成的?

这样做为啥就可以4字节对齐了呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-22 01:56:54 | 显示全部楼层
QQ截图20180922015547.png
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-26 11:57:35 | 显示全部楼层
本帖最后由 木兰花 于 2018-9-26 17:48 编辑

好的,谢谢

硬汉哥能否帮我看看我已经使能了DHCP且网线差在了交换机上,我的mac是:: 1E:30:6C:A2:45:5E,串口输出上怎么看我获取到的ip是多少呢?我ping 了名字,ping不同;使用固定ip时也ping不通,这是哪里的问题呢

我的串口调试输出如下:
2222.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-27 00:16:49 | 显示全部楼层
你的测试的是什么例子,是不是TCP Client,如果是的话,你电脑端的防火墙先关一下。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-27 11:02:25 | 显示全部楼层
本帖最后由 木兰花 于 2018-9-27 11:56 编辑
eric2013 发表于 2018-9-27 00:16
你的测试的是什么例子,是不是TCP Client,如果是的话,你电脑端的防火墙先关一下。

是我在自己的板子上移植的:工程移植模板(RTX),接收中断和发送函数都能进去且发送数据,电脑就是收不到任何数据包,用wireshark检测的话,防火墙已经关闭了串口调试输出也没有错误,这是哪里出问题了呢
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-27 13:40:39 | 显示全部楼层
eric2013 发表于 2018-9-27 00:16
你的测试的是什么例子,是不是TCP Client,如果是的话,你电脑端的防火墙先关一下。

硬汉哥我把DHCP关闭后,设置了固定IP地址,为啥连ETH的接收中断都不进入了呢?send_frame函数也不进去了。只输出了下面的提示:
2018-09-27_133921.png

回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-27 13:55:27 | 显示全部楼层
eric2013 发表于 2018-9-27 00:16
你的测试的是什么例子,是不是TCP Client,如果是的话,你电脑端的防火墙先关一下。

再次使能dhcp后,提示dhcp获取成功,但是ip却不对,然后又开始获取Ip了

333.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-28 00:53:01 | 显示全部楼层
木兰花 发表于 2018-9-27 13:40
硬汉哥我把DHCP关闭后,设置了固定IP地址,为啥连ETH的接收中断都不进入了呢?send_frame函数也不进去了 ...

你现在的这个问题的确稍有点棘手。

你现在的这个用的PHY芯片是那款,另外你可以开发板跟电脑直连测试下,测试的时候,如果你的电脑开启了WIFI,务必先禁止掉,保证当前仅有一个网卡可用。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-28 09:14:01 | 显示全部楼层
本帖最后由 木兰花 于 2018-9-28 09:15 编辑
eric2013 发表于 2018-9-28 00:53
你现在的这个问题的确稍有点棘手。

你现在的这个用的PHY芯片是那款,另外你可以开发板跟电脑直连测试 ...

我用的phy是KSZ8863FLL,硬件是没有问题的,以前用的是Lwip跑的很稳定,以太网和phy驱动用的是ST提供的stm32f4x7_eth,现在想测试下Tcpnet,所以就移植了下。目前phy和以太网驱动都使用的lwip上的,Tcpnet使用的几个函数也进行了修改移植。现在怀疑是接收和发送函数那里没有按照Tcpnet的格式来,可能造成错误。

1、我使能了硬件以太网CRC校验
2、使用了memcpy字节copy函数3、ETH中断中发送信号给以太网数据处理任务

主要代码如下:


  1. #if defined   (__CC_ARM) /*!< ARM Compiler */
  2. __align(4)
  3. ETH_DMADESCTypeDef  DMARxDscrTab[ETH_RXBUFNB];/* Ethernet Rx MA Descriptor */
  4. __align(4)
  5. ETH_DMADESCTypeDef  DMATxDscrTab[ETH_TXBUFNB];/* Ethernet Tx DMA Descriptor */
  6. __align(4)
  7. uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; /* Ethernet Receive Buffer */
  8. __align(4)
  9. uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; /* Ethernet Transmit Buffer */
  10. #endif /* __CC_ARM */

  11. __IO ETH_DMADESCTypeDef  *DMATxDescToSet;
  12. __IO ETH_DMADESCTypeDef  *DMARxDescToGet;



  13. /*--------------------------- send_frame -------------------------------------*/
  14. void send_frame (OS_FRAME *frame)
  15. {
  16.   u8 *buffer ;
  17.   __IO ETH_DMADESCTypeDef *DmaTxDesc;
  18.   uint32_t byteslefttocopy = 0;

  19.   DmaTxDesc = DMATxDescToSet;
  20.   buffer = (u8 *)(DmaTxDesc->Buffer1Addr);

  21.   if((DmaTxDesc->Status & ETH_DMATxDesc_OWN) != (u32)RESET)
  22.   {
  23.     return;
  24.   }

  25.   /* Get bytes in current lwIP buffer  */
  26.   byteslefttocopy = frame->length;
  27.   /* Copy the remaining bytes */
  28.   memcpy( (u8_t*)((u8_t*)buffer), (u8_t*)((u8_t*)&frame->data[0]), byteslefttocopy );

  29.   /* Prepare transmit descriptors to give to DMA*/
  30.   ETH_Prepare_Transmit_Descriptors(byteslefttocopy);
  31. }

  32. __task void Ethernetif_Input(void)
  33. {
  34.   OS_FRAME *OSframe= NULL;
  35.   OS_FRAME *OSq= NULL;

  36.   u32_t len;
  37.   FrameTypeDef frame;
  38.   u8 *buffer;
  39.   __IO ETH_DMADESCTypeDef *DMARxDesc;
  40.   uint32_t i=0;

  41.   while(1)
  42.   {
  43.     os_sem_wait(&hEthernetInput, 0xFFFF);
  44.    
  45.     //循环读取数据,直到该帧数据全部读完为止
  46.     do
  47.     {
  48.       /* get received frame */
  49.       frame = ETH_Get_Received_Frame_interrupt();

  50.       /* Obtain the size of the packet and put it into the "len" variable. */
  51.       len = frame.length;
  52.       buffer = (u8 *)frame.buffer;

  53.       if (len > 0)
  54.       {
  55.         /* We allocate a pbuf chain of pbufs from the Lwip buffer pool */
  56.         //p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
  57.         
  58.         /* 申请动态内存,RxLen或上0x80000000表示动态内存不足了不会调用函数sys_error() */
  59.         OSframe = alloc_mem(len | 0x80000000);
  60.       }

  61.       //if (p != NULL)
  62.       if (OSframe != NULL)
  63.       {
  64.         OSq=OSframe;
  65.         
  66.         DMARxDesc = frame.descriptor;

  67.         /* Copy remaining data in pbuf */
  68.         memcpy( (u8_t*)((u8_t*)&OSq->data[0]), (u8_t*)((u8_t*)buffer), len);
  69.         put_in_queue(OSframe);
  70.       }

  71.       /* Release descriptors to DMA */
  72.       DMARxDesc =frame.descriptor;

  73.       /* Set Own bit in Rx descriptors: gives the buffers back to DMA */
  74.       for (i=0; i<DMA_RX_FRAME_infos->Seg_Count; i++)
  75.       {
  76.         DMARxDesc->Status = ETH_DMARxDesc_OWN;
  77.         DMARxDesc = (ETH_DMADESCTypeDef *)(DMARxDesc->Buffer2NextDescAddr);
  78.       }

  79.       /* Clear Segment_Count */
  80.       DMA_RX_FRAME_infos->Seg_Count =0;

  81.       /* When Rx Buffer unavailable flag is set: clear it and resume reception */
  82.       if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)
  83.       {
  84.         /* Clear RBUS ETHERNET DMA flag */
  85.         ETH->DMASR = ETH_DMASR_RBUS;
  86.         /* Resume DMA reception */
  87.         ETH->DMARPDR = 0;
  88.       }
  89.     }while(OSframe != NULL);
  90.   }
  91. }

  92. void ETH_IRQHandler(void)
  93. {
  94.   extern OS_SEM hEthernetInput;

  95.   /* Frame received */
  96.   if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
  97.   {
  98.     /* Give the semaphore to wakeup LwIP task */
  99.     isr_sem_send(&hEthernetInput);
  100.   }

  101.   /* Clear the interrupt flags. */
  102.   /* Clear the Eth DMA Rx IT pending bits */
  103.   ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
  104.   ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
  105. }
复制代码
  1. static void ETH_MACDMA_Config(void)
  2. {
  3.   __IO uint32_t  EthStatus = 0;
  4.   ETH_InitTypeDef ETH_InitStructure;

  5.   /* Enable ETHERNET clock  */
  6.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |
  7.                          RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);

  8.   /* Reset ETHERNET on AHB Bus */
  9.   ETH_DeInit();

  10.   /* Software reset */
  11.   ETH_SoftwareReset();

  12.   /* Wait for software reset */
  13.   while (ETH_GetSoftwareResetStatus() == SET);

  14.   /* ETHERNET Configuration --------------------------------------------------*/
  15.   /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
  16.   ETH_StructInit(D_InitStructure);

  17.   /* Fill ETH_InitStructure parametrs */
  18.   /*------------------------   MAC   -----------------------------------*/
  19.   ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
  20.   //ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
  21.   //ETH_InitStructure.ETH_Speed = ETH_Speed_10M;
  22.   //ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;

  23.   ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
  24.   ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
  25.   ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
  26.   ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;
  27.   ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
  28.   ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
  29.   ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
  30.   ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
  31. #ifdef CHECKSUM_BY_HARDWARE
  32.   ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
  33. #endif

  34.   /*------------------------   DMA   -----------------------------------*/

  35.   /* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
  36.   the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
  37.   if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
  38.   ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
  39.   ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
  40.   ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;

  41.   ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
  42.   ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
  43.   ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
  44.   ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
  45.   ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
  46.   ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
  47.   ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
  48.   ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;

  49.   /* Configure Ethernet */
  50.   EthStatus = ETH_Init(D_InitStructure, PHY_ADDRESS);

  51.   /* Enable the Ethernet Rx Interrupt */
  52.   ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
  53. }
复制代码


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-28 15:10:50 | 显示全部楼层
木兰花 发表于 2018-9-28 09:14
我用的phy是KSZ8863FLL,硬件是没有问题的,以前用的是Lwip跑的很稳定,以太网和phy驱动用的是ST提供的st ...

那就是你的驱动问题了,send frame和以太网中断直接使用我们程序里面的那个就行,不用做任何修改。先不要用st提供的了。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-28 15:33:45 | 显示全部楼层
本帖最后由 木兰花 于 2018-9-28 16:41 编辑
eric2013 发表于 2018-9-28 15:10
那就是你的驱动问题了,send frame和以太网中断直接使用我们程序里面的那个就行,不用做任何修改。先不要 ...

刚开始就是直接使用的例程中的代码,但是无法进接收中断,后就改自己的驱动了。
这个tcpnet要能ping需要调用一个函数后才可以被ping吗?

硬汉哥能否在你的板子上帮做2个试验呢?在V5板子上下载:V5_1001_RL_TCPnet试验_工程移植模板(RTX) 例程 程序:
试验1:在该例程上,打开所有调试输出,打开DHCP,把输出的调试信息能否贴在这里?
试验2:在该例程上,打开所有调试输出,关闭DHCP,把输出的调试信息能否贴在这里?
谢谢先


下面是我打开DHCP时输出的信息:
问题是ARP时send了342个字节的数据,但是没人回,虽然我已经把网线接到路由器上了,ping等均不通
333.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-29 03:03:47 | 显示全部楼层
木兰花 发表于 2018-9-28 15:33
刚开始就是直接使用的例程中的代码,但是无法进接收中断,后就改自己的驱动了。
这个tcpnet要能ping需要 ...

好的,白天了给你测试下。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-29 10:11:59 | 显示全部楼层
本帖最后由 木兰花 于 2018-9-29 10:13 编辑
eric2013 发表于 2018-9-29 03:03
好的,白天了给你测试下。

谢谢硬汉哥,试验可以不用做啦,原因已经找到了。
刚才仿真send_frame函数时发现DMA 发送描述符的地址是0x1xxxxxxx,而我的能用的lwip工程却是0x2xxxxxxx,想起我使能了CCM的64K空间,难道以太网发送接收的缓存都放被分配到了CCM空间了?
于是我把CCM复选框去掉,编译下载测试,我去,全部以太网功能都正常了。再次选中编译下载,又ping不通了,测试了多次,确实只要选中这个区域TCPnet就不工作了,放开一切就正常了。

具体是为什么会这样,我先读读以太网DMA的手册看看能否找到答案,先发布一下这个好消息吧
2018-09-29_100143.png

回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-9-29 10:47:24 | 显示全部楼层
本帖最后由 木兰花 于 2018-9-29 11:15 编辑
木兰花 发表于 2018-9-29 10:11
谢谢硬汉哥,试验可以不用做啦,原因已经找到了。
刚才仿真send_frame函数时发现DMA 发送描述符的地址是 ...

已经找到不能勾选CCM那块区域的原因啦:因为CCM中的数据无法被DMA访问,具体见下图。通过查看map文件,我的以太网部分数据被分配到了CCM空间,这样DMA就无法访问了,因为这个CCM离内核很近,不用经过总线矩阵,所以编译器就优先使用这块区域了,可惜的是编译器没有检测是不是DMA使用了CCM中的数据,所以我就掉坑里了。 1.png
2.png
2018-09-29_103958.png





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-30 10:07:59 | 显示全部楼层
木兰花 发表于 2018-9-29 10:47
已经找到不能勾选CCM那块区域的原因啦:因为CCM中的数据无法被DMA访问,具体见下图。通过查看map文件,我 ...

回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-9 16:37:51 | 显示全部楼层

过奖啦。
硬汉哥能否用 ATKKPing.exe 测试下你的板子是否偶尔有超时现象呢?

1、软件设置方法见下图:一定要选中图中的2个√,数据量选最大或者随机都行,然后开始测试
2、我测试发现偶尔会有超时现象,不知道哪里引起的
2018-10-09_163049.png

ATKKPing.rar (90.64 KB, 下载次数: 39)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-10-9 17:36:00 | 显示全部楼层
木兰花 发表于 2018-10-9 16:37
过奖啦。
硬汉哥能否用 ATKKPing.exe 测试下你的板子是否偶尔有超时现象呢?

你的ping响应速度有点慢,正常高效的方式平均值应该小于1ms。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-10 08:38:41 | 显示全部楼层
eric2013 发表于 2018-10-9 17:36
你的ping响应速度有点慢,正常高效的方式平均值应该小于1ms。

嗯,我的ping值是小于1ms的,大部分时间,但是有的时候就超时了,不知咋地
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-10 09:00:52 | 显示全部楼层
eric2013 发表于 2018-10-9 17:36
你的ping响应速度有点慢,正常高效的方式平均值应该小于1ms。

我已经使用了事件驱动的高效方式了
回复

使用道具 举报

2

主题

70

回帖

76

积分

初级会员

积分
76
发表于 2018-10-10 09:42:53 | 显示全部楼层
木兰花 发表于 2018-10-10 09:00
我已经使用了事件驱动的高效方式了

网络那部分选择“发行版”不要选择“debug”试试,ping的响应会很快
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-10 09:49:04 | 显示全部楼层
sup999 发表于 2018-10-10 09:42
网络那部分选择“发行版”不要选择“debug”试试,ping的响应会很快

嗯,现在已经是用发行版编译的呢,debug版很慢的ping的话
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-10-10 12:59:47 | 显示全部楼层
QQ截图20181010125918.png
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-10 13:24:40 | 显示全部楼层

嗯,这个结果很正常,看来还是我的程序上还有些问题导致响应有点慢了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-10-10 16:14:44 | 显示全部楼层
木兰花 发表于 2018-10-10 13:24
嗯,这个结果很正常,看来还是我的程序上还有些问题导致响应有点慢了

你的驱动得再优化优化了。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-10 17:03:40 | 显示全部楼层
eric2013 发表于 2018-10-10 16:14
你的驱动得再优化优化了。

嗯,我再改改看看能否从3ms降低到小于1ms,现在没有超时现象了,这个是交换机造成的,换个交换机就好了
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-10 17:16:50 | 显示全部楼层
eric2013 发表于 2018-10-10 16:14
你的驱动得再优化优化了。

硬汉哥我怎么使能407的以太网用硬件CRC32呢?现在只要一使能crc就错了,似乎TCPnet使用了软件CRC32
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-10-10 17:56:50 | 显示全部楼层
木兰花 发表于 2018-10-10 17:16
硬汉哥我怎么使能407的以太网用硬件CRC32呢?现在只要一使能crc就错了,似乎TCPnet使用了软件CRC32

就用软件就行。
回复

使用道具 举报

2

主题

70

回帖

76

积分

初级会员

积分
76
发表于 2018-10-10 22:34:33 | 显示全部楼层
eric2013 发表于 2018-9-27 00:16
你的测试的是什么例子,是不是TCP Client,如果是的话,你电脑端的防火墙先关一下。

请教楼上两位大侠。看硬汉哥玩TCP-net这么爽,也想来玩玩。
根据RTE配置了一个工程,初始化好像成功了,但是ping不通,不知道如何下手,特来求教!

硬件stm32f407zg+lan8720

软件版本

软件版本


初始化信息

初始化信息

ping的调试信息

ping的调试信息

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-10-11 01:06:39 | 显示全部楼层
sup999 发表于 2018-10-10 22:34
请教楼上两位大侠。看硬汉哥玩TCP-net这么爽,也想来玩玩。
根据RTE配置了一个工程,初始化好像成功了, ...

建议移植我这个版本:
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-11 09:06:38 | 显示全部楼层

好的
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-11 09:15:01 | 显示全部楼层
sup999 发表于 2018-10-10 22:34
请教楼上两位大侠。看硬汉哥玩TCP-net这么爽,也想来玩玩。
根据RTE配置了一个工程,初始化好像成功了, ...

这个协议栈只要你把以太网驱动移植好了,他就能工作。驱动根据自己的板子好好移植下,注意以下几点:

0、确保硬件OK,MII或者RMII连接正常
1:只能使用软件crc,不能开启硬件crc
2、给以太网分配的缓存不要放到CCM空间,否则就像我上面一样,很惨
3、缓存字节对齐,必须是4字节对齐;官方的例子使用的特殊的算法,我没有使用,我使用了强制4B对齐方式
4、驱动移植主要是:初始化,收,发函数,一定要参考官方例子或者硬汉哥的例子
回复

使用道具 举报

2

主题

70

回帖

76

积分

初级会员

积分
76
发表于 2018-10-11 09:27:21 | 显示全部楼层
木兰花 发表于 2018-10-11 09:15
这个协议栈只要你把以太网驱动移植好了,他就能工作。驱动根据自己的板子好好移植下,注意以下几点:

...

0:硬件是正常的原来配的例程是正常运行的
1:CRC在哪里配置,没有留意这个
2:看之前的帖子吸取经验,确认过没有在CCM空间中
3:这个去看看先
4:驱动没有任何修改用的是“..ARM\PACK\Keil\STM32F4xx_DFP\2.13.0\CMSIS\Driver\EMAC_STM32F4xx.c”
回复

使用道具 举报

2

主题

70

回帖

76

积分

初级会员

积分
76
发表于 2018-10-11 09:29:09 | 显示全部楼层
eric2013 发表于 2018-10-11 01:06
建议移植我这个版本:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=26034&extra=page%3D1

折腾,想尝试下最新的,谁知碰壁了
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-11 10:46:29 | 显示全部楼层
sup999 发表于 2018-10-11 09:29
折腾,想尝试下最新的,谁知碰壁了

新的keil下的TCPnet似乎和旧的有点不同,最好用4.74的
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
 楼主| 发表于 2018-10-11 12:45:42 | 显示全部楼层

我昨天仿真时不知动哪里了,ping 1472字节时一直是小于1ms的,后来复位了就不行了。

现在测试发现:ping 340字节时≤1ms
                     ping 350字节时=1ms
                     ping 860字节时≥2ms
                     ping 1410字节时≥3ms

哪里会影响ping的值呢?我优化了驱动现象还是这样。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 02:29 , Processed in 0.360597 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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