引言
MDB/ICP廣泛應(yīng)用于自助售賣系統(tǒng),實際上已經(jīng)成為自助售賣系統(tǒng)的行業(yè)標(biāo)準(zhǔn)通信協(xié)議。國內(nèi)也有采用這個標(biāo)準(zhǔn)的產(chǎn)品,基本上都是采用51單片機作為硬件解決方案,讓功能更強大的處理器S3C2410A支持該協(xié)議,可以大大提升自助售賣系統(tǒng)的軟硬件功能。
基于ARM處理器提供了一種讓高端處理器支持MDB/ICP的靈活方法,在該方法的引導(dǎo)下,也可以廣泛應(yīng)用在MIPS、Power PC等非ARM處理器芯片上,有很強的行業(yè)實用性。
1 MDB/ICP協(xié)議概述
MDB/ICP協(xié)議(Multi-Drop Bus/Internal Communication Protocol)是歐洲售貨機制造者協(xié)會制定的一套用于協(xié)調(diào)自動售貨機的主控制器(VMC)與多個外設(shè)(硬幣機、讀鈔機等)之間通信的協(xié)議。硬幣機和讀鈔機的標(biāo)準(zhǔn)首先是由Coinco在美國可口可樂公司的指定下開發(fā)的。這個標(biāo)準(zhǔn)于1993年被NAMA(National Automatic Merchandising Association)協(xié)會采用,經(jīng)過一個專門的工作組修訂后,于1994年被EVMMA(Euro-pean Vending Machine Manufacturers Association)采用。當(dāng)前的最新協(xié)議版本version 4.O在2009年4月由NAMA和EVA(European Vending Association)共同制定。
1.1 MDB協(xié)議串行位格式
MDB接口是工作在9 600 bps波特率的主從型串行總線接口,所有外圍設(shè)備(例如硬幣機、紙幣機、讀卡器等)均為主控制器VMC的從機。所有外圍設(shè)備與VMC之間的通信方式都一致。最多支持32個外設(shè)。
MDB協(xié)議的串行位格式為:9600 bps、1個起始位、8位數(shù)據(jù)、1個模式位(mode bit)和1個停止位。
1.2 MDB/ICP通信協(xié)議幀要求
在MDB總線上,VMC通過廣播方式向外發(fā)送命令。第一字節(jié)為地址字節(jié)(高5位為尋址信息,低3位為對外設(shè)的指令)。該字節(jié)被所有的外設(shè)讀取,但只有符合地址字節(jié)所指定的外設(shè)才處理其后的數(shù)據(jù)字節(jié),并做出反應(yīng)。在VMC到外設(shè)的數(shù)據(jù)中,地址字節(jié)的方式位被置1,數(shù)據(jù)字節(jié)的方式位被置0,外設(shè)通過檢驗接收到的方式位確認(rèn)是地址命令還是數(shù)據(jù)。當(dāng)數(shù)據(jù)從外設(shè)發(fā)送到主機時(最長36字節(jié)),最后送出的字節(jié)方式位被置1,標(biāo)志著數(shù)據(jù)發(fā)送完畢。
VMC向外設(shè)傳送的指令由一個地址字節(jié)、一些可選的數(shù)據(jù)字節(jié)與一個校驗和(CHK)字節(jié)構(gòu)成。發(fā)送指令后,外設(shè)應(yīng)答VMC的通信塊可以由一個數(shù)據(jù)塊和一個CHK字節(jié)組成,或者一個應(yīng)答字節(jié)(ACK),或者一個無應(yīng)答字節(jié)(NAK)。如果外設(shè)應(yīng)答數(shù)據(jù)塊的話,VMC將通過一個應(yīng)答字節(jié)(A-CK)、無應(yīng)答字節(jié)(NAK)或發(fā)字節(jié)(RET)應(yīng)答外設(shè)傳回的數(shù)據(jù)。
2 MDB/ICP協(xié)議應(yīng)用
自動售貨機(Vending Machine)是一種全新的商業(yè)零售形式,20世紀(jì)70年代自日本和歐美發(fā)展起來。它又被稱為24小時營業(yè)的微型超市。在日本,70%的罐裝飲料是通過自動售貨機售出的。全球著名飲料商可口可樂公司在全世界就布有50萬臺飲料自動售貨機現(xiàn)在,自動售貨機產(chǎn)業(yè)正在走向信息化并進(jìn)一步實現(xiàn)合理化。例如實行聯(lián)機方式,通過第三方無線網(wǎng)絡(luò)將自動售貨機內(nèi)的庫存信息和銷售記錄及時地傳送各營業(yè)點的電腦中,從而確保了商品的發(fā)送、補充以及商品選定的順利進(jìn)行,實現(xiàn)自動售貨設(shè)備的全球連鎖。并且可以通過第三方網(wǎng)絡(luò)對售貨終端進(jìn)行遠(yuǎn)程控制和監(jiān)測,通過以太網(wǎng)控制可以實現(xiàn)設(shè)備的云操作,將來也可以接入物聯(lián)網(wǎng)實現(xiàn)web操作購物。在市場對功能提出日益復(fù)雜化的要求下,傳統(tǒng)的51單片機+MDB設(shè)備的解決方案難以滿足市場的需求。在ARM處理器日漸流行的今日,采用S3C2410A來作為VMC是滿足客戶需求的解決方案。S3C2410A芯片功能模塊豐富,軟件支持良好,可以使Linux操作系統(tǒng)實現(xiàn)更為復(fù)雜的用戶功能需求。圖1是港灣教育售貨系統(tǒng)的框圖。
由圖1可知,該方案融合當(dāng)前最主流的嵌入式系統(tǒng)接口,足以實現(xiàn)功能強大的售貨系統(tǒng)來滿足客戶的需求。
2.1 S3C2410A芯片UART串行位格式
通過對S3C2410A數(shù)據(jù)手冊的研讀,會發(fā)現(xiàn)當(dāng)前一些主流的處理器芯片,比如S3C2410A,UART模塊不像傳統(tǒng)的51單片機一樣正好滿足MDB協(xié)議的串行位協(xié)議格式,S3C2410A的UART數(shù)據(jù)格式:最高115 200 bps、1個起始位、5~8位數(shù)據(jù)、1個奇偶校驗位(odd/even parity bit)、1或2個停止位。
2.2 S3C2410A支持MDB/ICP應(yīng)用方法
如果要想支持MDB協(xié)議,S3C2410A沒有mode bit可用,這樣對MDB總線上的數(shù)據(jù)判斷是地址字節(jié)還是數(shù)據(jù)字節(jié)和總線一幀數(shù)據(jù)什么時候結(jié)束在S3C2410A上無法判斷識別,這對最初制定的方案提出了嚴(yán)重的挑戰(zhàn),迫不得已要對S3C2410A成為MDB/IPC協(xié)議的VMC設(shè)備的可能性進(jìn)行預(yù)研,最直接的方式就是想到利用S3C2410A的可選的奇偶校驗位的值來逆推MDB設(shè)備的mode bit的值,讓奇偶校驗位來充當(dāng)MDB mode bit的作用,從而來判斷出S3C2410A接收MDB設(shè)備傳送的數(shù)據(jù)是否是結(jié)束了。經(jīng)過分析就可以得到表1所列的推理。
通過上面的分析,開始編寫測試程序,結(jié)果發(fā)現(xiàn)S3C2410A的串口設(shè)計的一個bug:當(dāng)配置UART LINECONTROL REG ULCONn的BITS[5:3]為“101”,選擇evenparity接收MDB總線的數(shù)據(jù)的時候,無論是構(gòu)造出來的數(shù)據(jù)1的位數(shù)為奇數(shù)個還是偶數(shù)個搭配具體的模式位,發(fā)現(xiàn)S3C2410A的UART ERRORSTATUS REG(UERSTATn)的bit2 frame error位并不能準(zhǔn)確的置位。想想S3C2410A這么流行的芯片竟然還有設(shè)計不完美的地方,幾乎要放棄的時候,本著一切皆有可能的原則,既然芯片都不可靠了,就索性測試一下,按照表1把ULCONn的BITS[5:3]設(shè)置為“100”,選擇odd parity接收數(shù)據(jù)。按常理推斷even parity的結(jié)果應(yīng)該和odd parity結(jié)果是一樣的,抱著試一試的態(tài)度,構(gòu)造測試代碼,結(jié)果出現(xiàn)了明顯的規(guī)律:當(dāng)模式位為“O”的時候,UERSTATn的bit2 frame error位可以準(zhǔn)確的置位;當(dāng)模式位為“1”的時候,UART TX/RX STATUS REG(UTRSTATn)的bit 0(receive buffer data ready)可以準(zhǔn)確置位,正常接收數(shù)據(jù)。得到這個規(guī)律之后,2410 VMC設(shè)備就可以準(zhǔn)確判斷出MDB設(shè)備發(fā)送過來的數(shù)據(jù)是否是收到了結(jié)束標(biāo)志。另外,當(dāng)VMC向MDB設(shè)備發(fā)送數(shù)據(jù)的時候,可以按照協(xié)議要求當(dāng)要發(fā)送地址字節(jié)時可設(shè)置ULCONn的BITS[5:3]為“110”,代表parity forced/checked as 1來把奇偶位強制1充當(dāng)模式位,地址字節(jié)發(fā)送結(jié)束之后調(diào)整ULCONn的BITS[5:3]為“111”來發(fā)送數(shù)據(jù)字節(jié)。至此,S3C2410A充當(dāng)MDB VMC設(shè)備可以得到完美的解決。下面是VMC接收總線數(shù)據(jù)的部分調(diào)試代碼片段。VMC向總線發(fā)送數(shù)據(jù)相對比較簡單,有興趣的讀者可以與筆者交流探討。
結(jié)語
本文給出了一種在嵌入式處理器ARM(S3C2410A)上實現(xiàn)MDB/ICP協(xié)議的實現(xiàn)方法,在工程實踐中,證明該方法準(zhǔn)確可靠,滿足了市場的需要,拓展了支持該協(xié)議的硬件平臺,豐富了支持該協(xié)議設(shè)備的軟件功能接口。本文的實現(xiàn)方法也可以應(yīng)用在其他嵌入式處理器上。