C6670通过GE与PC通信

软件版本来源:K1_STK_v1.1

硬件平台:C6670 EVM

需要改动的地方:GE_Test.c

C6670 EVM板使用port1通过和phy连接。所以需要将port 1配成 GE_PORT_CABLE_CONNECT。需要根据自己的板子的硬件设计来确定具体配置。

若遇到进入此循环过不去

需要改的地方void KeyStone_Ethernet_Ports_Init(KeyStone_GE_Config * ge_cfg);函数中的

使用port1连接

如果link不上,主要查看PC端的配置和网线是否能用。出现link不上,很少是DSP的配置问题。DSP部分已经对phy部分配置。主要查看PC端的原因。还是不能link可以修改DSP的目的Mac试一下,将DSP的目的MAC改为PC端的MAC(很少是因为这个原因),有的时候之前能link,后来不能link,可以复位DSP试一下

以上GE的初始化应该完成。

以下为协议部分(使用UDP和PC完成通信,如果不需要太复杂的功能。DSP可以自己加包头实现。若要实现复杂功能请使用NDK组件来完成)

使用UDP协议来和PC端通信,DSP端需要加UDP协议的报头

UDP协议报头由以下几部分组成

UDP层 +  IP层 + MAC层

一个完整的UDP包包含

MAC层 +  IP层 + UDP层  + 净荷数据 + MAC层校验和;

最后一个校验和自动加,不需要自己来完成。需要加的部分是UDP协议报头部分

具体流程:添加UDP层   IP层

 

/*函数功能:添加IP层

函数第一个参数:存放UDP包数据的地址

函数第二个参数:源IP

函数第三个参数:目的IP

函数第三个参数:IP层的长度(IP层+UDP层的长度。净荷数据的长度+28)

*/

void Fill_IP_header(Uint8 * buffer,unsigned int  sour_add,unsigned  int dest_add, short length ){
    // 32
        buffer[14]= 0x45;  //8
        buffer[15]= 0x00;
        buffer[16]= ((length)>>8)&0xFF;   //IP包的长度以字节为单位  16位
        buffer[17]= ((length)>>0)&0xFF;  // 长度

        buffer[18]= 0x00;  //8   //  标识符  16位
        buffer[19]= 0x01;
        buffer[20]= 0x00;     // 3+13
        buffer[21]= 0x00;

        buffer[22]= 0x10;  //8
        buffer[23]= 0x11;
        buffer[24]= 0x00;  // 头部校验  16位
        buffer[25]= 0x00;

        buffer[26]= ((sour_add)>>24)&0xFF;  //8   // 源IP  32位
        buffer[27]= ((sour_add)>>16)&0xFF;
        buffer[28]= ((sour_add)>>8)&0xFF;
        buffer[29]= ((sour_add)>>0)&0xFF;

        buffer[30]= ((dest_add)>>24)&0xFF;  //8   // 目的 32位
        buffer[31]= ((dest_add)>>16)&0xFF;
        buffer[32]= ((dest_add)>>8)&0xFF;
        buffer[33]= ((dest_add)>>0)&0xFF;

}

/*函数功能:添加UDP层

函数第一个参数:存放UDP包数据的地址

函数第二个参数:源端口号

函数第三个参数:目的端口号

函数第三个参数:IP层的长度(UDP层的长度。净荷数据的长度+8)

*/

void Fill_UDP_header(Uint8 * buffer,unsigned short sour_port, unsigned short det_port,short length){


        buffer[34]= ((sour_port)>>8)&0xFF;  //8
        buffer[35]= ((sour_port)>>0)&0xFF;

        buffer[36]= ((det_port)>>8)&0xFF;
        buffer[37]= ((det_port)>>0)&0xFF;

        buffer[38]= ((length)>>8)&0xFF;  //8
        buffer[39]= ((length)>>0)&0xFF;

        buffer[40]= 0x00;    // 校验和
        buffer[41]= 0x00;
}

/*计算校验和的代码,用法下文中有*/

Uint16 checksum(Uint16 *dp, Uint16 length)
{
    __u32 sum = 0;
    __u16 len = length >> 1;

    while(len-- > 0)
        sum += *dp++;
    if(length & 1)
        sum += (*dp & 0xFF00);

    sum = (sum >> 16) + (sum & 0xFFFF);
    sum += (sum >> 16);

    len = sum & 0xFFFF;
    return(~len);
}

加MAC层的程序。源程序中有。不再重复

调用流程:(放到GE_2DSP_Test()函数中)

/*SendDataBuf  存放净荷数据的地址*/

 Fill_UDP_header(ucpBuffer,DestPort,DestPort,lenth);
 Fill_IP_header(ucpBuffer,Recv_IP,DestIP, len);

/*添加IP层的校验和*/
Uint16 check;
Uint16 Buffer1[10]={0};
int a;
int b=0;
for(a=14;a<34;a=a+2){
    Buffer1[b]=(ucpBuffer[a] &0xff)<<8 | (ucpBuffer[a+1] &0xff);
    b++;
 }
check= checksum(Buffer1, 20);
ucpBuffer[24]=((check)>>8)&0xFF;  // 头部校验  16位
ucpBuffer[25]= ((check)>>0)&0xFF;

/*fill MAC header*/
Fill_EMAC_header(ucpBuffer,0x0800,locallMAC,DestMAC);
memcpy(ucpBuffer+headerlen,SendDataBuf , uiPayloadNumBytes);
hostDescriptor->packet_length= uiPayloadNumBytes+ headerlen;

具体细节自己注意改

想要速度传输速度提升要去掉延迟

使用抓包工具,查看具体情况

若想要PC端给DSP发送数据

PC端自动绑定MAC和IP,在CMD中执行arp -s 10.0.0.100 00-18-30-87-31-a1命令

使用抓包工具可以得到DSP的MAC地址。DSP也可以写一个发送函数,将自己的MAC地址发送给PC端

未解决的问题:

DSP给PC端发送UDP包。会出现丢包现象。DSP端通过读取0x02090C34寄存器可以确定包全部发出。还没有解决丢包现象。目前规避方法加入重传机制(DSP个PC端发送的UDP带有控制信息)

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值