大家好,我的板子是OMAPL138,SDK包使用的是ti-processor-sdk-linux-omapl138-lcdk-04.00.00.04,配置好dm9000的启动后网卡正常识别,但是我从装置使用ping命令发送一个arp包时发现发送的数据错位了,在上位机使用抓包工具抓到的数据和我在dm9000_start_xmit函数写入到dm9000的数据不一致,具体如下:
发送:
FF FF FF FF FF FF00 61 6E 64 79 3108 06 00 01 08 00 06 04 00 01 00 61 6E 64 79 31 C0 A8 0A 0F 00 00 00 00 00 00 C0 A8 0A 4D
接收:
FF FF 00 00 FF FF FF FF FF FF FF FF00 61 6e 64 79 3108 06 00 01 08 00 06 04 00 01 00 61 6e 64 79 31 06 04 c0 a8 0a 0f 6e 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
感觉硬件出去的数据完全乱掉了,这是怎么回事啊?第二包数据还会把上一包数据后面的部分放在包头发出去
Tony Tang:
DM9000是接在EMIFA上的异步接口设备,数据能出什么错啊。而且从接收到的数据看,数据基本上都发出去了,所以EMIFA应该没什么问题。
我想是不是你的函数里对数据又做了进一步的处理了~~~。
Zhihua Zhang:
回复 Tony Tang:
Hi,Tony,
我使用的SDK包自带的驱动,没有作任何的处理啊,发出去的数据前面多了FF FF 00 00 FF FF这六个字节,导致对端收到之后根本无法识别这帧报文了,本来应该是6字节的目标MAC,6字节的源MAC,再加上08 06表示报文类型,现在0806都被放到其他位置去了。
发送数据(在dm9000_start_xmit函数打印):
PING 192.168.10.77 (192.168.10.77): 56 data bytedm9000_start_xmit: First packet,skb->len=42 dm9000_start_xmit: skb->data= FF FF FF FF FF FF 00 61 6E 64 79 31 08 06 00 01 08 00 06 04 00 01 00 61 6E 64 79 31 C0 A8 0A 0F 00 00 00 00 00 00 C0 A8 0A 4D
————dm9000_tx_done, dev->stats.tx_packets=1 s dm9000_start_xmit: First packet, skb->len=42 dm9000_start_xmit: skb->data= FF FF FF FF FF FF 00 61 6E 64 79 31 08 06 00 01 08 00 06 04 00 01 00 61 6E 64 79 31 C0 A8 0A 0F 00 00 00 00 00 00 C0 A8 0A 4D ————dm9000_tx_done, dev->stats.tx_packets=2 dm9000_start_xmit: First packet, skb->len=42 dm9000_start_xmit: skb->data= FF FF FF FF FF FF 00 61 6E 64 79 31 08 06 00 01 08 00 06 04 00 01 00 61 6E 64 79 31 C0 A8 0A 0F 00 00 00 00 00 00 C0 A8 0A 4D ————dm9000_tx_done, dev->stats.tx_packets=3 ^C — 192.168.10.77 ping statistics — 3 packets transmitted, 0 packets received, 100% packet loss
但是收到的数据是:
ff ff ff ff 00 00 ff ff ff ff 00 61 6e 64 79 31 08 06 00 01 08 00 06 04 00 01 00 61 6e 64 79 31 c0 a8 0a 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0 a8 0a 4d ff ff ff ff 00 00 ff ff 0a 4d 00 61 6e 64 00 00 79 31 0a 4d 08 06 00 01 08 00 06 04 00 01 00 61 6e 64 79 31 c0 a8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0a 0f 00 00 00 00 00 00 c0 a8 0a 4d ff ff ff ff ff ff 00 61 6e 64 79 31 08 06 00 01 08 00 06 04 00 01 00 61 6e 64 79 31 c0 a8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
这是为什么呢?在原来一个老的Linux 2.6.x的内核上是好的,但是最新版的SDK下就是不行。