当前位置:   article > 正文

以太网(ethernet)通信。DSP开发板28388D发送数据,电脑接收数据。使用的是UDP协议

28388d

一、使用的开发板(DSP28388D):
TMDSCNCD28388D(3核)

二、想要实现的目标:
电脑连到交换机A上,开发板连到交换机A上。电脑与开发板能够进行数据通信(暂时,先调开发板给电脑发送数据)

三、开发板的开发软件:
CCS10.1.0

软件安装注意:
CCS软件的安装位置与工作空间的位置,需要在不同的存储盘。(例如:我的CCS软件安装在D盘,工作空间放在了F盘)

四、使用的例程:
TI 提供的C2000 WARE 3.04
C2000ware的位置,要保证原路径不变化。(C盘)

CPU1:ethernet_c28x_config
例程所在位置:C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f2838x\examples\cm\ethernet

CM4:enet_lwip
例程所在的位置:C:\ti\c2000\C2000Ware_3_04_00_00\libraries\communications\Ethernet\third_party\lwip\examples

使用例程的时候,有个问题需要注意:
是否有相互链接关系。(例程导入到CCS中,先尝试修改例程的文件名称和工程的名称,然后,找到main.c,在里面先注释掉一句代码,然后,将C盘中的原例程导入到CCS中,比较一下,修改的地方,就可以发现是否有相互链接的)

如果没有的话,恭喜你,可以尽情的修改。
如果有链接,就需要如下操作:
破坏链接的状态,例如:以enet_lwip为例,这个例程是有链接的(CA000WARE更新的时候,会链接修改,自己复制出来,手动更改的时候,也是会被链接修改)
只需要,将例程中的enet_lwip.c文件的内容先复制下来,然后删除掉,然后重新在工程下创建一个.c文件,修改一个命名,保存。然后将之前复制的内容,粘贴到新建的.c文件中。保存后,编译。(这样,就可以破坏例程中文件之间的链接关系)
(尝试过,这种操作之后,正常的修改.c文件,是不链接的。但是,后台的.h文件,还是会处于链接的状态,如果有朋友有更好的方法,可以进行交流…))

五、步骤分为以下几步:
1、硬件连接
将电脑的主机通过普通网线连接到交换机A上,从开发板的ethernet口引出一根网线,连接到交换机A上。
(这个地方需要检查开发板上的黄色的灯是否是常亮,常亮,说明交换机与开发板已经成功连接了)

2、例程导入
按照上面的例程位置,将两个例程导入到工程中。

3、电脑的IP修改
设置一个固定的IP: 192.168.2.160
我们使用的局域网段
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、例程理解和修改
同样在enet_lwip例程中,需要将IP地址修改成局域网段
我设置的是:192.168.2.22(开发板的IP地址)
由于使用的是开发板,所以引脚不用改
在这里插入图片描述

5、运行例程,用命令窗口,观察是否能够ping通
运行例程前,先对两个例程进行编译,之后,开始下载:
需要先debugCPU1的例程,然后再操作CM4核的例程,
第一次使用的话,要注意下载和运行程序的顺序,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来点运行,先点CPU1运行,再点CM4核运行
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210629150003204.png
在这里插入图片描述
在这里插入图片描述
下图,是正常运行的截图:
在这里插入图片描述
PING
在cmd命令中,写ping 192.168.2.22 -t
发现,如下所示,正常连通。
在这里插入图片描述

6、加入UDP协议代码
协议栈通了之后,再实现我们想要的功能。
实现UDP协议传输数据:
首先,要到工程下的lwipopts.h文件中修改程序第191行,设置为#define LWIP_UDP 1然后到文件enet_lwip.c中添加如下代码到对应位置

#define shuzulen 120
struct pbuf *p;
struct udp_pcb *UdpPcb;
struct ip4_addr ipaddr;
uint32_t UDPData[shuzulen];

int main()
{

//下面的代码,放到while(1)之前就行了
IP4_ADDR(&ipaddr,192,168,2,160); //远端IP地址
UdpPcb = udp_new();
udp_bind(UdpPcb,IP_ADDR_ANY,6600); //绑定本地IP地址和端口号(开发板)
udp_connect(UdpPcb,&ipaddr,5530); //绑定远端IP地址和端口号(电脑)

while(1)
{

        p = pbuf_alloc(PBUF_TRANSPORT,shuzulen,PBUF_RAM);

        p->payload=(void*)UDPData;
        //DEVICE_DELAY_US(2000);
        p->tot_len = shuzulen;        //17        // long_UDP_complete+4;
        p->len = shuzulen;            //17       // long_UDP_complete+4;
        udp_send(UdpPcb, p);
        DEVICE_DELAY_US(10000);

        if (p!= NULL)    pbuf_free(p);
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

}

然后,再到ip4_addr.h中,修改69行,设置为#define IPADDR_ANY ((u32_t)0xC0A80216UL) //这是设置本地IP地址。如何到ip4_addr.h中,如下图所示:
一直跳IP_ADDR_ANY
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、进行调试
再次运行程序,这个地方要注意,是想要实现程序运行起来后,循环发送(就需要将send函数放到while(1)中),还是说只发送一条(就需要将send函数放到while(1)外面)。
具体的调试,还是需要不断地尝试。

8、电脑端使用端口精灵、TCP&UDP测试工具、wireshark接收开发板发送出来的数据
观察数据的准确性和速度

使用端口精灵,需要设置端口号,如下图:
设置成5530

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用TCP&UDP测试工具,需要设置IP地址、端口号:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用wireshark软件,需要如下操作:
在这里插入图片描述
在这里插入图片描述
然后,在窗口输入过滤指令:ip.addr = 192.168.2.22 and icmp,就可以抓取192.168.2.22发送出来的数据报文。
在这里插入图片描述
在这里插入图片描述

9、当然,整个通道建立好了,数据也是可以发送出来了。
具体的数据格式,还是存在问题,需要再调整。
我这边,目前有个问题,还没有解决,我想要发送出来的数据是aa 55 33 11 22…

但是,实际发送出来的,却是aa 00 00 00 55 00 00 00 33 00 00 00 11 00 00 00 22…

对于这个问题,目前也在尝试方法中,有想法的朋友,可以交流一下…

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/408247
推荐阅读
相关标签
  

闽ICP备14008679号