新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式系統Internet打印的設計與實現

        嵌入式系統Internet打印的設計與實現

        作者: 時間:2007-08-10 來源:網絡 收藏

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

        1 引言

        隨著嵌入式技術的發展,硬件的性價比越來越高。本文介紹了一種嵌入式網絡打印的方案,把并口打印機連接到能執行IPP( Printing Protocol)協議的嵌入式上,實現了網絡打印。整個網絡打印的模型如圖1所示[1]。這種應用方案不僅可以整合到嵌入式系統中用來提供網絡打印支持,也可以單獨成一個嵌入式打印服務器,實現遠程打印或對普通打印機提供打印共享支持。

        圖 1基于IPP協議的嵌入式網絡打印模型

        2 IPP因特網打印協議

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

        3 硬件設計

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

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

        圖 2 硬件原理圖

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

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

        3.1 打印接口的設計

        圖 3 SPP打印接口原理圖

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

        4 軟件設計

        4.1 LAN91C111復位

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

        4.2 LAN91C111初始化

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

        4.3 以太幀的收發

        4.3.1 以太幀的發送

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

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

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

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

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

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

        接著主CPU就等待發送中斷出現,判斷是否發送成功并進行后續處理。

        4.3.2 以太幀的接收

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

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

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

        4.4 TCP/IP協議的實現

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

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

        圖 4以太幀解析流程

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

        4.5 IPP的子集的構建

        IPP協議的網絡打印模型有兩類對象:

        (1) 打印機對象(IPP Printer Object),執行服務器的IPP的協議,負責受理打印請求、作業排隊、驗證,將打印數據提交給打印機,回應用戶打印狀態的查詢請求。

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

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

        IPP打印申請和打印過程是通過服務器和客戶端的一組請求及響應操作完成的。屬于打印機對象的操作有:直接傳送文檔的打??;作業的驗證;作業的創建;打印機屬性的獲取與應答。下面的五種操作不予實現:通過URI獲取打印文檔;打印作業列表;暫停所有打?。换謴痛蛴。磺宄写蛴∽鳂I。屬于打印作業對象的操作有:文檔發送;打印作業取消;打印作業屬性的獲取;打印作業的掛起;打印作業的就緒。

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

        編碼

        具體值

        解釋

        0x0101

        1.1

        IPP版本號

        0x0002

        Print-Job

        操作碼

        0x00000001

        1

        請求編號

        0x01

        start operation-attributes

        表示操作屬性開始

        0x47

        charset type

        標簽值代碼,下面開始的是charset

        0x0012

        名字長度為18字節

        attributes-charset

        attributes-charset

        具體名字

        0x0008

        具體值的長度是8字節

        us-ascii

        US-ASCII

        具體值是US-ASCII

        0x48

        natural-language type

        標簽值代碼,下面開始的是natural-language

        0x03

        end-of-attributes

        屬性結束標志

        %!PS...

        PostScript>

        打印數據

        表1 IPP打印作業請求包格式

        5 結束語

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

        本文作者創新點:設計了高性價比的嵌入式網絡硬件接口,在精簡的TCP/IP協議棧上實現了網絡打印協議IPP的基本功能,為設計通用的嵌入式網絡打印方案提供了新思路。


        [1] 匡曉雪.分布式打印環境和打印技術[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] 馮志華,張平,駱念武等. 各種語言下的打印口直接I/O訪問編程[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應用層協議[M].北京:電子工業出版社,2003

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 敦化市| 吉水县| 灵川县| 永安市| 光泽县| 长宁县| 赤城县| 塔河县| 辽阳市| 石渠县| 皋兰县| 扎兰屯市| 尤溪县| 耒阳市| 茂名市| 雷波县| 大埔县| 崇左市| 龙口市| 苏州市| 新巴尔虎右旗| 博野县| 南木林县| 聂拉木县| 寿光市| 阳原县| 太白县| 丹巴县| 阳曲县| 金阳县| 吴桥县| 东兴市| 伊通| 孟州市| 定边县| 博湖县| 友谊县| 枣阳市| 库车县| 法库县| 无极县|