最近着了powerlink的道,连续几晚十二点前没睡过觉。不得不说兴趣这东西劲太大了,让人睡不着。喜欢上研究POWERLINK,最新版的源码结构挺清晰的,移植并测试了嵌入式linux作为从站和电脑主站之间的通信,挺有趣的。接下来想尝试下在单片机上的移植,降低POWERLINK协议的使用门槛,让POWERLINK协议可以用的更广泛,算是件有意义的事。
以下分享下openPOWERLINK最新源码v2.7.2在单片机上的移植思路。
使用倒推法(由编译结果去推导需要依赖的代码文件),能够直观的看到平台差异性相关的文件。因此移植也很简单,照着以下指南来,肯定没问题。
openPOWERLINK最新源码地址:openPOWERLINK :: openPOWERLINK
powerlink不错的协议,但大都去卷ethercat了。我想powerlink这么好的协议真没啥难的,了解后会觉得比485总线还好用。之前就难资料太少,没人去研究推动和分享,我想趁我兴致正浓就多输出几篇分享给大家。
前提条件
openPOWERLINK源码要想成功运行在单片机上,需要一定的前提条件。最起码单片机板子上得有以太网功能吧。至于是否得有tcp/ip协议栈才能运行powerlink? 这个是非必要的,也就是说即便单片机板子上只有MCU+MAC+PHY芯片,没有移植lwip协议栈也是可以的。
如果是单片机mcu内核涵盖MAC链路层功能,则直接外接一颗PHY芯片即可。这需要单片机具备mac接口,一般像stm32F4系列以上的稍微高端点的单片机才具有mac功能。
媒体访问控制(MAC,Media Access Control),又称作介质访问控制,简称MAC,是局域网中数据链路层的下层部分,提供地址及媒体访问的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信,而不会互相冲突,上述的特性在局域网中格外重要。早期网络发展时以MAC判别各个网络接口的位置,但后来互联网发展后,才有IP的制定与使用。若只是两台设备之间全双工的通信,因为两台设备可以同时发送及接收数据,不会冲突,因此不需要用到MAC协议。
媒体访问控制MAC子层负责解决与媒体接入有关的问题,在物理层的基础上进行无差错的通信。
MAC子层是网络与设备的接口,它从网络层接收数据帧,然后通过媒体访问规则和物理层将数据帧发送到物理链路上。它也从物理层接收数据帧,再送到网络层。总的来说,MAC有三大功能:
1.决定节点何时发送数据包。
2.将数据帧发送到物理层,然后发送到物理链路。
3.从物理层接收数据帧,然后送给网络层处理。
其中最重要的是第一点:决定节点何时发送数据包。对于每一种媒体访问控制技术,用来控制节点发送时机的规则叫做媒体访问规则。局域网上的节点不能想要发送数据就发送,节点只能在轮到它的时候才发送。
仅有STM32自带的MAC还不能做网络通信,还需要外接以太网PHY芯片才可以,如同RS485通信一样,仅有一个串口是不行的,还需要外接RS485的PHY芯片。
PHY(Port Physical Layer),可称之为端口物理层,是一个对OSI模型物理层的简称。现在常用于STM32的有DP83848,LAN8270,DM9161/9162等。这些PHY芯片都大同小异,基本寄存器都是一样的,只有扩展寄存和厂商专门设置的寄存器不同。如果用户将其中一个PHY驱动成功了,驱动另一个也是非常方便的。
如果低端点儿单片机没MAC功能呢?如何外接以太网芯片?办法也是有的,现在有的厂商提供集成的模块儿,自带MAC和PHY芯片的功能,对外通过SPI接口操作访问。如常用的芯片w5500芯片,就是一颗集成了MAC和PHY功能的芯片,通过SPI接口可以访问和使用。SPI接口几乎高低端的单片机都有的常见接口。W5500 芯片是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。是韩国WIZnet(微知纳特)发布全硬件TCP/IP协议栈以太网接口芯片。W5500 支持高速标准4线SPI接口与主机进行通信,该 SPI 速率理论上可以达到 80MHz。或者CH395芯片,也是SPI接口连接MCU,它是沁恒公司的一款以太网协议栈管理芯片。CH395 芯片自带10/100M以太网介质传输层(MAC)和物理层(PHY),完全兼容IEEE802.310/100M 协议,内置了PPPOE、IP、DHCP、ARP、ICMP、IGMP、UDP、TCP 等以太网协议栈固件。
综上所述,POWERLINK协议栈源码对单片机的要求并不高,一般的单片机都能满足,无论单片机mcu上是否具备MAC接口。协议栈源码也不是很大,不过当然mcu性能越高越好了。
此外对单片机的要求是最好具备嵌入式操作系统如Rtx,rtthread,freeRTOS或ucosII等多任务系统,这样才更容易移植和使用。嵌入式系统最好具备软件定时器功能,方便实现用户层的定时器功能。
还有需要注意,如果单片机是使用的三方库提供的接口操作以太网模块,需要确认下接口是否具备直接操作发送mac帧的能力。因为powerlink的链路层可没有走tcp/ip协议栈,直接操作的mac报文帧。
mac帧模式介绍
可以使用wireshark工具抓包,看看发送的mac帧报文是不是正确的。以下举例一包arp协议请求包的完整mac帧格式如下:
//以太网首部(14Byte)
0000: ff ff ff ff ff ff //目的主机为广播地址
0006: 84 c2 e4 f0 08 ef //源主机MAC地址为84-C2-E4-F0-08-EF
000c: 08 06 //上层协议类型0x0806表示ARP或RARP
//ARP请求(28Byte)
000e: 00 01 //硬件类型0x0001表示以太网
0010: 08 00 //协议类型0x0800表示IP协议
0012: 06 04 //MAC地址长度为6; IP地址长度为4
0014: 00 01 // op为0x0001表示请求目的主机的MAC地址
0016: 84 c2 e4 f0 08 ef //源主机MAC地址为00-1C-23-17-4A-CB
001c: c0 a8 01 65 //源主机IP地址(192.168.1.101)
0020: 00 00 00 00 00 00 //目的主机MAC地址未知,全0待填写
0026: c0 a8 01 67 //目的主机的IP地址(192.168.1.103)
//填充数据(18Byte)
002c: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
003c: 00 00
原文链接:https://blog.csdn.net/yyz_1987/article/details/130648388
移植完成,欢迎交流
|