鄭鵬斌,文繼國
(成都信息工程學院 電子工程學院,四川 雙流 610225)
隨著社會的不斷發展,消費者對產品真實信息的標注要求越來越高,具有極大信息容量和極強糾錯功能的二維碼具有廣闊的應用前景。在標識領域,傳統噴碼機在噴涂二維碼時噴頭打印速度快,但數據傳輸速度慢而存在不匹配的問題,打印二維碼比較困難。應用于數據傳輸方面的USB接口有高速、易用、穩定、價格低廉、支持熱插拔等優點[1],因而被廣泛用作為各種電子設備與PC的通信接口。
文中在設計噴碼機的數據傳輸接口時采用USB接口,實現了快速地傳輸二維碼圖片。此外,在固件程序設計中,一系列數據通信協議的軟件實現保證了傳輸的可靠性和穩定性,上位機程序中的選擇功能保證了噴頭能識別傳送的數據,從而準確地打印圖片。實測結果表明,此數據傳輸系統滿足了二維碼圖片的傳輸要求。
USB設備在物理上通過一條連線與主機相連,所有的設備都公用這條物理連線。邏輯上說,每個與主機相連的設備都由主機分配了一個邏輯連接點,主機與設備的通信為點對點的方式。為了使USB通信機制更加細化,建立USB協議的廠商們對USB進行了分層,根據不同層次的實現者對USB的不同要求,把每一層傳輸的數據結構設計為對其他邏輯層是透明的。圖1表示了USB設備和USB主機通信的邏輯結構和邏輯通道。

圖1 USB傳輸模型Fig.1 The transmission model based on USB
圖中,功能層的主要作用是實現主機和驅動程序、主機和設備端的功能接口的有用信息傳輸。在該層客戶應用軟件只需要考慮如何實現具體設備功能即可,不需要了解USB的相關內容。設備層包括USB的系統設備驅動軟件和USB設備的通訊的軟硬件部分。他們的關系也為邏輯上的對應關系。開發USB設備驅動軟件和USB設備的通信軟硬件的工程師應該知道USB系統的基本通訊協議。接口層用來實現在主機和USB設備的物理連接之間傳輸位信息流信息。
噴碼機的構成框圖如圖2所示。主要由主機,MCU,USB傳輸芯片,靜態存儲器,噴頭幾個部分構成。MCU通過USB傳輸芯片與主機進行通信,接受主機傳送的數據和命令,同時把噴頭的狀態等數據傳送給主機。由于噴頭一次打印需要16個字節組成一列,實時傳輸滿足不了要求,所以MCU把主機傳送的大量圖片數據先存入靜態存儲器,數據傳輸完畢后,MCU再逐次讀取數據并傳送給噴頭,在噴頭時序控制器的協同作用下進行打印。在本系統中采用的MCU是P89C60X2,USB傳輸芯片是PDIUSBD12。

圖2 噴碼機的組成框圖Fig.2 The physical structure of printer
P89C60X2由菲利普公司采用靜態80C51設計,包含以下特性:1)512字節RAM,64K字節flash存儲器,布爾處理器。2)在系統編程功能的片內flash程序存儲器。3)每個機器周期為12個時鐘周期,可通過軟件或者并行編程器選為6時鐘模式。4)全雙工增強型UART,包含幀錯誤檢測和自動地址識別。5)3個保密位,4個8位I/O口,6個中斷源和4個中斷優先級。相對于其他單片機,P89C60X2在此系統中的應用具有以下優勢:
①雙DPTR結構。兩個16位DPTR寄存器可以尋址外部存儲器,這種雙DPTR結構使編程更加靈活,使得主機更方便訪問外部數據存儲器。
②雙時鐘模式。時鐘模式特性使器件的操作頻率設為1/12或1/6振蕩器頻率。根據需要選擇模式,使MCU工作效率更高。
③特殊RAM。內置部分RAM可以當做外部數據存儲器,訪問速度快。
④與USB傳輸芯片PDIUSBD12同為菲利普公司生產,更加容易配合使用。
PDIUSBD12是一款性價比很高的USB器件[2]。此芯片是帶有并行總線和局部DMA傳輸能力的全速USB接口器件。片內集成了高性能USB接口器件、SIE、FIFO存儲器、收發器以及電壓調整器等,可與任何外部微控制器/微處理器實現高速并行接口。PDIUSBD12完全符合USB1.1版的規范[3],可理想地用于許多外部設備。
圖3為P89C60X2與PDIUSBD12的連接簡圖。PDIUSBD12芯片的數據口(1-4腳及6-9腳)通過數據總線依次與P89C60X2的P0口(39-32腳)相連;D12的寫信號腳(16腳)與 MCU的P3.6口(16腳)相連;D12的讀信號腳(15腳)與 MCU的 P3.7口(17腳)相連;D12的片選信號腳(11腳)通過譯碼器與MCU相連;P0口通過鎖存器輸出的A0地址線直接與D12的A0地址線 (28腳)相連;D12的中斷口(14 腳)與 MCU 的外部中斷 0(12 腳,P3.2)相連。

圖3 P89C60X2與PDIUSBD12連接簡圖Fig.3 The basic physical interfaces between P89C60X2 and PDIUSBD12
USB通信的軟件部分由上位機程序和下位機程序兩部分構成,上位機程序包括客戶應用程序和USB驅動程序,下位機程序為MCU固件程序。
要使USB設備和PC機的數據傳輸正常工作,需要在PC機端安轉相應的應用程序,此設計使用了廣州周立功發展有限公司提供的D12驅動程序和EasyUSB動態庫:EasyD12.dll。EasyD12.dll動態連接庫集成了對PDIUSBD12的主要軟件操作,不必要了解復雜的USB協議也可以快速的完成USB的PC端的應用軟件的開發。下面是EasyD12的庫函數說明:
EasyUSB庫[4]一共有 3個文件,包括 EasyUSB.lib,Easy USB.dll,EasyUSB.h。動態庫是MicrosoftWindows的接口標準,流行的軟件開發工具均可使用。本設計中采用界面容易設計、實時性好的軟件開發工具LabVIEW。
應用程序進行圖片傳輸完成的工作如下:1)對所傳圖片的合法性進行檢測。圖片必須為128行的黑白BMP圖片,如若不滿足條件,則報錯。2)對圖片數據進行分塊。USB每次只能傳送64字節的數據,除去控制信息,每次只能傳送60字節的圖像數據。3)對每一塊傳輸的成功性進行檢測。只有當前塊數據確認傳輸成功后,才能傳輸下一塊數據。
MCU通過讀寫外部數據存儲器的方式與D12進行數據交換。D12有數據請求時就發送中斷信號給MCU,MCU響應中斷之后,通過讀取D12相關寄存器,根據讀取狀態,進行相應操作。
固件程序主循環流程圖如圖4所示[5],圖中端點1用來傳送上位機的各種噴碼參數和命令及狀態信息,端點2用來傳送打印數據。為了保證數據能夠快速準確地傳輸,需要在主機與MCU之間制定一系列的數據傳輸協議[6],具體如下:
1)端點 1

圖4 固件程序主循環流程圖Fig.4 The flow diagram of main program's firmware
[8,T1,N1,M1]為 4 字節寫入信息,表示獲取噴頭狀態。T1,N1,M1 是 3 個字節預置數。 噴頭回答[8,T2,N2,M2]為 4字節返回信息。若N2=N1,M2=M1,則 T2有效。T2=2或T2=12表示噴頭處于“等待接收數據”狀態;T2=3或T2=13表示噴頭處于“正在接受數據”狀態。
[9,n,x0,x1,x2·····]傳送噴印參數和命令及狀態。 例如[9,0,1]表示開噴頭箑 5V 電源;[9,0,0]表示關電源;讀狀態命令 [9,9]表示讀計數器,USB 回送數據為[9,JSQW5,JSQW4,JSQW3, JSQW2, JSQW1, JSQW0],程序如下:
If(GenEpBuf[0]==9)
{
Switch(GenEpBuf[1])
{
case0:
If( GenEpBuf[2]==0)
{
#pragma ASM
SETB P1.0
#pragma ENDASM
}
else
{
#pragma ASM
CLR P1.0
#pragma ENDASM
}
break;
case 9:
GenSendBuf[0]=9;
GenSendBuf[1]=JSQW5;
GenSendBuf[2]=JSQW4;
GenSendBuf[3]=JSQW3;
GenSendBuf[4]=JSQW2;
GenSendBuf[5]=JSQW1;
GenSendBuf[6]=JSQW0;
D12_WriteEndpoint(3,7, GenSendBuf);
break;
……
}
}
2)端點 2
①[4,0,0,0]為 4 字節寫入信息,表示結束等待,開始寫入一組噴印數據。噴頭回答[4,0,0,0]為4字節返回信息。
②[1,addh,addi,len,byte(1),byte(2)······,byte(len-1)]為4+len字節寫信息,表示把len字節的數據寫入噴頭緩沖區,len小于或者等于60。addh,addl為寫入的第一字節數據的地址,len為寫入的數據字節數。噴頭回答[3,0,0,0]為4字節返回信息,表示前面寫入的數據超出了可用緩沖區,有效緩沖區的長度為32768字節。噴頭回答[1,addh2,addl2,len]為4字節返回信息,表示前面寫入的數據有效,其中addh2,addl2為收到的最后一個數據的下一個字節的地址,len為收到的數據字節數,即addh2*256+addl2-addh1*256-addl1=len。
③[5,0,0,0]為 4字節寫信息,表示一組噴印數據寫結束。 噴頭回答[5,0,0,0]為 4 字節返回信息。
進行測試時,首先打開上位機應用軟件和給下位機上電,上位機收到下位機傳送的“系統已準備完畢”的提示信息后,就可以進行圖片的傳輸。在上位機中載入符合條件的圖片,如果圖片不符合條件,則報錯“圖片不滿足傳輸條件”,載入成功后,點擊發送按鈕,傳輸完成后應用軟件給出“圖片發送完畢”的提示,如圖5所示。在多次實驗中,系統都能準確快速地傳送二維碼圖片。

圖5 測試界面圖Fig.5 Test interface
本文介紹的高解析噴碼機[7]中的USB數據[8]傳輸系統采用價格比較低廉的芯片,經過合理的硬件設計和軟件編寫,滿足了二維碼圖片的傳輸要求。該系統已用于某噴碼機的數據傳輸,應用結果表明該數據傳輸系統具有傳輸速度快,可靠穩定的特點,達到了設計的要求。
[1]胡曉軍,張愛成.USB接口開發技術[M].1版.西安:西安電子科技大學出版社,2005.
[2]周立功.PDIUSBD12USB固件編程與驅動開發[M].北京:北京航空航天大學出版社,2003.
[3]陳啟美,丁傳鎖.計算機USB接口技術[M].1版.南京:南京大學出版社,2003.
[4]肖踞雄,翁鐵成,宋中慶.USB技術及應用設計[M].北京:清華大學出版社,2003.
[5]楊金巖,鄭應強,張振仁.8051單片機數據傳輸接口擴展技術與應用實例[M].1版.北京:人民郵電出版社,2005.
[6]徐愛鈞,彭秀華.單片機高級語言C51應用程序設計[M].北京:電子工業出版社,2001.
[7]王宏文,黃金蘭,董苗.流水線上嵌入式噴碼機系統設計[J].現代電子技術,2014(9):107-110.WANF Hong-wen,HUANG Jin-lan,DONG Miao.Design of embedded ink-jet printer system in production line[J].Modern Electronics Technique,2014(9):107-110.
[8]孫學君,白譜偉.數字合成掃頻儀USB2.0接口設計[J].電子科技,2012(5):73-75.SUN Xue-jun,BAI Pu-wei.Designs of the USB2.0 interface of the digital synthetic sweeper[J].Electronic Science and Technology,2012(5):73-75.