硬汉嵌入式论坛

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

[以太网] 像使用串口一样使用以太网,STM32H7的原始以太网数据包收发速度11.9MB/S,实用价值也很高(2020-12-05)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106721
QQ
发表于 2020-12-5 02:48:16 | 显示全部楼层 |阅读模式
原始以太网数据收发也非常方便,方便大家做自定义协议。多个板子直接做数据透传也极其方便,速度快,距离远等优点。

RL-TCPnet V7.X专门提供了函数netETH_ReceiveRaw和netETH_SendRaw

777.png


发送:
  1. char SourceMAC[6] = {0x1E,0x30,0x6C,0xA2,0x45,0x5E};
  2. char DestinationMAC[6] = {0x1E,0x30,0x6C,0xA2,0x45,0x50};
  3. char buffer[2000] = {0x49};
  4. void DM9162TCPnetTest(void)
  5. {
  6.     int32_t iCount;
  7.     uint8_t *sendbuf;
  8.     netStatus res;
  9.     const uint16_t usMaxBlockTime = 2; /* 延迟周期 */
  10.     uint32_t EvtFlag;
  11.     uint32_t t1, t2;

  12.     udp_sock = netUDP_GetSocket (udp_cb_func);

  13.     if (udp_sock >= 0)
  14.     {
  15.         netUDP_Open (udp_sock, Local_NUM);
  16.         //netUDP_SetOption (udp_sock, netUDP_OptionInterface, NET_IF_CLASS_ETH | 0);
  17.     }
  18.     while (1)
  19.     {
  20.         EvtFlag = osThreadFlagsWait(0x00000007U, osFlagsWaitAny, usMaxBlockTime);

  21.         switch (EvtFlag)
  22.         {
  23.             /* 接收到K1键按下,给远程TCP客户端发送数据 */
  24.             case KEY1_BIT0:        
  25.                 iCount = 100;
  26.                 t1 = osKernelGetTickCount ();
  27.                 printf("------%d\r\n", t1);
  28.                 do
  29.                 {
  30.                     memcpy (&buffer[0], &DestinationMAC[0], 6);     
  31.                     memcpy (&buffer[6], &SourceMAC[0], 6);      
  32.                     buffer[12] = 0x88;
  33.                     buffer[13] = 0x8E;
  34.                     res =  netETH_SendRaw (0, (const uint8_t *)buffer, 1500);
  35.                     if(res == netOK)iCount--;
  36.                 }while(iCount > 0);
  37.                 t2 = osKernelGetTickCount ();
  38.                 printf("测试速度 = %4.1fMB/S\r\n", (float)(100.0*1500)/(t2-t1) * 1000/1024/1024);
  39.                 break;

  40.             /* 其他的键值不处理 */
  41.             default:                     
  42.                 break;
  43.         }
  44.     }
  45. }
复制代码



接收端:
  1. void netETH_ReceiveRaw (uint32_t if_num, const uint8_t *buf, uint32_t len) {
  2.     static uint32_t i = 0;

  3.     i++;
  4.     printf("%d %d\r\n", i, len);
  5. }
复制代码




评分

参与人数 1金币 +20 收起 理由
missfox + 20 赞一个!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106721
QQ
 楼主| 发表于 2020-12-5 03:15:10 | 显示全部楼层
实际应用建议做个简单的握手,防止大批量数据传输时丢包。
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-12-5 09:11:44 | 显示全部楼层
这是从哪一层开始填数据的,是不是IP层还是由RL-TCPNet负责的?谢谢硬汉大哥
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106721
QQ
 楼主| 发表于 2020-12-5 09:19:42 | 显示全部楼层
morning_enr6U 发表于 2020-12-5 09:11
这是从哪一层开始填数据的,是不是IP层还是由RL-TCPNet负责的?谢谢硬汉大哥

最底层的,知道目标MAC地址,知道自己的MAC地址,直接发数据即可。
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-12-5 09:48:52 | 显示全部楼层
回复

使用道具 举报

0

主题

30

回帖

30

积分

新手上路

积分
30
发表于 2020-12-5 10:29:53 | 显示全部楼层
实际应用中确实有这方面的需求   如电力上的IEC61850-GOOSE    通信要求速度快 ,所以IEC定义协议时没有网络层,传输层,会话层       直接由数据链层跳到会话层     这种情况需要操作操作底层(获取如TCI APPID等信息) ,不需要经过协议栈处理     
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2020-12-5 10:34:19 | 显示全部楼层
正在找这方面的应用,这就来了
代码不规范,亲人两行泪!
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-12-5 10:37:42 | 显示全部楼层
那这种通信对交换机有什么特殊要求没有 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106721
QQ
 楼主| 发表于 2020-12-6 12:03:34 | 显示全部楼层
jxgzlym 发表于 2020-12-5 10:29
实际应用中确实有这方面的需求   如电力上的IEC61850-GOOSE    通信要求速度快 ,所以IEC定义协议时没有网络 ...

远距离高速通信用这个也不错,10MB的速度,还是很有优势的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106721
QQ
 楼主| 发表于 2020-12-6 12:04:00 | 显示全部楼层
morning_enr6U 发表于 2020-12-5 10:37
那这种通信对交换机有什么特殊要求没有 ?

现在是板子直连测试的,我后面使用路由器或者交换机试试。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 03:29 , Processed in 0.211239 second(s), 37 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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