基于單片機(jī)的嵌入式系統(tǒng)網(wǎng)絡(luò)接入方案
掃描二維碼
隨時隨地手機(jī)看文章
引言 在網(wǎng)絡(luò)技術(shù)應(yīng)用日益廣泛的今天,網(wǎng)絡(luò)傳輸是最經(jīng)濟(jì)有效的數(shù)據(jù)傳輸方式。如何利用廉價的51單片機(jī)來控制網(wǎng)卡芯片進(jìn)行數(shù)據(jù)傳輸,加載tcp/ip協(xié)議連接到互聯(lián)網(wǎng),實(shí)現(xiàn)網(wǎng)絡(luò)通信成了眾多設(shè)計(jì)者的目標(biāo)。但由于指令及資源的限制,實(shí)施過程會有許多困難。我們在設(shè)計(jì)方案中舍棄了耗費(fèi)資源的高級協(xié)議,采用發(fā)送小數(shù)據(jù)包的方式以避免分段,來簡化tcp協(xié)議和udp協(xié)議,實(shí)現(xiàn)互聯(lián)接入。 硬件設(shè)計(jì)與實(shí)現(xiàn) 系統(tǒng)的硬件結(jié)構(gòu)框圖如圖1所示。本系統(tǒng)的微控制器是winbond公司的78e58,網(wǎng)絡(luò)接口芯片是與ne2000系列兼容的realtek公司的rtl8019as。rtl8019as內(nèi)置了10base-t收發(fā)器,外接一個隔離lpf濾波器,經(jīng)rj-45接口輸出。外部ram是62256,24c02是i2c總線的 eeprom。 圖1 嵌入式協(xié)議轉(zhuǎn)換硬件框圖 系統(tǒng)的軟件設(shè)計(jì)與實(shí)現(xiàn) 為適應(yīng)上網(wǎng)的需求,系統(tǒng)軟件設(shè)計(jì)主要包括兩部分內(nèi)容:一是要執(zhí)行對rtl8019as等的控制功能,二是要執(zhí)行與連接internet相關(guān)的功能,實(shí)現(xiàn)tcp/ip協(xié)議。本文著重介紹第二部分,主程序采用c51語言編寫。 rtl8019as初始化 要將嵌入式系統(tǒng)接入以太網(wǎng),首先要設(shè)置rtl8019as的工作方式和工作狀態(tài),分配收發(fā)數(shù)據(jù)的緩沖區(qū),通過對地址及數(shù)據(jù)口的讀寫來完成以太網(wǎng)幀的接收與發(fā)送。然后設(shè)置rtl8019as的工作參數(shù),亦即設(shè)置內(nèi)部控制寄存器。對rtl8019as的工作參數(shù)進(jìn)行設(shè)置完畢后,進(jìn)入正常工作狀態(tài),接下來就讀寫rtl8019as的ram以完成數(shù)據(jù)包的接收和發(fā)送。由于篇幅有限,這里就不再詳述。 tcp/ip模型 tcp/ip協(xié)議是一套把internet上的各種系統(tǒng)互連起來的協(xié)議族,保證internet上數(shù)據(jù)的準(zhǔn)確快速傳輸。tcp/ip通常采用一種簡化的四層模型:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。 本系統(tǒng)中,應(yīng)用層傳遞來自以太網(wǎng)和數(shù)據(jù)終端的數(shù)據(jù),并對數(shù)據(jù)報(bào)作打包拆包處理。傳輸層采用傳輸控制協(xié)議tcp或用戶數(shù)據(jù)協(xié)議udp。網(wǎng)絡(luò)層實(shí)現(xiàn)ip協(xié)議,還要實(shí)現(xiàn)能報(bào)告數(shù)據(jù)傳輸差錯等情況的icmp協(xié)議。鏈路層部分由rtl8019as完成,鏈路層由控制同一物理網(wǎng)絡(luò)上的不同機(jī)器間數(shù)據(jù)傳送的底層協(xié)議組成。 在單片機(jī)里只實(shí)現(xiàn)與需要有關(guān)的部分,而不使用的協(xié)議則一概不支持。單片機(jī)應(yīng)用的tcp/ip協(xié)議大多是為了完成數(shù)據(jù)采集和數(shù)據(jù)傳輸,而不需要網(wǎng)頁瀏覽、文件傳輸這些功能。 arp協(xié)議(地址解析協(xié)議) 以太網(wǎng)是tcp/ip協(xié)議主要采用的局域網(wǎng)技術(shù),是系統(tǒng)接入internet的基礎(chǔ)。arp本質(zhì)是完成網(wǎng)絡(luò)地址到以太網(wǎng)物理地址的動態(tài)映射。unix系統(tǒng)的arp協(xié)議支持以太網(wǎng)、令牌環(huán)等網(wǎng)絡(luò),但我們的單片機(jī)系統(tǒng)里只支持以太網(wǎng)。 ip協(xié)議(網(wǎng)際協(xié)議) ip是tcp/ip協(xié)議族中最為核心的協(xié)議。所有的tcp、udp、icmp及igmp數(shù)據(jù)都以ip數(shù)據(jù)報(bào)格式傳輸。就對某些協(xié)議而言,ip包最大可以為65k,可以分段傳輸,而在單片機(jī)里根本無法容納如此大的數(shù)據(jù)包,因此一般是不支持分段的。我們的設(shè)計(jì)中采用發(fā)送小數(shù)據(jù)包的方式,以避免分段。 tcp協(xié)議(傳輸控制協(xié)議) tcp數(shù)據(jù)封裝在一個ip數(shù)據(jù)報(bào)中,并具有自己的tcp首部, tcp協(xié)議定義十分復(fù)雜,鑒于51單片機(jī)的片內(nèi)資源十分有限,本系統(tǒng)對tcp協(xié)議進(jìn)行了一定的簡化處理。標(biāo)準(zhǔn)的tcp協(xié)議使用慢啟動的滑動窗口機(jī)制,如果只使用單個窗口,就變成了一種簡單確認(rèn)的處理方法。即只需對單個數(shù)據(jù)報(bào)發(fā)送和確認(rèn),節(jié)約了系統(tǒng)資源,也使維護(hù)更加方便。 編程實(shí)現(xiàn)tcp協(xié)議的另一個難點(diǎn)在于tcp建立連接和終止連接