當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]嵌入式系統(tǒng)Internet打印的設(shè)計(jì)與實(shí)現(xiàn)

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

1    引言

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

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

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

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

3    硬件設(shè)計(jì)

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

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

圖 2 硬件原理圖

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

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

3.1          打印接口的設(shè)計(jì)

圖 3 SPP打印接口原理圖

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

4    軟件設(shè)計(jì)

4.1         LAN91C111復(fù)位

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

4.2     LAN91C111初始化

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

4.3     以太幀的收發(fā)

4.3.1   以太幀的發(fā)送

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

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

(2)    測(cè)試分配是否完成,如果完成則返回緩存包序號(hào)在Allocation Result Register;

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

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

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

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

4.3.2   以太幀的接收

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

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

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

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

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

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

圖 4以太幀解析流程

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

4.5  IPP的子集的構(gòu)建

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

(1)  打印機(jī)對(duì)象(IPP Printer Object),執(zhí)行服務(wù)器的IPP的協(xié)議,負(fù)責(zé)受理打印請(qǐng)求、作業(yè)排隊(duì)、驗(yàn)證,將打印數(shù)據(jù)提交給打印機(jī),回應(yīng)用戶打印狀態(tài)的查詢請(qǐng)求。

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

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

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

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

編碼

具體值

解釋

0x0101

1.1

IPP版本號(hào)

0x0002

Print-Job

操作碼

0x00000001

1

請(qǐng)求編號(hào)

0x01

start operation-attributes

表示操作屬性開始

0x47

charset type

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

0x0012

 

名字長(zhǎng)度為18字節(jié)

attributes-charset

attributes-charset

具體名字

0x0008

 

具體值的長(zhǎng)度是8字節(jié)

us-ascii

US-ASCII

具體值是US-ASCII

0x48

natural-language type

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

0x03

end-of-attributes

屬性結(jié)束標(biāo)志

%!PS...

<PostScript>

打印數(shù)據(jù)

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

5    結(jié)束語(yǔ)

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

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


[1] 匡曉雪.分布式打印環(huán)境和Internet打印技術(shù)[J].計(jì)算機(jī)工程與應(yīng)用,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訪問編程[J]. 微計(jì)算機(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., 路曉村等譯.嵌入式系統(tǒng)TCP/IP應(yīng)用層協(xié)議[M].北京:電子工業(yè)出版社,2003

本站聲明: 本文章由作者或相關(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工具的開發(fā)耗時(shí)1.5...

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

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(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ì)開幕式在貴陽(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)閉