This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于OAMPL138上DM9000驱动发送数据错误的问题



大家好,我的板子是OMAPL138,SDK包使用的是ti-processor-sdk-linux-omapl138-lcdk-04.00.00.04,配置好dm9000的启动后网卡正常识别,但是我从装置使用ping命令发送一个arp包时发现发送的数据错位了,在上位机使用抓包工具抓到的数据和我在dm9000_start_xmit函数写入到dm9000的数据不一致,具体如下:

发送:

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

接收:
FF FF 00 00 FF FF 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 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

感觉硬件出去的数据完全乱掉了,这是怎么回事啊?第二包数据还会把上一包数据后面的部分放在包头发出去

  • DM9000是接在EMIFA上的异步接口设备,数据能出什么错啊。而且从接收到的数据看,数据基本上都发出去了,所以EMIFA应该没什么问题。

    我想是不是你的函数里对数据又做了进一步的处理了~~~。

  • 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 

    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下就是不行。