|
/* 初始化NetX */
nx_system_initialize();
/* 创建内存池 */
status = nx_packet_pool_create(&pool_0, /* 内存池控制块 */
"NetX Main Packet Pool", /* 内存池名 */
1536, /* 内存池每个数据包大小,单位字节
此值必须至少为 40 个字节,并且还必须可以被 4 整除 */
(ULONG*)(((int)packet_pool_area + 15) & ~15) ,/* 内存池地址,此地址必须ULONG对齐 */
NX_PACKET_POOL_SIZE); /* 内存池大小 */
/* 检测创建是否失败 */
if (status) error_counter++;
/* 例化IP */
status = nx_ip_create(&ip_0, /* IP实例控制块 */
"NetX IP Instance 0", /* IP实例名 */
IP_ADDRESS(IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3), /* IP地址 */
0xFFFFFF00UL, /* 子网掩码 */
&pool_0, /* 内存池 */
nx_driver_stm32h7xx, /* 网卡驱动 */
(UCHAR*)AppTaskNetXStk, /* IP任务栈地址 */
sizeof(AppTaskNetXStk), /* IP任务栈大小,单位字节 */
APP_CFG_TASK_NETX_PRIO); /* IP任务优先级 */
/* 检测创建是否失败 */
if (status) error_counter++;
/* 使能ARP,并提供ARP缓存 */
status = nx_arp_enable(&ip_0, /* IP实例控制块 */
(void *)arp_space_area, /* ARP缓存地址 */
sizeof(arp_space_area)); /* 每个 ARP 条目均为 52 个字节,因此,ARP 条目总数是52字节整数倍 */
/* 使能fragment */
status = nx_ip_fragment_enable(&ip_0);
/* 检测使能成功 */
if (status) error_counter++;
/* 使能TCP */
status = nx_tcp_enable(&ip_0);
/* 检测使能成功 */
if (status) error_counter++;
/* 使能UDP */
status = nx_udp_enable(&ip_0);
/* 检测使能成功 */
if (status) error_counter++;
/* 使能ICMP */
status = nx_icmp_enable(&ip_0);
/* 检测使能成功 */
if (status) error_counter++;
/* NETX初始化完毕后,重新设置优先级 */
tx_thread_priority_change(netx_thread_ptr, APP_CFG_TASK_NETX_PRIO1, &old_priority);
tx_thread_priority_change(&AppTaskNetXProTCB, APP_CFG_TASK_NetXPro_PRIO1, &old_priority);
参照上述V7的代码移植到瑞萨RA6M5下,能够LINK成功PHY,但是不能ping通,请教可能是哪方面出了问题?
已经分析如下:
1.PHY能正常复位,能读取ID和设置BCR和读取BSR;
2.设置的是100M速率,全双工;
2.网络抓包没有发现ARP报文发出来;
|
|