|
如题,这几天折腾了下netx duo,因为想着netx和netx duo差不多,就直接移植netx duo了,没想到最后一直ping不通,DHCP也只能收到一包数据,后面就没有了,现象如下:
0、参考例子:Azure_RTOS_6.0.2_STM32F746G-DISCO_IAR_Samples_2020_08_18.zip 下的ping例子
1、静态ip时,无法ping通,wireshark抓不到任何相关数据
2、DHCP时,wireshark可以且只能收到一包板子发送的数据,后面就再也收不到了,即使我循环thread0也不行
分析数据发现,是不是我发送的数据的crc不对啊?请高人指点
原因分析:
1、我的phy的初始化,读写等均正常
2、eth初始化也是正常的
3、isr中断正常,能收到数据
4、能进入发送case
- case NX_LINK_ARP_SEND:
- case NX_LINK_ARP_RESPONSE_SEND:
- case NX_LINK_PACKET_BROADCAST:
- case NX_LINK_RARP_SEND:
- case NX_LINK_PACKET_SEND:
- {
- /* Process packet send requests. */
- _nx_driver_packet_send(driver_req_ptr);
- break;
- }
复制代码
nx_driver_stm32f746.c驱动注意的修改点:
修改一:新增这个函数,初始化io,时钟等
- void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* Ethernett MSP init: RMII Mode
- ETH_MDIO -------------------------> PA2
- ETH_MDC --------------------------> PC1
- /ETH_RMII_REF_CLK---> PA1
- /ETH_RMII_CRS_DV ----> PA7
- /ETH_RMII_RXD0 -------> PC4
- /ETH_RMII_RXD1 -------> PC5
- /ETH_RMII_TX_EN -----> PB11
- /ETH_RMII_TXD0 -------> PB12
- /ETH_RMII_TXD1 -------> PG14
- */
- /* Enable GPIOs clocks */
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
- GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStructure.Pull = GPIO_NOPULL ;
- GPIO_InitStructure.Alternate = GPIO_AF11_ETH;
- /* Configure PA1, PA2 , PA7 */
- GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* Configure PB11, PB12 */
- GPIO_InitStructure.Pin = GPIO_PIN_11 | GPIO_PIN_12;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
- /* Configure PC1, PC4 and PC5 */
- GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
- /* Configure PG14 */
- GPIO_InitStructure.Pin = GPIO_PIN_14;
- HAL_GPIO_Init(GPIOG, &GPIO_InitStructure);
- /* Enable the Ethernet global Interrupt */
- HAL_NVIC_SetPriority(ETH_IRQn, ETH_PreemptPriority, ETH_SubPriority);
- HAL_NVIC_EnableIRQ(ETH_IRQn);
- /* Enable Ethernet clocks */
- __HAL_RCC_ETHMAC_CLK_ENABLE();
- __HAL_RCC_ETHMACTX_CLK_ENABLE();
- __HAL_RCC_ETHMACRX_CLK_ENABLE();
- }
复制代码
修改二:屏蔽了下面4个函数,因为407没有cache,所以直接屏蔽了
- SCB_CleanInvalidateDCache_by_Addr()
- SCB_CleanDCache_by_Addr()
- SCB_CleanDCache_by_Addr()
- SCB_InvalidateDCache_by_Addr()
复制代码
修改三:主要是phy的地址,寄存器等,这个已经验证是没有问题的了
想到netx duo和netx不同点是支持ipv6,后来我把ipv6功能禁止掉(定义宏:#define NX_DISABLE_IPV6)后,效果和没禁止前一样。
请硬汉哥或其他高人指点,我这哪里出问题了呢,谢谢先
|
|