<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è) > 嵌入式系統 > 設計應用 > 嵌入式系統Internet打印的設計與實(shí)現

嵌入式系統Internet打印的設計與實(shí)現

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

摘要:本文通過(guò)實(shí)例介紹了一種網(wǎng)絡(luò )方案。該方案選用ATmega128為MPU、LAN91C111為網(wǎng)絡(luò )控制器,以通用的SPP并口作為物理輸出端口,硬件構成上具有典型意義。軟件上精簡(jiǎn)了TCP/IP協(xié)議棧,完成了網(wǎng)絡(luò )接口程序的,構建了WEB服務(wù)器。在分析網(wǎng)絡(luò )模型的基礎上,了IPP網(wǎng)絡(luò )打印協(xié)議的基本功能。
關(guān)鍵詞:;打??;IPP;LAN91C111

1 引言

隨著(zhù)嵌入式技術(shù)的發(fā)展,硬件的性?xún)r(jià)比越來(lái)越高。本文介紹了一種嵌入式網(wǎng)絡(luò )打印的方案,把并口打印機連接到能執行IPP( Printing Protocol)協(xié)議的嵌入式上,實(shí)現了網(wǎng)絡(luò )打印。整個(gè)網(wǎng)絡(luò )打印的模型如圖1所示[1]。這種應用方案不僅可以整合到嵌入式系統中用來(lái)提供網(wǎng)絡(luò )打印支持,也可以單獨成一個(gè)嵌入式打印服務(wù)器,實(shí)現遠程打印或對普通打印機提供打印共享支持。

圖 1基于IPP協(xié)議的嵌入式網(wǎng)絡(luò )打印模型

2 IPP因特網(wǎng)打印協(xié)議

IPP協(xié)議是由互聯(lián)網(wǎng)工程任務(wù)組(IETF, Engineering Task Force)于1997年提出來(lái)的,目前最高版本為1.1。操作系統Windows2000和Red Hat Linux8.0以上提供了對IPP協(xié)議的支持。IPP 協(xié)議基于客戶(hù)機/服務(wù)器模式,客戶(hù)在操作系統或應用程序中重定向打印服務(wù)到服務(wù)器的知名端口631,通過(guò)雙方會(huì )話(huà)完成打印任務(wù)??蛻?hù)查找打印機時(shí),只要輸入IPP打印機的網(wǎng)址便可獲取遠程打印機的列表。應用層協(xié)議IPP依賴(lài)于HTTP協(xié)議,雙方的會(huì )話(huà)數據和打印數據嵌在HTTP數據體中完成的。雙方會(huì )話(huà)時(shí)須使用POST方法,同時(shí)啟用了新的Content-Type,即“application / ipp”,用來(lái)指出MESSAGE-BODY是IPP數據[2]。

3 硬件設計

本方案采用ATMEL 公司8位芯片中性能最高的ATmega128,以及SMSC公司的第三代10/100M以太網(wǎng)控制芯片LAN91C111。 兩種芯片都是Little Endian字節順序,且ATmega128是8位機,數據線(xiàn)可直接連接。如圖2所示[3],外部采用單一的外總線(xiàn)結構,64K外部空間的低32K的分配給SRAM,另外的32K空間除了8個(gè)留給并行打印端口之外,其余地址取連續的16個(gè)分配給網(wǎng)卡使用。

LAN91C111工作電壓是3.3V,但I/O口是5V電平,本方案使用了一片LM3940作電壓轉換。采用雙絞線(xiàn)輸出時(shí),必須在RBIAS引腳接一個(gè)下拉偏置電阻。本方案LAN91C111沒(méi)有外接EEPROM,將ENEEP接地,運行參數初始化時(shí)由用戶(hù)通過(guò)主CPU寫(xiě)入[4]。

圖 2 硬件原理圖

對LAN91C111的操作通過(guò)其內部的寄存器讀寫(xiě)進(jìn)行。內部的寄存器分為BANK0-BANK3共四頁(yè),頁(yè)面選擇通過(guò)頁(yè)選擇寄存器(Bank Select register, BSR)來(lái)進(jìn)行。不論當前頁(yè)是哪一頁(yè),改變BSR的值就可以切換BANK,利用16個(gè)字節地址空間映射到I/O口就能實(shí)現對整個(gè)芯片的操作。

LAN91C111內部有一個(gè)8K的SRAM作為發(fā)送/接收緩存,由存儲管理單元(Memory Management Unit, MMU)管理,方便了用戶(hù)的編程,減少了主CPU的開(kāi)銷(xiāo)。8K的緩存固定分為4頁(yè),編號為0-3,每頁(yè)為2K。以太幀最大為1518字節,每頁(yè)完全可以存放一個(gè)以太幀。對發(fā)送和接收沒(méi)有固定的分配頁(yè),其分配和釋放可以通過(guò)寫(xiě)寄存器相應的位完成。

3.1 打印接口的設計

圖 3 SPP打印接口原理圖

Centronics并行口雖然速度較慢,但其SPP (Standard Parallel Port)模式控制方便,這是許多打印機都支持的接口模式。實(shí)驗中用ATmega128的I/O口作打印數據傳輸線(xiàn),其余的信號線(xiàn)最簡(jiǎn)潔的接法只需連接選通信號nSTB和忙信號BUSY[5]。本方案為節省硬件,只對打印機數據輸出采用地址譯碼的控制方式。ATmega128不用的口線(xiàn)較多,可將打印機的缺紙、打印出錯等信號狀態(tài)線(xiàn)也接上。采用中斷編程的方法時(shí),要將nACK接到ATmega128的一根中斷請求線(xiàn)上并設置為低電平中斷。為避免損壞打印口,減少干擾,中間使用74HC244作為三態(tài)緩沖,具體應用時(shí),應注意CMOS和TTL電平的匹配,原理圖如圖3所示。

4 軟件設計

4.1 LAN91C111復位

可以通過(guò)兩種方法使芯片(MACPHY)復位。一是將復位引腳置位至少100ns;二是將接收控制寄存器(Receive Control Register)的SOFT_RST位先寫(xiě)1,至少50ms后再寫(xiě)0使其復位。復位后,物理層模塊處于隔離模式(Isolation Mode),芯片不能收發(fā)數據包,必須設置PHY層的串行口控制寄存器(Control Register)的MII_DIS位才能使芯片正常工作。

4.2 LAN91C111初始化

初始化發(fā)送控制寄存器,寫(xiě)入0x8010,打開(kāi)自動(dòng)填充符功能和自動(dòng)添加CRC功能。初始化接收控制寄存器,寫(xiě)入0x0000,自動(dòng)去除幀尾的CRC檢驗碼。初始化接收/物理層控制寄存器(Receive/Phy Control Register, RPCR),設置為0X3010,選擇自動(dòng)偵察模式,兩個(gè)LED分別設置成連接指示和收發(fā)指示。初始化配置寄存器,寫(xiě)入缺省值0XA0B1,本系統無(wú)外接E2PROM,使用內部物理層模塊。初始化基址寄存器,采用缺省地址值300H。初始化芯片物理地址寄存器,此值不能和子網(wǎng)內其它設備重復。初始化控制寄存器,寫(xiě)入初值0x1A10,CRC校驗有錯時(shí),不產(chǎn)生中斷信號且所占用的緩存被自動(dòng)釋放, AUTO_RELEASE位置1。 初始化早期接收寄存器,去掉早期接收功能,設置ERCV寄存器ERCV_THRESHOLD位為1FH。只有接收的字節數超過(guò)閾值,早期中斷才會(huì )產(chǎn)生。

4.3 以太幀的收發(fā)

4.3.1 以太幀的發(fā)送

發(fā)送和接收以太幀采用中斷和查詢(xún)方式都可以。以太幀的發(fā)送分為五步:

(1) 通過(guò)向MMU命令寄存器MMUCR寫(xiě)入0x0020,請求MMU分配一頁(yè)緩存;

(2) 測試分配是否完成,如果完成則返回緩存包序號在A(yíng)llocation Result Register;

(3) 將包序號復制到Packet Number Register中,寫(xiě)Pointer Register為0x4000, 表明是發(fā)送過(guò)程、寫(xiě)操作且指針自動(dòng)增1;

(4) 寫(xiě)數據入緩存,由Data Register依次寫(xiě)入status word、 byte count、 destination address、 source address、packet type、packet data、 control word ;

(5) 加入發(fā)送隊列,等待發(fā)送中斷,主CPU向MMUCR寫(xiě)入隊指令0x00C0。

接著(zhù)主CPU就等待發(fā)送中斷出現,判斷是否發(fā)送成功并進(jìn)行后續處理。

4.3.2 以太幀的接收

主程序中將RCR的RXEN位置1,允許接收數據包,即將0x0300寫(xiě)入RCR。如果接收正確,且前面的接收包已被處理,則新接收的包序號位于RX FIFO的隊頭,接下來(lái)的任務(wù)都在接收中斷程序中完成:

(1) 設置數據包的Pointer Register 中的RCV, RD, AUTOINC三個(gè)位都為1,寫(xiě)入0xE000。

(2) 從Data Register中讀取緩存中的數據到內存中,處理后交上層協(xié)議。

4.4 TCP/IP協(xié)議的實(shí)現

TCP/IP協(xié)議在網(wǎng)絡(luò )接口層處理以太幀,實(shí)現高層協(xié)議的封裝和解析。根據以太幀中的類(lèi)型字節,數據包分為三類(lèi):ARP、RARP和IP,逐層解析。由于網(wǎng)絡(luò )運行參數如IP地址、網(wǎng)關(guān)地址等可以通過(guò)DHCP協(xié)議自動(dòng)獲取,也可以由手工進(jìn)行設置,因此本系統提供了手動(dòng)配置和DHCP協(xié)議自動(dòng)配置的功能。為方便系統的運行,將上次成功運行的參數保存在A(yíng)Tmega128的EEPROM中。由于本服務(wù)器主要是對服務(wù)請求做出響應,接收要打印的數據,以及上傳打印機的工作狀態(tài),因此發(fā)送的數據加上協(xié)議的封裝不會(huì )超過(guò)網(wǎng)絡(luò )的MTU。由于系統本身資源有限,為減少TCP協(xié)議解析的復雜度,采用定長(cháng)緩存。系統中發(fā)送接收緩存容量為2566=1536字節,可以容納最大以太幀。通過(guò)調整滑動(dòng)窗口,以確保數據包大小不超過(guò)緩存容量,接收一包處理一包。從每包的特征字節可判斷數據包是獨立包還是上一包的繼續[6]。系統中設計了一個(gè)3KB定長(cháng)的打印隊列,打印數據直接送入打印隊列。

本方案需要的協(xié)議有RAP協(xié)議,UDP協(xié)議,DHCP協(xié)議,IP協(xié)議,TCP協(xié)議, ICMP協(xié)議,HTTP協(xié)議,IPP協(xié)議。解析的流程[7]如圖4:

圖 4以太幀解析流程

待發(fā)送的數據可分為兩大類(lèi),一類(lèi)是IPP服務(wù)器的應答數據,二是輔助信息,如ARP請求、數據包的確認等。系統根據需要裝配數據,最后由網(wǎng)絡(luò )接口層發(fā)送出去。所有協(xié)議中TCP協(xié)議的處理最復雜,約占了整個(gè)代碼的1/3。

4.5 IPP的子集的構建

IPP協(xié)議的網(wǎng)絡(luò )打印模型有兩類(lèi)對象:

(1) 打印機對象(IPP Printer Object),執行服務(wù)器的IPP的協(xié)議,負責受理打印請求、作業(yè)排隊、驗證,將打印數據提交給打印機,回應用戶(hù)打印狀態(tài)的查詢(xún)請求。

(2) 作業(yè)對象(IPP Job Object)。當打印機對象創(chuàng )建打印作業(yè)時(shí)就生成相應的作業(yè)對象。作業(yè)對象包含要打印的文檔或文檔的引用(URI,Uniform Resource Identifier)。

IPP的1.1版本中并不含有通知服務(wù)。所謂通知服務(wù)是指當打印機或作業(yè)對象發(fā)生改變,例如出現打印故障時(shí),服務(wù)器端主動(dòng)通知客戶(hù)端。由于打印機種類(lèi)繁多,對打印機驅動(dòng)程序處理采用給出URI的方法,系統不提供下載。

IPP打印申請和打印過(guò)程是通過(guò)服務(wù)器和客戶(hù)端的一組請求及響應操作完成的。屬于打印機對象的操作有:直接傳送文檔的打??;作業(yè)的驗證;作業(yè)的創(chuàng )建;打印機屬性的獲取與應答。下面的五種操作不予實(shí)現:通過(guò)URI獲取打印文檔;打印作業(yè)列表;暫停所有打??;恢復打??;清除所有打印作業(yè)。屬于打印作業(yè)對象的操作有:文檔發(fā)送;打印作業(yè)取消;打印作業(yè)屬性的獲??;打印作業(yè)的掛起;打印作業(yè)的就緒。

IPP協(xié)議的請求與響應的屬性比較復雜,下面列出提交到服務(wù)器的打印作業(yè)請求的IPP包片斷[2]:

編碼

具體值

解釋

0x0101

1.1

IPP版本號

0x0002

Print-Job

操作碼

0x00000001

1

請求編號

0x01

start operation-attributes

表示操作屬性開(kāi)始

0x47

charset type

標簽值代碼,下面開(kāi)始的是charset

0x0012

名字長(cháng)度為18字節

attributes-charset

attributes-charset

具體名字

0x0008

具體值的長(cháng)度是8字節

us-ascii

US-ASCII

具體值是US-ASCII

0x48

natural-language type

標簽值代碼,下面開(kāi)始的是natural-language

0x03

end-of-attributes

屬性結束標志

%!PS...

PostScript>

打印數據

表1 IPP打印作業(yè)請求包格式

5 結束語(yǔ)

利用ATmega128和網(wǎng)絡(luò )控制芯片LAN91C111,我們設計了基于IPP協(xié)議的嵌入式系統網(wǎng)絡(luò )打印方案。系統外接了小型熱敏并口打印機,利用VB直接在程序中處理IPP會(huì )話(huà),使用ESC打印語(yǔ)言構造打印數據,經(jīng)測試,可以滿(mǎn)足一般的打印需求,具有一定的實(shí)用價(jià)值。本方案只實(shí)現了IPP的基本功能,在雙向打印端口的設計、打印數據的網(wǎng)絡(luò )安全等方面還有許多地方有待完善。

本文作者創(chuàng )新點(diǎn):設計了高性?xún)r(jià)比的嵌入式網(wǎng)絡(luò )硬件接口,在精簡(jiǎn)的TCP/IP協(xié)議棧上實(shí)現了網(wǎng)絡(luò )打印協(xié)議IPP的基本功能,為設計通用的嵌入式網(wǎng)絡(luò )打印方案提供了新思路。


[1] 匡曉雪.分布式打印環(huán)境和打印技術(shù)[J].計算機工程與應用,2001,(1):105
[2] RFC2911.Internet Printing Protocol/1.1:Model and Semantics[S]
[3]Atmel 公司. ATmega128 datasheet[EB/OL]. Atmel Corporation,2001
[4] SMSC公司. LAN91C111 datasheet[EB/OL]. SMSC Corporation,2004
[5] 馮志華,張平,駱念武等. 各種語(yǔ)言下的打印口直接I/O訪(fǎng)問(wèn)編程[J]. 微計算機信息, 2000, 16(4):61
[6] Adam Dunkels. Full TCP/IP for 8-bit architectures. Proceedings of the 1st international conference on Mobile systems[C]. California: ACM, 2003. 85-98.
[7] Jones M.T., 路曉村等譯.嵌入式系統TCP/IP應用層協(xié)議[M].北京:電子工業(yè)出版社,2003

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


評論


相關(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>