找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1922|回復(fù): 0
收起左側(cè)

POWERLINK協(xié)議源碼(最新)在stm32單片機(jī)上的移植指南

[復(fù)制鏈接]
ID:1077574 發(fā)表于 2023-5-15 11:37 | 顯示全部樓層 |閱讀模式
最近著了powerlink的道,連續(xù)幾晚十二點(diǎn)前沒睡過覺。不得不說興趣這東西勁太大了,讓人睡不著。喜歡上研究POWERLINK,最新版的源碼結(jié)構(gòu)挺清晰的,移植并測(cè)試了嵌入式linux作為從站和電腦主站之間的通信,挺有趣的。接下來想嘗試下在單片機(jī)上的移植,降低POWERLINK協(xié)議的使用門檻,讓POWERLINK協(xié)議可以用的更廣泛,算是件有意義的事。

以下分享下openPOWERLINK最新源碼v2.7.2在單片機(jī)上的移植思路。

使用倒推法(由編譯結(jié)果去推導(dǎo)需要依賴的代碼文件),能夠直觀的看到平臺(tái)差異性相關(guān)的文件。因此移植也很簡(jiǎn)單,照著以下指南來,肯定沒問題。

openPOWERLINK最新源碼地址:openPOWERLINK :: openPOWERLINK

powerlink不錯(cuò)的協(xié)議,但大都去卷ethercat了。我想powerlink這么好的協(xié)議真沒啥難的,了解后會(huì)覺得比485總線還好用。之前就難資料太少,沒人去研究推動(dòng)和分享,我想趁我興致正濃就多輸出幾篇分享給大家。


前提條件
openPOWERLINK源碼要想成功運(yùn)行在單片機(jī)上,需要一定的前提條件。最起碼單片機(jī)板子上得有以太網(wǎng)功能吧。至于是否得有tcp/ip協(xié)議棧才能運(yùn)行powerlink? 這個(gè)是非必要的,也就是說即便單片機(jī)板子上只有MCU+MAC+PHY芯片,沒有移植lwip協(xié)議棧也是可以的。

如果是單片機(jī)mcu內(nèi)核涵蓋MAC鏈路層功能,則直接外接一顆PHY芯片即可。這需要單片機(jī)具備mac接口,一般像stm32F4系列以上的稍微高端點(diǎn)的單片機(jī)才具有mac功能。

媒體訪問控制(MAC,Media Access Control),又稱作介質(zhì)訪問控制,簡(jiǎn)稱MAC,是局域網(wǎng)中數(shù)據(jù)鏈路層的下層部分,提供地址及媒體訪問的控制方式,使得不同設(shè)備或網(wǎng)絡(luò)上的節(jié)點(diǎn)可以在多點(diǎn)的網(wǎng)絡(luò)上通信,而不會(huì)互相沖突,上述的特性在局域網(wǎng)中格外重要。早期網(wǎng)絡(luò)發(fā)展時(shí)以MAC判別各個(gè)網(wǎng)絡(luò)接口的位置,但后來互聯(lián)網(wǎng)發(fā)展后,才有IP的制定與使用。若只是兩臺(tái)設(shè)備之間全雙工的通信,因?yàn)閮膳_(tái)設(shè)備可以同時(shí)發(fā)送及接收數(shù)據(jù),不會(huì)沖突,因此不需要用到MAC協(xié)議。

媒體訪問控制MAC子層負(fù)責(zé)解決與媒體接入有關(guān)的問題,在物理層的基礎(chǔ)上進(jìn)行無差錯(cuò)的通信。

MAC子層是網(wǎng)絡(luò)與設(shè)備的接口,它從網(wǎng)絡(luò)層接收數(shù)據(jù)幀,然后通過媒體訪問規(guī)則和物理層將數(shù)據(jù)幀發(fā)送到物理鏈路上。它也從物理層接收數(shù)據(jù)幀,再送到網(wǎng)絡(luò)層?偟膩碚f,MAC有三大功能:

1.決定節(jié)點(diǎn)何時(shí)發(fā)送數(shù)據(jù)包。
2.將數(shù)據(jù)幀發(fā)送到物理層,然后發(fā)送到物理鏈路。
3.從物理層接收數(shù)據(jù)幀,然后送給網(wǎng)絡(luò)層處理。
其中最重要的是第一點(diǎn):決定節(jié)點(diǎn)何時(shí)發(fā)送數(shù)據(jù)包。對(duì)于每一種媒體訪問控制技術(shù),用來控制節(jié)點(diǎn)發(fā)送時(shí)機(jī)的規(guī)則叫做媒體訪問規(guī)則。局域網(wǎng)上的節(jié)點(diǎn)不能想要發(fā)送數(shù)據(jù)就發(fā)送,節(jié)點(diǎn)只能在輪到它的時(shí)候才發(fā)送。

僅有STM32自帶的MAC還不能做網(wǎng)絡(luò)通信,還需要外接以太網(wǎng)PHY芯片才可以,如同RS485通信一樣,僅有一個(gè)串口是不行的,還需要外接RS485的PHY芯片。

PHY(Port Physical Layer),可稱之為端口物理層,是一個(gè)對(duì)OSI模型物理層的簡(jiǎn)稱,F(xiàn)在常用于STM32的有DP83848,LAN8270,DM9161/9162等。這些PHY芯片都大同小異,基本寄存器都是一樣的,只有擴(kuò)展寄存和廠商專門設(shè)置的寄存器不同。如果用戶將其中一個(gè)PHY驅(qū)動(dòng)成功了,驅(qū)動(dòng)另一個(gè)也是非常方便的。

如果低端點(diǎn)兒?jiǎn)纹瑱C(jī)沒MAC功能呢?如何外接以太網(wǎng)芯片?辦法也是有的,現(xiàn)在有的廠商提供集成的模塊兒,自帶MAC和PHY芯片的功能,對(duì)外通過SPI接口操作訪問。如常用的芯片w5500芯片,就是一顆集成了MAC和PHY功能的芯片,通過SPI接口可以訪問和使用。SPI接口幾乎高低端的單片機(jī)都有的常見接口。W5500 芯片是一款集成全硬件 TCP/IP 協(xié)議棧的嵌入式以太網(wǎng)控制器,同時(shí)也是一顆工業(yè)級(jí)以太網(wǎng)控制芯片。是韓國(guó)WIZnet(微知納特)發(fā)布全硬件TCP/IP協(xié)議棧以太網(wǎng)接口芯片。W5500 支持高速標(biāo)準(zhǔn)4線SPI接口與主機(jī)進(jìn)行通信,該 SPI 速率理論上可以達(dá)到 80MHz;蛘逤H395芯片,也是SPI接口連接MCU,它是沁恒公司的一款以太網(wǎng)協(xié)議棧管理芯片。CH395 芯片自帶10/100M以太網(wǎng)介質(zhì)傳輸層(MAC)和物理層(PHY),完全兼容IEEE802.310/100M 協(xié)議,內(nèi)置了PPPOE、IP、DHCP、ARP、ICMP、IGMP、UDP、TCP 等以太網(wǎng)協(xié)議棧固件。


綜上所述,POWERLINK協(xié)議棧源碼對(duì)單片機(jī)的要求并不高,一般的單片機(jī)都能滿足,無論單片機(jī)mcu上是否具備MAC接口。協(xié)議棧源碼也不是很大,不過當(dāng)然mcu性能越高越好了。

此外對(duì)單片機(jī)的要求是最好具備嵌入式操作系統(tǒng)如Rtx,rtthread,freeRTOS或ucosII等多任務(wù)系統(tǒng),這樣才更容易移植和使用。嵌入式系統(tǒng)最好具備軟件定時(shí)器功能,方便實(shí)現(xiàn)用戶層的定時(shí)器功能。

還有需要注意,如果單片機(jī)是使用的三方庫提供的接口操作以太網(wǎng)模塊,需要確認(rèn)下接口是否具備直接操作發(fā)送mac幀的能力。因?yàn)閜owerlink的鏈路層可沒有走tcp/ip協(xié)議棧,直接操作的mac報(bào)文幀。

mac幀模式介紹

可以使用wireshark工具抓包,看看發(fā)送的mac幀報(bào)文是不是正確的。以下舉例一包arp協(xié)議請(qǐng)求包的完整mac幀格式如下:

//以太網(wǎng)首部(14Byte)

0000: ff ff ff ff ff ff                                 //目的主機(jī)為廣播地址

0006: 84 c2 e4 f0 08 ef                      //源主機(jī)MAC地址為84-C2-E4-F0-08-EF

000c: 08 06                                            //上層協(xié)議類型0x0806表示ARP或RARP

//ARP請(qǐng)求(28Byte)

000e: 00 01                                           //硬件類型0x0001表示以太網(wǎng)

0010: 08 00                                           //協(xié)議類型0x0800表示IP協(xié)議

0012: 06 04                                           //MAC地址長(zhǎng)度為6; IP地址長(zhǎng)度為4

0014: 00 01                                           // op為0x0001表示請(qǐng)求目的主機(jī)的MAC地址

0016: 84 c2 e4 f0 08 ef                      //源主機(jī)MAC地址為00-1C-23-17-4A-CB

001c: c0 a8 01 65                                 //源主機(jī)IP地址(192.168.1.101)

0020: 00 00 00 00 00 00                   //目的主機(jī)MAC地址未知,全0待填寫

0026: c0 a8 01 67                                 //目的主機(jī)的IP地址(192.168.1.103)

//填充數(shù)據(jù)(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
移植完成,歡迎交流
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表