<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于S7600A的嵌入式系統Internet接入方案

基于S7600A的嵌入式系統Internet接入方案

作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:TCP/IP協(xié)議棧大規模集成電路S7600A的結構、功能、硬件接口和應用程序接口;介紹一個(gè)基于實(shí)時(shí)任務(wù)操作系統μs/OS的S7600A應用方案,此方案實(shí)現了系統的Internet接入。

本文引用地址:http://dyxdggzs.com/article/241603.htm

關(guān)鍵詞:TCP/IP API 實(shí)時(shí)操作系統(RTOS) 多任務(wù) 系統

隨著(zhù)電子設備智能化要求的提高和各種功能強大的微處理器的推出,系統逐漸成為許多電子設備不可缺少的一部分,并處在前所未有的發(fā)展期;而互聯(lián)網(wǎng)概念的深入人心更為嵌入式系統與互聯(lián)網(wǎng)的結合提出了要求。嵌入式系統接入Internet以后,不僅實(shí)現了設備的遠程控制、維護和升級,而且從另外一層意義上講,接入Internet的設備已經(jīng)成為網(wǎng)絡(luò )共享資源的一部分??梢哉f(shuō)這是自電子設備智能化以來(lái)設計思想的又一次飛躍。

嵌入式系統接入Internet的關(guān)鍵是滿(mǎn)足TCP/IP協(xié)議。TCP/IP協(xié)議是建立在數據鏈路層、網(wǎng)絡(luò )層、傳輸層和應用層上的協(xié)議族,是Internet的基礎。各種型號計算機運行在不同操作系統之上,TCP/IP協(xié)議族允許它們互相通信。通常,一個(gè)嵌入式系統接入Internet,可選擇一個(gè)提供TCP/IP協(xié)議的嵌入式操作系統,或是在現有操作系統之上加入TCP/IP軟件協(xié)議棧,實(shí)現TCP/IP連接。對于嵌入式系統,TCP/IP軟件協(xié)議棧也構成了系統成本的一部分,而這部分投入占有不小的比例。同時(shí),軟件協(xié)議棧的引入無(wú)疑要占用更多的系統資源,對于嵌入式系統來(lái)說(shuō)是很可觀(guān)的。S7600A TCP/IP硬件協(xié)議棧芯片很好地解決了資源和成本有限的嵌入式系統的Internet接入問(wèn)題。

1 S7600A的內部結構

S7600A內部結構如圖1所示,它由網(wǎng)絡(luò )棧、物理層接口、微控制器接口、SRAM接口和片內SRAM組成。(1)網(wǎng)絡(luò )棧是該芯片的核心。它建立在物理層上,包含有實(shí)現TCP/IP協(xié)議的特殊的層次化的數據結構,并完成數據的包裝或剝離。其內部又可以分為PPP(點(diǎn)對點(diǎn)協(xié)議)、IP(網(wǎng)際協(xié)議)、TCP(傳輸控制協(xié)議)/UDP(用戶(hù)數據報協(xié)議)幾個(gè)層次。(2)物理層接口是實(shí)現協(xié)議的最底層接口。在這里以UART的形式提供對外連接,可以通過(guò)外接Modem實(shí)現Internet接入。(3)微控制器接口提供了與68k/x86(Moterola/Intel)MPU的標準并行接口非標準的串行接口(串/并模式由PSX來(lái)選擇)。在x86/68k并行模式下,由C86來(lái)選擇x86或68k。SD[7:0]為地址/數據復用總線(xiàn),CS為片選輸入,READX和WRITEX為讀寫(xiě)信號,RS為寄存器選擇輸入,用業(yè)指示地址和數據。在串行模式下,SD7為串行數據輸入,SD6為串行時(shí)鐘輸入,SD5為串行數據輸出,WRITEX用來(lái)切換讀和寫(xiě)。另外芯片提供了中斷輸出,用來(lái)給MPU發(fā)特定請求。BUSYX用做忙指示。

2 S7600A內部寄存器和數據傳輸實(shí)例

S7600A有36個(gè)內部寄存器,有單字節、多字節,也有變長(cháng)的(如PPP_String寄存器,用來(lái)存放PAP用戶(hù)名和指令,其長(cháng)度與用戶(hù)名和口令的實(shí)際長(cháng)度相關(guān))。對內部寄存器的讀寫(xiě)可以實(shí)現對S7600A的各種操作,其中若干寄存器用來(lái)做TCP/IP的協(xié)議接口。由于寄存器數據量較多,這里不一一介紹,僅舉一個(gè)TCP數據的傳輸實(shí)例來(lái)說(shuō)明對該芯片的操作。

一個(gè)IP地址和一個(gè)端口號可以稱(chēng)一個(gè)插口(Socket)。而一個(gè)插口對可以唯一地確定互聯(lián)網(wǎng)絡(luò )里一個(gè)TCP連接。在進(jìn)行以下操作之前事先要建立一個(gè)TCP連接。

首先,將Serial_Port_Config寄存器(08H)里的SCTL標志位置1,把對串口的控制權交給硬件(S7600A),把要傳輸的數據寫(xiě)到Socket_Data寄存器(2EH)里,S7600A就會(huì )把數據通過(guò)該寄存器放到輸出緩沖區(1K字節長(cháng)度)。注意輸出緩沖區地址在Buffer_Out_Length寄存器(30H-31H)里,當輸出緩沖區為全空時(shí),該寄存器里寫(xiě)一個(gè)字節的數據,用戶(hù)每向Socket_Data寄存器里寫(xiě)一個(gè)字節的數據,Buffer_Out_Length寄存器的值就會(huì )自動(dòng)減一。

當用戶(hù)要發(fā)送TCP數據時(shí),只要向Data_Send寄存器(30H)里寫(xiě)任意個(gè)字節的數據,S7600A就會(huì )對輸出緩沖區里的數據進(jìn)行TCP數據處理(自動(dòng)加入TCP首部,形成TCP段;再加入IP首部,形成IP數據報;最后在串行鏈路上封裝IP數據報,形成PPP數據幀,如圖2所示。)然后通過(guò)UART接口發(fā)送出去。同時(shí)Buffer_Out_Length寄存器的值會(huì )復原到3FFH.注意輸出緩沖區最大1K字節,超過(guò)該值是不允許的。

3 基于S7600A的接入方案

3.1 系統構成

基于S7600A的接入方案如圖3所示,系統采用通用單片機AT89C51為控制核。單片機既可以通過(guò)并行總線(xiàn)又可以通過(guò)串行總線(xiàn)與S7600A相連(在串行時(shí)用I/O口實(shí)現串行時(shí)序),通過(guò)對S7600A的操作實(shí)現TCP/IP協(xié)議。S7600A經(jīng)UART接口與嵌入式Modem相接,經(jīng)電話(huà)線(xiàn)接入Internet。應用程序與遠程服務(wù)器或客戶(hù)機建立TCP或UDP連接,在此基礎上實(shí)現多種應用,如FTP、SMTP、POP3、Telnet、IP電話(huà)服務(wù)等。從網(wǎng)上獲取的信息可以經(jīng)系統總線(xiàn)傳給嵌入系統的其他部分或者直接顯示在LCD上,同樣系統產(chǎn)生的信息也可發(fā)送到網(wǎng)絡(luò )上。

3.2 系統的軟件設計

(1)嵌入式實(shí)時(shí)多任務(wù)操作系統

在這個(gè)系統里,引入了實(shí)時(shí)操作系統(RTOS)。通常對單片機的開(kāi)發(fā)是在硬件的基礎上直接進(jìn)行編程,這種方法一般用于規模較小、較簡(jiǎn)單的系統,對于規模較大、較為復雜的系統會(huì )產(chǎn)生一定的隱患,屬于較低層次的開(kāi)發(fā)。近年來(lái),在嵌入式應用中使用實(shí)時(shí)多任務(wù)操作系統已經(jīng)成為一個(gè)熱點(diǎn)、一種時(shí)尚,從本質(zhì)意義上講,是系統開(kāi)發(fā)層次的一種提高。在實(shí)時(shí)多任務(wù)操作系統的支持下,多個(gè)任務(wù)可以按照一定關(guān)系并行工作,CPU資源得到充分利用,系統可靠性得到很好的保證,同時(shí)方便組織開(kāi)發(fā)任務(wù)。

當前出現了很多商業(yè)的RTOS,但一般價(jià)格比較昂貴,代碼不公開(kāi)。本系統使用了開(kāi)放源代碼的RTOS μC/OS,這個(gè)RTOS已經(jīng)在很多系統上進(jìn)行了成功的應用,同時(shí)已經(jīng)被移植到8051上。

(2)S7600A應用程序接口(API)

S7600A以硬件的形式提供了TCP/IP協(xié)議的簡(jiǎn)單端口。即便如此,對其內部眾多寄存器進(jìn)行尋址操作了并不容易,建立TCP/IP連接仍然是比較復雜的過(guò)程。幸運的是,廠(chǎng)商為其提供API函數集,通過(guò)調用該函數集,可以實(shí)現S7600A的所有功能。這個(gè)函數集是建立在RTOS上的。但是這套API又具有硬件和平臺的獨立性,非常有利于在各種系統上移植,這種特性為實(shí)際開(kāi)發(fā)項目的層次公組織創(chuàng )造了非常有利的條件。其硬件獨立性是通過(guò)API里的兩個(gè)文件iHwIFace.h和iHwIFace.c實(shí)現的,用戶(hù)在重寫(xiě)這兩個(gè)文件后,可以使API用在不同的CPU上,它實(shí)際相當于S7600A的底層驅動(dòng)程序。在這個(gè)系統里要根據AT89C51和S7600A的編址連接來(lái)確定這兩個(gè)文件,其平臺獨立性是通過(guò)API里的iSys.h和iSys.c實(shí)現的,用戶(hù)在重寫(xiě)這兩個(gè)文件后,可以使API運行在不同的操作系統上,在該公司提供的這套API里已經(jīng)附帶了基于μC/OS的這兩個(gè)文件。

該API包括兩個(gè)主要部分:iStacApi(實(shí)現PPP)和iSockApi(實(shí)現Socket連接),對S7600A的功能進(jìn)行了簡(jiǎn)單而有效的封裝,為應用軟件的開(kāi)發(fā)提供了方便。如表1、表2所示。

表1 iStacApi

函數名用 途
IsInitStack
IsPPPConnect
IsPPPDisconnect
IsPPPCheck
IsPPPKeepAlive
IsGetOurIP
初始化硬件協(xié)議棧子系統
建立PPP連接
關(guān)斷PPP連接
檢測PPP連接是否激活
在PPP連接失效時(shí)重建連接
獲得本地當前IP地址

表2 IsockApi

函數名用 途
IsInitSocket
IsTCPConnect
IsTCPListen
IsTCPRead
IsTCPWrite
IsTCPClose
IsTCPAbort
IsUDPCreate
IsUDPRead
IsUDPWrite
IsUDPRelease
IsUDPAbort
初始化Socket的軟件構成
嘗試打開(kāi)TCP連接
接受TCP連接
從TCP Socket中讀取數據
向TCP Socket里寫(xiě)數據
關(guān)閉TCP Socket
中止TCP Socket上的操作
建立對UDP Socket的監聽(tīng)
等待并讀取UDP信息
寫(xiě)并發(fā)送UDP Socket
關(guān)閉UDP Socket
中止UDP Socket上的操作

(3)應用程序

應用程序建立在RTOS和API之上,并可以實(shí)現多任務(wù),在編譯完畢后和RTOS庫以及API庫一起連接生成可執行代碼,如圖4所示。

在系統需接入Internet傳輸數據的時(shí)候,首先要通過(guò)Modem撥號,建立PPP連接,然后再根據數據傳輸的具體需要決定建立TCP連接還是UDP連接。一般情況下,TCP建立可靠的連接,可以實(shí)現諸如FTP、SMTP等服務(wù);而像IP電話(huà)這樣強調實(shí)時(shí)性的場(chǎng)合,需要建立UDP連接。

在需要上網(wǎng)的時(shí)候,運行以下程序要,可以實(shí)現與ISP(網(wǎng)絡(luò )服務(wù)提供商)之間的撥號連接。首先,程序調用IsInitStack(),初始化S7600A的硬件協(xié)議棧子系統。如果初始化成功(得到RET_CODE_OK的返值),就開(kāi)始進(jìn)行撥號連接。調用IsPPPCheck()檢查是否已經(jīng)連接,如果還沒(méi)有連接,就調用IsPPPConnect()進(jìn)行撥號(該函數的參數含有進(jìn)行撥號連接的要素:phata.name表示撥號上網(wǎng)的用戶(hù)名,例如撥169時(shí),用戶(hù)名就指定為“169”;pdata.passwd表示用戶(hù)口令,例如撥169時(shí),該口令指定為“169”;pdata.modemInitStrings存放初始化Modem用的指令,符合Modem AT指令集,“AT”為Modem指令的前綴。例如,“AT+FAE=0”表示關(guān)閉data/fax自動(dòng)應答模式,“ATE0”表示禁止指令回應;pdata.baudRate為波特率;pdata.modemDialString為撥號號碼,此處為電話(huà)號碼169,“DT”表示用雙音頻撥號);如果已經(jīng)建立了連接,就調用IsGetOurIP()得到IP地址或者調用IsPPPKeepAlive()保持連接。

#includeiReady.h>

#includeiRtacApi.h>

#define L_Time 10000

static int do_connect=1,was_connect=0;

static iIPAddr ip;

ppp_task(void)

{

RET_CODE rc; //RET_CODE為API函數執行狀態(tài)返值的數據類(lèi)型

iPPPData pdata; //該數據結構包含建立PPP連接的必要數據

static char *initSrtings[5];

initStrings[]=“AT+FAE=0”; //在字符串數組里存放Modem初始化指令

initStrings[]=“ATE0”;

initStrings[]=0; //設定該字符為NULL

initStrings[]=0;

initStrings[]=0;

pdata.name=“169”; //撥號上網(wǎng)的用戶(hù)名

pdata.passwd=“169”; //撥號上網(wǎng)的用戶(hù)口令

pdata.baudRate=28800; //設置波特率

pdata.hwFlowCtrl=1; //啟用硬件流控制

pdata.useModem=1;

pdata.modemDialString=“ATDT 169”; //ATDT為雙音頻撥號指令

pdata.auth=IPPP_AUTH_PAP; //提供PAP驗證

pdata.modemInitStrings=initstrings; //Modem初始化的系統指令,必須以NLLL結尾

rc=IsInitStack(); //初始化硬件棧子系統

if{re= =RET_CODE_OK}

{

while(do_connect)

{

rc=IsPPPCheck(); //檢查PPP連接是否激活

if(rc= =RET_CODE_OK)

{

if(was_connect= =0)

{

rc=IsGetOurIP(ip); //獲取IP地址

was_connect=1;

}

}

else if(was_connect)

{

was_connect=0;

rc=IsPPPkeepAlive(L_TIME)//在連接失效時(shí)重新建立連接

}

else

{

rc=IsPPPConnect(pdata,L_TIME); //撥號并與ISP建立PPP連接

continue;

}

smallSleep(L_TIME);

}

}

}

基于RTOS和S7600A的嵌入式系統Internet接入方案硬件上簡(jiǎn)潔可靠、成本適中;軟件開(kāi)發(fā)上體現了較好的層次思想和較高的技術(shù)水準,可維護性好,可擴展性好。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

tcp/ip相關(guān)文章:tcp/ip是什么




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>