當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于μC/OS-Ⅱ的嵌入式以太網(wǎng)通信的設(shè)計(jì)與實(shí)現(xiàn)

uC/OS-Ⅱ是一個(gè)源碼開(kāi)放的搶占式實(shí)時(shí)操作系統(tǒng)。它內(nèi)核短小精悍、可裁減、執(zhí)行時(shí)間確定。系統(tǒng)大部分代碼采用C語(yǔ)言編寫,與硬件有關(guān)的部分都集中在兩個(gè)文件中,給出了規(guī)范的接口說(shuō)明,移植相當(dāng)方便,可應(yīng)用于目前大多數(shù)型號(hào)的8位、16位、32位CPU。

uC/OS-Ⅱ提供的僅僅只是一個(gè)實(shí)時(shí)的調(diào)度及任務(wù)間通信的內(nèi)核,沒(méi)有集成網(wǎng)絡(luò)協(xié)議。上網(wǎng)是當(dāng)前嵌入式設(shè)備的廣泛需求,本文討論輕型TCP/IP協(xié)議棧的引入以及相關(guān)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序,實(shí)現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)功能。

本文所用的硬件系統(tǒng)結(jié)構(gòu)如圖1所示。開(kāi)發(fā)板基于TMS320LF2407A的含DSP核微處理器和LAN91C111以太網(wǎng)控制器。在成功移植了μCOS-Ⅱ的基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)了以太網(wǎng)通訊功能。下面重點(diǎn)介紹TCP/IP協(xié)議棧的引入和LAN91C111驅(qū)動(dòng)的編寫。

 

 

圖1 嵌入式以太網(wǎng)硬件系統(tǒng)結(jié)構(gòu)圖

TCP/IP網(wǎng)絡(luò)協(xié)議棧的引入

在μCOS-Ⅱ上引入下TCP/IP協(xié)議棧,由于嵌入式系統(tǒng)的硬件資源有限,必須使用小型協(xié)議棧。這種協(xié)議棧很多,LwIP是其中之一。

關(guān)于LwIP簡(jiǎn)介

LwIP是瑞士計(jì)算機(jī)科學(xué)院(SCICS)的Adam Dunkels等開(kāi)發(fā)的一套用于嵌入式系統(tǒng)的開(kāi)放源碼的輕型TCP/IP協(xié)議棧,但Lwip實(shí)現(xiàn)了較為完備的IP,ICMP, UDP, TCP協(xié)議,具有超時(shí)時(shí)間估計(jì)、快速恢復(fù)和重發(fā)、窗口調(diào)整等功能。IwIP在保持協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM和ROM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運(yùn)行,很適合同μCOS-Ⅱ相配合用在嵌入式系統(tǒng)中。LwIP在設(shè)計(jì)時(shí)就考慮到了將來(lái)的移植問(wèn)題,它把所有與硬件、操作系統(tǒng)、編譯器相關(guān)的部分獨(dú)立出來(lái),放在/src/arch目錄下,因此LwIP在μCOS-Ⅱ上的實(shí)現(xiàn)就是修改這個(gè)目錄下的文件,其它的文件一般不需要修改。下面分別予以說(shuō)明:

協(xié)議棧的實(shí)現(xiàn)

·與CPU及編譯器相關(guān)的include文件 /src/arch/include/arch目錄下cc.h、cpu.h、perf.h中有一些與CPU或編譯器相關(guān)的定義,如數(shù)據(jù)長(zhǎng)度,字的高低位順序等。這應(yīng)該與用戶實(shí)現(xiàn)μCOS-Ⅱ時(shí)定義的數(shù)據(jù)長(zhǎng)度等參數(shù)一致。

·與操作系統(tǒng)相關(guān)部分 sys_arch.c中的內(nèi)容是與操作系統(tǒng)相關(guān)的一些結(jié)構(gòu)和函數(shù),主要分四個(gè)部分: (1)sys_sem_t信號(hào)量LwIP中需用信號(hào)量通信,所以在sys_arch中應(yīng)實(shí)現(xiàn)信號(hào)量結(jié)構(gòu)體和處理函數(shù):struct sys_sem_t{ sys_sem_new( )/創(chuàng)建一個(gè)信號(hào)量結(jié)構(gòu) sys_sem_free()/釋放一個(gè)信號(hào)量結(jié)構(gòu)sys_sem_signal( )/發(fā)送信號(hào)量 sys_arch_sem_wait( )/請(qǐng)求信號(hào)量}由于μCOS-Ⅱ已經(jīng)實(shí)現(xiàn)了信號(hào)量OS_EVENT的各種操作,并且功能和LwlP上面幾個(gè)函數(shù)的目的功能是完全一樣的,所以只要把μCOS-Ⅱ的函數(shù)重新包裝成上面的函數(shù),就可以直接使用了。

(2 )sys_mbox_t消息

LwIP使用消息隊(duì)列來(lái)緩沖、傳遞數(shù)據(jù)報(bào)文,因此要在sys_arch中實(shí)現(xiàn)消息隊(duì)列結(jié)構(gòu)sys_mbox_t,以及相應(yīng)的操作函數(shù)。

sys_mbox_new()/創(chuàng)建一個(gè)消息隊(duì)列 sys_mbox_free( ) /釋放一個(gè)消息隊(duì)列

sys_mbox_post( )/向消息隊(duì)列發(fā)送消息

sys_arch_mbox_fetch( )/從消息隊(duì)列中獲取消息

μCOS-Ⅱ同樣實(shí)現(xiàn)了消息隊(duì)列結(jié)構(gòu)及其操作,但是μCOS-Ⅱ沒(méi)有對(duì)消息隊(duì)列中的消息進(jìn)行管理,因此不能直接使用,必須在μCOS-Ⅱ的基礎(chǔ)上重新實(shí)現(xiàn)。

(3)sys_arch_timeout函數(shù)

LwIP中每個(gè)與外界網(wǎng)絡(luò)連接的線程都有自己的timeout屬性,即等待超時(shí)時(shí)間。這個(gè)屬性表現(xiàn)為每個(gè)線程都對(duì)應(yīng)一個(gè)sys_timeout結(jié)構(gòu)體隊(duì)列,包括這個(gè)線程的timeout時(shí)間長(zhǎng)度

,以及超時(shí)后應(yīng)調(diào)用的timeout函數(shù),該函數(shù)會(huì)做一些釋放連接,回收資源的工作.timeout結(jié)構(gòu)體已經(jīng)由LwIP自己在sys.h中定義好了,而且對(duì)結(jié)構(gòu)體隊(duì)列的數(shù)據(jù)操作也由LwIP負(fù)責(zé),我們所要實(shí)現(xiàn)的是如下函數(shù):

struct sys_timeouts*sys_arch_timeouts(void)

這個(gè)函數(shù)的功能是返回目前正處于運(yùn)行態(tài)的線程所對(duì)應(yīng)的timeout隊(duì)列指針。timeout隊(duì)列屬于線程的屬性,它是OS相關(guān)的函數(shù),只能由用戶實(shí)現(xiàn)。

(4)sys_thread_new創(chuàng)建新線程

LwIP可以是單線程運(yùn)行,也可以多線程運(yùn)行。為提高效率并降低編程復(fù)雜度,就需要用戶實(shí)現(xiàn)創(chuàng)建新線程的函數(shù):

void sys_thread_new(void(*thread)(void*arg), void*arg);

在μCOS-Ⅱ中,沒(méi)有線程(thread)的概念,只有任務(wù)(Task)。它已經(jīng)提供了創(chuàng)建新任務(wù)的系統(tǒng)API調(diào)用OSTaskCreate,因此只要把OSTaskCreate封裝一下,就可以實(shí)現(xiàn)sys_hread_new.

·lib_ arch中庫(kù)函數(shù)的實(shí)現(xiàn)

LwIP協(xié)議棧中用到了8個(gè)外部函數(shù),這些函數(shù)通常與用戶使用的系統(tǒng)或編譯器有關(guān),因此留給用戶自己實(shí)現(xiàn),有關(guān)程序如下:

u16_t htons(u16_t n); /16位數(shù)據(jù)高低字節(jié)交換

u16_t ntohs(u16_t n);

int strlen(const char * str);/返回字符串長(zhǎng)度

int strncmp(const char * strl,const char * str2,int len);/字符串比較

void bcopy(const void * src, void * dest, int len);/內(nèi)存數(shù)據(jù)塊之間的互相拷貝

void bzero(void *data, int n); /內(nèi)存中指定長(zhǎng)度的數(shù)據(jù)塊清零

類似于操作系統(tǒng)在硬件上的移植,LwIP的移植也是根據(jù)實(shí)現(xiàn)的硬件以及操作系統(tǒng)對(duì)象,對(duì)相應(yīng)的文件進(jìn)行修改。整個(gè)通訊協(xié)議的引入可以很快實(shí)現(xiàn)。

LAN91C111驅(qū)動(dòng)的實(shí)現(xiàn)

在上面為μCOS-Ⅱ引入了TCP/IP協(xié)議棧之后,為了實(shí)現(xiàn)以太網(wǎng)通信功能還必須完成相關(guān)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的添加。LwIP的網(wǎng)絡(luò)驅(qū)動(dòng)有一定的模板,其中src/netif/ethernetif.c文件即為驅(qū)動(dòng)的模板,用戶為自己的網(wǎng)絡(luò)設(shè)備實(shí)現(xiàn)驅(qū)動(dòng)時(shí)應(yīng)參照這個(gè)模板,根據(jù)相應(yīng)的網(wǎng)絡(luò)芯片來(lái)實(shí)現(xiàn)。本系統(tǒng)選用的網(wǎng)絡(luò)芯片是由SMSC公司生產(chǎn)的自適應(yīng)10M/100M第三代快速以太網(wǎng)控制器芯片LAN91C111,集成了SMSC/CD協(xié)議的MAC(媒體層)和PHY(物理層)。由于其靈活性和集成度高,具有較高的性價(jià)比。

LAN91C111工作流程比較簡(jiǎn)單,驅(qū)動(dòng)程序?qū)⒁l(fā)送的數(shù)據(jù)包按指定格式寫入芯片并啟動(dòng)發(fā)送命令,LAN91C111會(huì)自動(dòng)把數(shù)據(jù)包轉(zhuǎn)換成物理幀格式在物理信道上傳輸;反之芯片收到物理信號(hào)后自動(dòng)將其還原成數(shù)據(jù),并按指定格式存放在芯片RAM中以便主機(jī)程序取用。簡(jiǎn)言之就是LAN91C111完成數(shù)據(jù)包和電信號(hào)之間的相

互轉(zhuǎn)換: 數(shù)據(jù)包 電信號(hào)。LAN91C111的編程主要包括:初始化、發(fā)送數(shù)據(jù)包、接收數(shù)據(jù)包三部分。

初始化

上電后,LAN91C111內(nèi)部的寄存器的值設(shè)置為缺省值,CPU根據(jù)需要設(shè)置它里面的Configuration, Base和Individual Address寄存器,以保證它正確工作。發(fā)送數(shù)據(jù)包流程

(1) DSP向控制器發(fā)送ALLOCATE MEMORY命令(設(shè)置MMUCOM寄存器,通常設(shè)置0x0020)。MMU為待發(fā)送包在控制器內(nèi)部的packet buffer中分配存儲(chǔ)空間。

(2) DSP查詢中斷狀態(tài)寄存器中的ALLOC INT位,直到該位被置成1,也可以設(shè)置Interrupt Mask中的ALLOC INT位,然后等待硬件中斷,這時(shí)MMU已經(jīng)分配好存儲(chǔ)空間。而且TX packet number放在Allocation Result寄存器中。

(3)將Allocation Result寄存器中的packet number拷貝到Packet Number:寄存器中,設(shè)置Pointer寄存器(設(shè)置為TX,WR,AUTOINC,即0x4000)。然后將包的數(shù)據(jù)從upper layer發(fā)送隊(duì)列傳送到控制器的數(shù)據(jù)寄存器中。要求依次寫人Status Word, Byte Count, destination address,source address,packet size,packet data,control word。

(4) DSP向控制器發(fā)送"ENQUEUE PACKET NUMBER TO TX FIFO“命令(設(shè)置MMUCOM寄存器,通常設(shè)置Ox00C0),這個(gè)命令將Packet Number寄存器中的packetnumber拷貝到TX FIFO,說(shuō)明發(fā)送的包已經(jīng)放入隊(duì)列中。同時(shí)設(shè)置Transmit control寄存器中的TXENA位,啟動(dòng)transmitter。到目前為止,DSP的設(shè)置工作完成,它可以IDLE,直到接收到一個(gè)控制器產(chǎn)生的發(fā)送中斷。

(5)當(dāng)控制器傳送完包以后,memory中的第一個(gè)字(16bit)被CSMA/CD寫入相應(yīng)的Status Word,然后將TX FIFO中的packet number移到TX completion FIFO,當(dāng)TX completion FIFO不為空時(shí)產(chǎn)生中斷。

(6) DSP接收到中斷后,開(kāi)始執(zhí)行中斷處理程序,它讀入中斷狀態(tài)寄存器,如果產(chǎn)生發(fā)送中斷,則從FIFO ports寄存器讀入發(fā)送的包的Packet Number,并將它寫到Packet Number寄存器。然后從內(nèi)存中讀人狀態(tài)字(包括設(shè)置Pointer寄存器為TX,RD,AUTOINC,即0x6000,然后從數(shù)據(jù)寄存器中讀入包的狀態(tài)字),它是EPH寄存器的鏡像,根據(jù)狀態(tài)字判斷包發(fā)送是否成功。如果成功則DSP向控制器發(fā)布RELEASE命令(設(shè)置MMUCOM寄存器,設(shè)置為Ox00A0),控制器將釋放發(fā)送包所使用的存儲(chǔ)空間,同時(shí)設(shè)置TX INT Acknowledge寄存器,它將TX completion FIFO中的packet number清除。

(7)使用“每發(fā)送一個(gè)序列的包產(chǎn)生一個(gè)中斷”方案:允許TX EMPTY INT和TX INT, AUTORELEASE="1",當(dāng)發(fā)送完FIFO中的最后一個(gè)包后,產(chǎn)生TX EMPTY INT中斷。當(dāng)發(fā)生嚴(yán)重的發(fā)送錯(cuò)誤時(shí),產(chǎn)生TX INT中斷,同時(shí)將發(fā)送失敗的包的packet number保存到FIFO Ports寄存器,這樣DSP就可以知道發(fā)送過(guò)程停止了。這種方案可以減少DSP的負(fù)擔(dān),而且存儲(chǔ)空間的釋放也更迅速。接收數(shù)據(jù)包流程

(1) DSP設(shè)置receive control寄存器中的RXEN位,允許接收包。

(2)含有正確地址的包被接收到,從MMU請(qǐng)求存儲(chǔ)空間,并分派一個(gè)packet number,內(nèi)部的DMA邏輯產(chǎn)生連續(xù)的地址,并將接收到的字寫到memory中,如果超界,包被丟棄,存儲(chǔ)空間被釋放。當(dāng)檢測(cè)到包的結(jié)束,狀態(tài)字被寫到接收包的最前面,byte count寫到第二個(gè)字。如果CRC校驗(yàn)正確,packet number被寫到RX FIFO,由于RX FIFO非空,產(chǎn)生RCV INT中斷;如果CRC校驗(yàn)不正確,存儲(chǔ)空間被釋放,而且不產(chǎn)生中斷。

(3) DSP接收到中斷后開(kāi)始執(zhí)行中斷處理程序,它讀入中斷狀態(tài)寄存器,如果產(chǎn)生接收中斷(RCV INT位為1),則可以從FIFO ports寄存器得到接收的包的packet number,而且可以從數(shù)據(jù)寄存器將接收包傳送到DSP的內(nèi)存或外存中。當(dāng)處理結(jié)束,DSP向處理器發(fā)布REMOVE AND RELEASE FROM TOP OF RX命令(即設(shè)置寄存器MMUCOM,即0x0060),釋放使用的存儲(chǔ)空間和packet number.

軟件的調(diào)試與驗(yàn)證

調(diào)試環(huán)境包括我們做的TMS320LF2407A+LAN91C111板、PC機(jī)、仿真器、網(wǎng)線等。首先,新建工程,脫離操作系統(tǒng)和TCP/IP協(xié)議的環(huán)境下,單獨(dú)調(diào)試通過(guò)LAN91C111的驅(qū)動(dòng)程序,初始化,接收發(fā)送數(shù)據(jù)成功之后,另建工程集合μCOS-Ⅱ和LwIP結(jié)合驅(qū)動(dòng)程序進(jìn)行調(diào)試,在μCOS-Ⅱ中初始化LwlP,并創(chuàng)建TCP或UDP任務(wù)進(jìn)行測(cè)試了。值得注意的是LwIP的初始化必須在μCOS-Ⅱ完全啟動(dòng)之后也就是在任務(wù)中進(jìn)行,因?yàn)樗某跏蓟玫搅诵盘?hào)量等OS相關(guān)的操作。關(guān)鍵部份的代碼和說(shuō)明如下:

main(){OSlnit();OSTaskCreate(Iwip_init_task, Null, &Iwip-init-stk[TASK_STK_SIZE-1 ], 0);OSStart();}

主程序中創(chuàng)建了初始化LwIP任務(wù)Lwip_init_task(優(yōu)先級(jí)0). Iwip_init_task任務(wù)中初始化硬件時(shí)鐘和LwIP,還創(chuàng)建了tcpip_thread(優(yōu)先級(jí)5)和tcpecho_thread(優(yōu)先級(jí)6)兩個(gè)任務(wù)。實(shí)際上tcpip_thread才是LwIP的主線程,多線程的Berkley API也是基于這個(gè)線程實(shí)現(xiàn)的,即上面的tcpecho_thread線程也要依靠tcpip_thread線程來(lái)與外界通信,這樣做的好處是編程簡(jiǎn)單,結(jié)構(gòu)清晰。

編譯運(yùn)行后,用ping IP地址命令可以得到ICMP reply響應(yīng)。用telnet IP地址命令可以看到echo server的回顯效果。說(shuō)明ARP,ICMP,IP、下CP協(xié)議都已正確運(yùn)行,調(diào)試通過(guò)。

結(jié)語(yǔ)

按課題的需求,這套系統(tǒng)用于電力保護(hù)系統(tǒng)的現(xiàn)場(chǎng)板卡的管理與和上下位機(jī)的通訊,現(xiàn)場(chǎng)采集的數(shù)據(jù)經(jīng)處理后,通過(guò)數(shù)據(jù)線路連接到該板(本文所討論的系統(tǒng))。由該DSP板集中進(jìn)行管理并實(shí)現(xiàn)和上位機(jī)的通訊。該系統(tǒng)目前效果令人滿意,并且可以根據(jù)課題的需要,靈活地進(jìn)行擴(kuò)展。還可用于智能家電等領(lǐng)域,具有很好的發(fā)展前景。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉