硬汉嵌入式论坛

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

[ThreadX全家桶] H723ZGT6+NETXDUO+THREADX求助

  [复制链接]

6

主题

27

回帖

50

积分

初级会员

积分
50
发表于 2024-10-23 14:09:35 | 显示全部楼层 |阅读模式
断断续续搞了两周了还没ping通,查了很多手册感觉配置已经没问题了,有没有大神能帮忙看看
下面这个是netx初始化
[C] 纯文本查看 复制代码
NX_PACKET_POOL    pool_0;
NX_IP             ip_0;
#define NX_PACKET_POOL_SIZE ((1536 + sizeof(NX_PACKET)) * 40)
ULONG  packet_pool_area[NX_PACKET_POOL_SIZE/4 + 4] = {0};
ULONG    arp_space_area[52*20 / sizeof(ULONG)] = {0};

#define IP_ADDR0                        192
#define IP_ADDR1                        168
#define IP_ADDR2                        1
#define IP_ADDR3                        135

#define  THREAD_NETX_IP0_PRIO0                          2u
//#define  THREAD_NETX_IP0_PRIO1                          6u
#define  THREAD_NETX_IP0_STK_SIZE                     	1024*16u
static   uint64_t  thread_netx_ip0_stack[THREAD_NETX_IP0_STK_SIZE/8];

	UINT eth_init_status;

void thread_init(ULONG input)
{
	ULONG gateway_ip;

    nx_system_initialize();
    eth_init_status = nx_packet_pool_create(&pool_0,
										"NetX Main Packet Pool",
										1536,  (ULONG*)(((int)packet_pool_area + 15) & ~15) ,
										NX_PACKET_POOL_SIZE);
    eth_init_status = nx_ip_create(&ip_0,
                            "NetX IP0",
                            IP_ADDRESS(IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3),
                            0xFFFFFF00UL,
                            &pool_0, nx_stm32_eth_driver,
                            (UCHAR*)thread_netx_ip0_stack,
                            sizeof(thread_netx_ip0_stack),
                            THREAD_NETX_IP0_PRIO0);
	if (eth_init_status != NX_SUCCESS) {
//		serial_log("IP0 create failed!\r\n");
	}

	eth_init_status =  nx_arp_enable(&ip_0, (void *)arp_space_area, sizeof(arp_space_area));
    eth_init_status =  nx_ip_fragment_enable(&ip_0);
    eth_init_status =  nx_tcp_enable(&ip_0);
    eth_init_status =  nx_udp_enable(&ip_0);
    eth_init_status =  nx_icmp_enable(&ip_0);

   gateway_ip = IP_ADDRESS(IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);
   gateway_ip = (gateway_ip & 0xFFFFFF00) | 0x01;
   nx_ip_gateway_address_set(&ip_0, gateway_ip);

	sleep_ms(3000);
	tx_thread_create(&thread_eth_converter_block,
					"eth_converter",
					thread_eth_converter,
					0,
					&thread_eth_converter_stack[0],
					THREAD_ETH_CONVERTER_STACK_SIZE,
					THREAD_ETH_CONVERTER_PRIO,
					THREAD_ETH_CONVERTER_PRIO,
					5,
					TX_AUTO_START
					);
	tx_thread_entry_exit_notify(&thread_eth_converter_block, &thread_eth_converter_exit_callback);

	while (1)
	{
		tx_thread_sleep(100);
	}
	
}
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-23 14:10:30 | 显示全部楼层
这个是mpu配置
[C] 纯文本查看 复制代码
static void MPU_Config( void )
{
	MPU_Region_InitTypeDef MPU_InitStruct;

	/* 禁止 MPU */
	HAL_MPU_Disable();

    /* 最高性能,读Cache和写Cache都开启 */	
#if 0
   	/* 配置AXI SRAM的MPU属性为Write back, Read allocate,Write allocate */
	MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
	MPU_InitStruct.BaseAddress      = 0x24000000;
	MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
	MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
	MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
	MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
	MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
	MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
	MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
	MPU_InitStruct.SubRegionDisable = 0x00;
	MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

	HAL_MPU_ConfigRegion(&MPU_InitStruct);

    /* 最低性能,读Cache和写Cache都关闭 */
 #else
	/* 配置AXI SRAM的MPU属性为NORMAL, NO Read allocate,NO Write allocate */
	MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
	MPU_InitStruct.BaseAddress      = 0x24000000;
	MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
	MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
	MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
	MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
	MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
	MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
	MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
	MPU_InitStruct.SubRegionDisable = 0x00;
	MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

	HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif
	
	
	/* 配置FMC扩展IO的MPU属性为Device或者Strongly Ordered */
	MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
	MPU_InitStruct.BaseAddress      = 0x60000000;
	MPU_InitStruct.Size             = ARM_MPU_REGION_SIZE_64KB;	
	MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
	MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
	MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;	/* 不能用MPU_ACCESS_CACHEABLE;会出现2次CS、WE信号 */
	MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
	MPU_InitStruct.Number           = MPU_REGION_NUMBER1;
	MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
	MPU_InitStruct.SubRegionDisable = 0x00;
	MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
	
	HAL_MPU_ConfigRegion(&MPU_InitStruct);
    
    /* 配置以太网收发描述符部分为Strongly Ordered */
	MPU_InitStruct.Enable = MPU_REGION_ENABLE;
	MPU_InitStruct.BaseAddress = 0x30000000;
	MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;
	MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
	MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
	MPU_InitStruct.IsCacheable  = MPU_ACCESS_NOT_CACHEABLE;
	MPU_InitStruct.IsShareable  = MPU_ACCESS_NOT_SHAREABLE;
	MPU_InitStruct.Number = MPU_REGION_NUMBER2;
	MPU_InitStruct.SubRegionDisable = 0x0;
	MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
	MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

	HAL_MPU_ConfigRegion(&MPU_InitStruct);

	/*使能 MPU */
	HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-23 14:11:09 | 显示全部楼层
描述符设置
[C] 纯文本查看 复制代码
#elif defined ( __CC_ARM )  /* MDK ARM Compiler */

__attribute__((at(0x30000000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
__attribute__((at(0x30000080))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-23 14:12:46 | 显示全部楼层
phy是dp83848,初始化过程都没问题
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-23 14:13:50 | 显示全部楼层
这个是测试的代码
[C] 纯文本查看 复制代码
static VOID tcp_listen_callback(NX_TCP_SOCKET *socket_ptr, UINT port)
{
    tx_semaphore_put(&eht_converter_sem);
}   
void thread_eth_converter(ULONG thread_input)
{
    UINT status;
    NX_PACKET * data_packet;
    ULONG source_ip_address;

    UINT source_port;
    ULONG bytes_read;
    

	status = nx_tcp_socket_create(&ip_0, &eth_converter_sockets, 
									"eth_converter_socket", 
									NX_IP_NORMAL, 
									NX_FRAGMENT_OKAY,
									NX_IP_TIME_TO_LIVE, 
									sizeof(data_buffer), 
									NX_NULL,
									NX_NULL);
	if (status) {
	}
	status = nx_tcp_server_socket_listen(&ip_0, ETH_CONVERTER_PORT, &eth_converter_sockets, 1, tcp_listen_callback)<<2;
	if (status) {
	}
	tx_semaphore_get(&eht_converter_sem, TX_WAIT_FOREVER);
	nx_tcp_server_socket_accept(&eth_converter_sockets, TX_WAIT_FOREVER);

	while (1) {
        TX_MEMSET(data_buffer, '\0', sizeof(data_buffer));

        /* 获取socket状态 */
        nx_tcp_socket_info_get(&eth_converter_sockets, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &socket_state, NULL, NULL, NULL);

        /* 如果连接还没有建立,继续接受新连接,成功的话开启接收数据 */
        if(socket_state != NX_TCP_ESTABLISHED)
        {
            status = nx_tcp_server_socket_accept(&eth_converter_sockets, NX_IP_PERIODIC_RATE);
        }

        if(status == NX_SUCCESS)
        {
            /* 接收TCP客户端发的TCP数据包 */
            status = nx_tcp_socket_receive(&eth_converter_sockets, &data_packet, NX_WAIT_FOREVER);

            if (status == NX_SUCCESS)
            {
                /* 获取客户端的IP地址和端口 */
                nx_udp_source_extract(data_packet, &source_ip_address, &source_port);

                /* 获取客户端发来的数据 */
                nx_packet_data_retrieve(data_packet, data_buffer, &bytes_read);

                /* 打印接收到数据 */

                /* 立即将接收到的数据发送回去 */
                status =  nx_tcp_socket_send(&eth_converter_sockets, data_packet, NX_IP_PERIODIC_RATE);

                if (status == NX_SUCCESS)
                {

                }

                /* 释放数据包 */
                nx_packet_release(data_packet);
            }
            else
            {
                /* 断开连接,重新监听 */
                nx_tcp_socket_disconnect(&eth_converter_sockets, NX_WAIT_FOREVER);
                nx_tcp_server_socket_unaccept(&eth_converter_sockets);
                nx_tcp_server_socket_relisten(&ip_0, ETH_CONVERTER_PORT, &eth_converter_sockets);
            }
        }
        else
        {
            /* 处于空闲状态 */
            
        }
	}  	
	sleep_ms(1);
}
回复

使用道具 举报

3

主题

70

回帖

79

积分

初级会员

积分
79
发表于 2024-10-24 09:34:49 | 显示全部楼层
参考X-Cube-azrtos-h7里面有STM32H7的工程!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-24 10:05:48 | 显示全部楼层
ping不通的话,主要MPU/Cache问题。

另外你的ICMP开启没,这个要开启了才可以ping
回复

使用道具 举报

4

主题

1441

回帖

1453

积分

至尊会员

积分
1453
发表于 2024-10-24 10:15:19 | 显示全部楼层
你自己画的板子?
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-24 10:15:43 | 显示全部楼层
eric2013 发表于 2024-10-24 10:05
ping不通的话,主要MPU/Cache问题。

另外你的ICMP开启没,这个要开启了才可以ping

icmp开了,mpu我上面的设置也不行吗,mpu设置主要是哪些地方要注意,应该就是地址和大小吧,我现在调试看发送描述符是有点问题的,接收描述符应该没问题 企业微信截图_17297359978179.png
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-24 10:16:17 | 显示全部楼层

硬件同事画的
回复

使用道具 举报

16

主题

61

回帖

109

积分

初级会员

积分
109
发表于 2024-10-24 10:44:59 | 显示全部楼层
先接电脑上,看看电脑网口能不能识别出 网络连接了。  网络连接上再来看软件问题。 如果网络不连接就是硬件问题。
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-24 10:48:31 | 显示全部楼层
smare 发表于 2024-10-24 10:44
先接电脑上,看看电脑网口能不能识别出 网络连接了。  网络连接上再来看软件问题。 如果网络不连接就是硬件 ...

电脑有显示未识别的网络
回复

使用道具 举报

4

主题

1441

回帖

1453

积分

至尊会员

积分
1453
发表于 2024-10-25 09:23:14 | 显示全部楼层
newton 发表于 2024-10-24 10:48
电脑有显示未识别的网络

那就表示PHY工作了吧
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-25 10:15:03 | 显示全部楼层
newton 发表于 2024-10-24 10:15
icmp开了,mpu我上面的设置也不行吗,mpu设置主要是哪些地方要注意,应该就是地址和大小吧,我现在调试看 ...

TX地址是不是没有对应上

__attribute__((at(0x30000000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
__attribute__((at(0x30000080))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-25 15:54:10 | 显示全部楼层
eric2013 发表于 2024-10-25 10:15
TX地址是不是没有对应上

__attribute__((at(0x30000000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_ ...

tx地址调试看是对的,只是里面成员的值很明显就是全乱的,这个跟mpu设置也有关系吗 企业微信截图_1729842799502.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-26 09:55:16 | 显示全部楼层
newton 发表于 2024-10-25 15:54
tx地址调试看是对的,只是里面成员的值很明显就是全乱的,这个跟mpu设置也有关系吗

方便的话,把你的工程分享到百度云,我看下
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-28 10:11:51 | 显示全部楼层
eric2013 发表于 2024-10-26 09:55
方便的话,把你的工程分享到百度云,我看下

通过百度网盘分享的文件:BusConverter.rar
链接:https://pan.baidu.com/s/1ikX4JVuaoTAt7fwdisuQGQ
提取码:5ks1
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-28 10:12:19 | 显示全部楼层
eric2013 发表于 2024-10-26 09:55
方便的话,把你的工程分享到百度云,我看下

链接发了感谢硬汉哥
回复

使用道具 举报

4

主题

1441

回帖

1453

积分

至尊会员

积分
1453
发表于 2024-10-28 10:52:43 | 显示全部楼层
newton 发表于 2024-10-28 10:12
链接发了感谢硬汉哥

什么工程这么大的尺寸,700多MB ?
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-28 11:46:01 | 显示全部楼层
eric2013 发表于 2024-10-26 09:55
方便的话,把你的工程分享到百度云,我看下

重新发了个小一点的,刚刚那个应该是没删掉编译信息
通过百度网盘分享的文件:BusConverter.rar
链接:https://pan.baidu.com/s/1qB0rx3LJml49ZC6fkl_qpQ
提取码:kc5i
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-28 11:46:38 | 显示全部楼层
morning_enr6U 发表于 2024-10-28 10:52
什么工程这么大的尺寸,700多MB ?

应该是忘了删掉编译信息了,重新发了个200m的,那个cmsis就占了180m,用cube生成的
回复

使用道具 举报

4

主题

1441

回帖

1453

积分

至尊会员

积分
1453
发表于 2024-10-28 12:33:43 | 显示全部楼层
newton 发表于 2024-10-28 11:46
重新发了个小一点的,刚刚那个应该是没删掉编译信息
通过百度网盘分享的文件:BusConverter.rar
链接: ...

kk-001.jpg 你的工程编译太可怕了, 生成1.02G的数据文件。  大部分的 *.O  的文件体积巨大,不正常。同样的文件,我的工程编译才十几KB,你的要一千多KB。
回复

使用道具 举报

4

主题

1441

回帖

1453

积分

至尊会员

积分
1453
发表于 2024-10-28 12:38:49 | 显示全部楼层
newton 发表于 2024-10-28 11:46
重新发了个小一点的,刚刚那个应该是没删掉编译信息
通过百度网盘分享的文件:BusConverter.rar
链接: ...

原来,你的工程是 AC5的工程,我换成AC6编译,快了很多,体积正常了,但是错误不少。
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-28 13:59:10 | 显示全部楼层
morning_enr6U 发表于 2024-10-28 12:38
原来,你的工程是 AC5的工程,我换成AC6编译,快了很多,体积正常了,但是错误不少。

我的编译也巨慢,用gcc编译就快得很
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-29 09:47:45 | 显示全部楼层
newton 发表于 2024-10-28 11:46
重新发了个小一点的,刚刚那个应该是没删掉编译信息
通过百度网盘分享的文件:BusConverter.rar
链接: ...

好的,明天我看下。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-31 08:38:07 | 显示全部楼层
newton 发表于 2024-10-28 13:59
我的编译也巨慢,用gcc编译就快得很

这个对勾去掉,运行试试,别的没发现什么问题
1234.png
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-11-1 09:08:11 | 显示全部楼层
eric2013 发表于 2024-10-31 08:38
这个对勾去掉,运行试试,别的没发现什么问题

去掉就编译不过了,这个是cubemx生成的也有问题吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-2 10:24:47 | 显示全部楼层
newton 发表于 2024-11-1 09:08
去掉就编译不过了,这个是cubemx生成的也有问题吗

那不正常,去掉对勾的这个RAM是DTCM,这个RAM空间不支持以太网DMA使用,如果你的以太网缓冲分配到这个地方会有问题的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 22:00 , Processed in 0.440789 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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