最近著了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
移植完成,歡迎交流
|