|
最近著了powerlink的道,連續(xù)幾晚十二點前沒睡過覺。不得不說興趣這東西勁太大了,讓人睡不著。喜歡上研究POWERLINK,最新版的源碼結(jié)構(gòu)挺清晰的,移植并測試了嵌入式linux作為從站和電腦主站之間的通信,挺有趣的。接下來想嘗試下在單片機上的移植,降低POWERLINK協(xié)議的使用門檻,讓POWERLINK協(xié)議可以用的更廣泛,算是件有意義的事。
以下分享下openPOWERLINK最新源碼v2.7.2在單片機上的移植思路。
使用倒推法(由編譯結(jié)果去推導(dǎo)需要依賴的代碼文件),能夠直觀的看到平臺差異性相關(guān)的文件。因此移植也很簡單,照著以下指南來,肯定沒問題。
openPOWERLINK最新源碼地址:openPOWERLINK :: openPOWERLINK
powerlink不錯的協(xié)議,但大都去卷ethercat了。我想powerlink這么好的協(xié)議真沒啥難的,了解后會覺得比485總線還好用。之前就難資料太少,沒人去研究推動和分享,我想趁我興致正濃就多輸出幾篇分享給大家。
前提條件
openPOWERLINK源碼要想成功運行在單片機上,需要一定的前提條件。最起碼單片機板子上得有以太網(wǎng)功能吧。至于是否得有tcp/ip協(xié)議棧才能運行powerlink? 這個是非必要的,也就是說即便單片機板子上只有MCU+MAC+PHY芯片,沒有移植lwip協(xié)議棧也是可以的。
如果是單片機mcu內(nèi)核涵蓋MAC鏈路層功能,則直接外接一顆PHY芯片即可。這需要單片機具備mac接口,一般像stm32F4系列以上的稍微高端點的單片機才具有mac功能。
媒體訪問控制(MAC,Media Access Control),又稱作介質(zhì)訪問控制,簡稱MAC,是局域網(wǎng)中數(shù)據(jù)鏈路層的下層部分,提供地址及媒體訪問的控制方式,使得不同設(shè)備或網(wǎng)絡(luò)上的節(jié)點可以在多點的網(wǎng)絡(luò)上通信,而不會互相沖突,上述的特性在局域網(wǎng)中格外重要。早期網(wǎng)絡(luò)發(fā)展時以MAC判別各個網(wǎng)絡(luò)接口的位置,但后來互聯(lián)網(wǎng)發(fā)展后,才有IP的制定與使用。若只是兩臺設(shè)備之間全雙工的通信,因為兩臺設(shè)備可以同時發(fā)送及接收數(shù)據(jù),不會沖突,因此不需要用到MAC協(xié)議。
媒體訪問控制MAC子層負(fù)責(zé)解決與媒體接入有關(guān)的問題,在物理層的基礎(chǔ)上進(jìn)行無差錯的通信。
MAC子層是網(wǎng)絡(luò)與設(shè)備的接口,它從網(wǎng)絡(luò)層接收數(shù)據(jù)幀,然后通過媒體訪問規(guī)則和物理層將數(shù)據(jù)幀發(fā)送到物理鏈路上。它也從物理層接收數(shù)據(jù)幀,再送到網(wǎng)絡(luò)層。總的來說,MAC有三大功能:
1.決定節(jié)點何時發(fā)送數(shù)據(jù)包。
2.將數(shù)據(jù)幀發(fā)送到物理層,然后發(fā)送到物理鏈路。
3.從物理層接收數(shù)據(jù)幀,然后送給網(wǎng)絡(luò)層處理。
其中最重要的是第一點:決定節(jié)點何時發(fā)送數(shù)據(jù)包。對于每一種媒體訪問控制技術(shù),用來控制節(jié)點發(fā)送時機的規(guī)則叫做媒體訪問規(guī)則。局域網(wǎng)上的節(jié)點不能想要發(fā)送數(shù)據(jù)就發(fā)送,節(jié)點只能在輪到它的時候才發(fā)送。
僅有STM32自帶的MAC還不能做網(wǎng)絡(luò)通信,還需要外接以太網(wǎng)PHY芯片才可以,如同RS485通信一樣,僅有一個串口是不行的,還需要外接RS485的PHY芯片。
PHY(Port Physical Layer),可稱之為端口物理層,是一個對OSI模型物理層的簡稱。現(xiàn)在常用于STM32的有DP83848,LAN8270,DM9161/9162等。這些PHY芯片都大同小異,基本寄存器都是一樣的,只有擴(kuò)展寄存和廠商專門設(shè)置的寄存器不同。如果用戶將其中一個PHY驅(qū)動成功了,驅(qū)動另一個也是非常方便的。
如果低端點兒單片機沒MAC功能呢?如何外接以太網(wǎng)芯片?辦法也是有的,現(xiàn)在有的廠商提供集成的模塊兒,自帶MAC和PHY芯片的功能,對外通過SPI接口操作訪問。如常用的芯片w5500芯片,就是一顆集成了MAC和PHY功能的芯片,通過SPI接口可以訪問和使用。SPI接口幾乎高低端的單片機都有的常見接口。W5500 芯片是一款集成全硬件 TCP/IP 協(xié)議棧的嵌入式以太網(wǎng)控制器,同時也是一顆工業(yè)級以太網(wǎng)控制芯片。是韓國WIZnet(微知納特)發(fā)布全硬件TCP/IP協(xié)議棧以太網(wǎng)接口芯片。W5500 支持高速標(biāo)準(zhǔn)4線SPI接口與主機進(jìn)行通信,該 SPI 速率理論上可以達(dá)到 80MHz。或者CH395芯片,也是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é)議棧源碼對單片機的要求并不高,一般的單片機都能滿足,無論單片機mcu上是否具備MAC接口。協(xié)議棧源碼也不是很大,不過當(dāng)然mcu性能越高越好了。
此外對單片機的要求是最好具備嵌入式操作系統(tǒng)如Rtx,rtthread,freeRTOS或ucosII等多任務(wù)系統(tǒng),這樣才更容易移植和使用。嵌入式系統(tǒng)最好具備軟件定時器功能,方便實現(xiàn)用戶層的定時器功能。
還有需要注意,如果單片機是使用的三方庫提供的接口操作以太網(wǎng)模塊,需要確認(rèn)下接口是否具備直接操作發(fā)送mac幀的能力。因為powerlink的鏈路層可沒有走tcp/ip協(xié)議棧,直接操作的mac報文幀。
mac幀模式介紹
可以使用wireshark工具抓包,看看發(fā)送的mac幀報文是不是正確的。以下舉例一包arp協(xié)議請求包的完整mac幀格式如下:
//以太網(wǎng)首部(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 //上層協(xié)議類型0x0806表示ARP或RARP
//ARP請求(28Byte)
000e: 00 01 //硬件類型0x0001表示以太網(wǎng)
0010: 08 00 //協(xié)議類型0x0800表示IP協(xié)議
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)
//填充數(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
移植完成,歡迎交流
|
|