嵌入式开发者社区

标题: 基于SYS/BIOS的以太网数据链路层通信 [打印本页]

作者: shuo    时间: 2016-4-11 16:02
标题: 基于SYS/BIOS的以太网数据链路层通信
导入SYS/BIOS下的Raw Socket例程,按照开发例程使用手册进行操作,把“网络->此连接使用以下项目”中的所有选项去除:
[attach]698[/attach]
xcap.exe软件也已经配置,PC机端MAC地址也已经修改,[attach]701[/attach]
但是在开发板发送步骤,例程运行的结果如下,出现failed socket receive (35)
[attach]699[/attach]

xcap.exe的运行结果是:
[attach]700[/attach]

请问是为什么?


作者: 希望缄默    时间: 2016-4-11 16:52
可以尝试从 PC 发包到 DSP
作者: shuo    时间: 2016-4-11 20:07
本帖最后由 shuo 于 2016-4-11 20:29 编辑

从PC发包到DSP也是相同的错误:报文设置如下:
[attach]704[/attach][attach]702[/attach][attach]703[/attach]
结果还是显示failed socket receive (35)
[attach]705[/attach]

我的winpacp也已经成功安装了,但是就是出现这种错误,请问是为什么?
[attach]706[/attach]


而且在Socket.c中fdError指的是什么?为什么显示的错误是failed socket receive (35)呢?
[attach]707[/attach]


作者: shuo    时间: 2016-4-12 15:01
希望缄默 发表于 2016-4-11 16:52
可以尝试从 PC 发包到 DSP

从PC发包到DSP还是产生failed rocket receive(35),请问在修改PC机的MAC地址是这一步,PC机的MAC地址是拔掉网线之前查到的吧?拔掉网线让电脑和DSP连接之后,电脑就没有网络了,也就没有MAC地址了啊谢谢
作者: 希望缄默    时间: 2016-4-12 15:49
shuo 发表于 2016-4-12 15:01
从PC发包到DSP还是产生failed rocket receive(35),请问在修改PC机的MAC地址是这一步,PC机的MAC地址是 ...

MAC 地址是物理地址是惟一的 跟有没有网线没有关系
出现接收错误是正常的 因为只有 PC 在一直发送数据 DSP 才会接收成功
所以 要在抓包那里看下有没有抓到 DSP 回传的数据包
作者: shuo    时间: 2016-4-12 16:55
本帖最后由 shuo 于 2016-4-12 17:12 编辑
希望缄默 发表于 2016-4-12 15:49
MAC 地址是物理地址是惟一的 跟有没有网线没有关系
出现接收错误是正常的 因为只有 PC 在一直发送数据 DS ...
开发板接收部分的截图在上面的帖子中,因为没有0x888 协议,所以我使用了0x8808(MACC),在s = socket(AF_RAWETH, SOCK_RAWETH, 0x8808);也改过来了,但是xcap.exe中没有任何内容,如下:
[attach]708[/attach]
抓包这里也没有看到DSP回传的数据包,它没有任何内容,请问问题可能出在哪里?

作者: 希望缄默    时间: 2016-4-13 14:59
shuo 发表于 2016-4-12 16:55
开发板接收部分的截图在上面的帖子中,因为没有0x888 协议,所以我使用了0x8808(MACC),在s = socket(AF_RAW ...

必须用 0x888 协议 其它协议可能会被驱动过滤
作者: shuo    时间: 2016-4-13 16:11
希望缄默 发表于 2016-4-13 14:59
必须用 0x888 协议 其它协议可能会被驱动过滤

[attach]711[/attach]
以管理员身份运行E:\demo\HostApp\xcap_1_0_3下的xcap.exe时没有0x0888协议,请问是要添加什么组件吗?

作者: 希望缄默    时间: 2016-4-13 16:58
shuo 发表于 2016-4-13 16:11
以管理员身份运行E:\demo\HostApp\xcap_1_0_3下的xcap.exe时没有0x0888协议,请问是要添加什么组件吗?
...

手工填写一下啊
作者: shuo    时间: 2016-4-13 17:14
本帖最后由 shuo 于 2016-4-13 17:15 编辑
希望缄默 发表于 2016-4-13 16:58
手工填写一下啊

原来可以手工填写,哈哈哈哈
但是把它改回0x888协议还是不行呢
[attach]727[/attach]
抓包结果还是一片空白

代码我只改了PC机的MAC地址,其他的没有变啊

作者: 希望缄默    时间: 2016-4-13 17:42
shuo 发表于 2016-4-13 17:14
原来可以手工填写,哈哈哈哈
但是把它改回0x888协议还是不行呢

XCAP 抓其它网络包正常不? 比如抓其它电脑发来的数据包
作者: 希望缄默    时间: 2016-4-13 17:44
shuo 发表于 2016-4-13 17:14
原来可以手工填写,哈哈哈哈
但是把它改回0x888协议还是不行呢

如果操作步骤与文档一致的话 还是不行 那只好请你带上设备来广州测试了
作者: shuo    时间: 2016-4-13 18:02
希望缄默 发表于 2016-4-13 17:42
XCAP 抓其它网络包正常不? 比如抓其它电脑发来的数据包

测试的时候不是用网线把板子和电脑连起来嘛,把网络的网线插回电脑之后,XCAP可以抓包,这样是不是说明XCAP没有问题?和SYS/BIOS有关系吗?但是我是导入的例程的啊
作者: 希望缄默    时间: 2016-4-14 07:25
没有关系 这个测试不仅需要板卡 还依赖网络环境和电脑 没有办法保证所有情况都可以使用 你可以尝试两块板子通信 这样就可以排除其它变量了
作者: shuo    时间: 2016-4-14 10:01
希望缄默 发表于 2016-4-14 07:25
没有关系 这个测试不仅需要板卡 还依赖网络环境和电脑 没有办法保证所有情况都可以使用 你可以尝试两块板子 ...

谢谢您的耐心解答。还有一个问题就是PC发包给DSP时,DSP是把数据存在哪里了呢?要怎么把数据取出来在进行后面的处理呢?
作者: 希望缄默    时间: 2016-4-14 10:58
shuo 发表于 2016-4-14 10:01
谢谢您的耐心解答。还有一个问题就是PC发包给DSP时,DSP是把数据存在哪里了呢?要怎么把数据取出来在进行 ...

RAW Socket 模式不走协议 所以 DSP 就得一直处于接收模式 这样收到数据的时候会得到数据指针
i = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);

这个 pBuf 就是数据指针
作者: shuo    时间: 2016-4-14 21:22
希望缄默 发表于 2016-4-14 10:58
RAW Socket 模式不走协议 所以 DSP 就得一直处于接收模式 这样收到数据的时候会得到数据指针
i = (int)re ...

您好,不好意思,关于这个例程还有两个问题
[attach]730[/attach]
1. ethernet ii以太网帧结构的data最少是46bytes,但是在xcap.exe中data设置是相同的值(如0x01),请问能把它每byte设置成不能的值吗?怎么设置呢?

2. 最右边的ASCII码为什么是 "........."这种格式呢?代码中 RawETHPacket.Payload[64]中存储的也是这种点,请问我怎么把它转换成十六进制或者二进制呢?像这样printf("%02x\n",RawETHPacket.Payload[0]); 只是输出转化了,但是RawETHPacket.Payload[64]中存储的还是点


麻烦了,谢谢您。

作者: 希望缄默    时间: 2016-4-15 09:31
shuo 发表于 2016-4-14 21:22
您好,不好意思,关于这个例程还有两个问题

1. ethernet ii以太网帧结构的data最少是46bytes,但是在xca ...

1、直接修改就行了[attach]731[/attach]

2、电子设备只能认识 0 和 1 怎么可能储存的是 . 呢?
参照 ASCII 表 值为 01 时候就是 .
[attach]732[/attach]





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4