本發(fā)明涉及數(shù)據(jù)傳輸與處理領(lǐng)域,特別涉及一種基于spi(同步串行外設(shè)接口)協(xié)議的數(shù)據(jù)流控系統(tǒng)及方法,從而將spi改造成異步雙向數(shù)據(jù)通信接口。
背景技術(shù):
目前,具有票據(jù)打印功能的移動pos(銷售點)機,包含嵌入式主機平臺、打印機以及移動網(wǎng)絡(luò)連接等功能,具有集成度高、功能完整的特點。
移動pos機的主機平臺使用cpu(中央處理器)方案,一般都存在一定的接口限制,其可提供的接口類型只有以下幾種:usbotg(是usbon-the-go的縮寫,主要應(yīng)用于各種不同的設(shè)備或移動設(shè)備間的聯(lián)接,進行數(shù)據(jù)交換)、uart(通用同步/異步串行接收/發(fā)送器)、iic(集成電路總線)和spi。
移動pos集成的打印機,與其主機之間的數(shù)據(jù)通信接口,如果是通用數(shù)據(jù)接口的話,就只有usb和uart可以選擇。但是,主機平臺cpu往往只提供一個usbotg,如果將其配置為host(主機)連接打印機,那么主機將無法提供usbdebug(故障調(diào)試)功能,這會造成很多的不便。如果選擇uart,要當心其傳輸速率無法滿足打印機速度的問題。
在usb和uart都不能選擇的情況下,iic和spi也就成為可選項。iic控制總線的傳輸速率也不高,打印機的控制mcu(微控制單元)的iic總線最高速率也只有400k,跟uart同樣存在傳輸速率問題。spi接口的傳輸速率可以達到20mb/s以上,而且協(xié)議簡單、占用引腳少,可以通過簡單的軟件協(xié)議實現(xiàn)高速數(shù)據(jù)傳輸。
但是,spi接口存在一個缺點:沒有指定的流控制,沒有應(yīng)答機制確認是否接收到數(shù)據(jù)。而打印機數(shù)據(jù)接口接收數(shù)據(jù),如果數(shù)據(jù)丟失的話,最直接 的結(jié)果就是打印錯亂,所以需要有很好的流控或校驗機制。但在數(shù)據(jù)傳輸速率要求比較高的情況下,校驗機制往往比較難實現(xiàn);所以實現(xiàn)流控機制是必需的。
更有甚者,打印機還是一個需要自動上報異常狀態(tài)的設(shè)備,在接口沒有數(shù)據(jù)傳輸?shù)那闆r下,一旦打印機發(fā)生異常,是需要打印機主動將信息傳輸?shù)街鳈C,而spi是不支持從設(shè)備主動向主機傳輸數(shù)據(jù)的。所以實現(xiàn)異步傳輸機制也是必須的。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是現(xiàn)有的移動pos機等系統(tǒng)利用spi接口進行通信時不具備完整的控制導(dǎo)致主機和從機間信息交互出現(xiàn)錯誤的缺陷,提供一種基于spi協(xié)議的數(shù)據(jù)流控系統(tǒng)及方法。
本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:
本發(fā)明提供一種基于spi協(xié)議的數(shù)據(jù)流控系統(tǒng),其包括一主機和一從機,該主機和該從機通過spi協(xié)議進行通信,其特點在于,該從機的端口包括至少兩個io(輸入輸出)口,該主機包括一主控制器,該從機包括一從控制器;
該從控制器用于在該從機準備好接收數(shù)據(jù)之前將該兩個io口的狀態(tài)設(shè)置為第一狀態(tài),在該從機準備好接收數(shù)據(jù)時將該兩個io口的狀態(tài)設(shè)置為第二狀態(tài),在該從機接收完一數(shù)據(jù)包時將該兩個io口的狀態(tài)設(shè)置為第三狀態(tài),在該從機接收完一數(shù)據(jù)包后且準備接收下一數(shù)據(jù)包時將該兩個io口的狀態(tài)設(shè)置為該第二狀態(tài);
該主控制器用于在檢測到該兩個io口的狀態(tài)為該第一狀態(tài)時不發(fā)送數(shù)據(jù)包給該從機,在檢測到該兩個io口的狀態(tài)為該第二狀態(tài)或該第三狀態(tài)時發(fā)送該數(shù)據(jù)包至該從機。
spi協(xié)議本身是沒有流控機制的,而從其協(xié)議上看,用軟件方式實現(xiàn)流控也是不可能的,所以,本方案考慮增加硬件流控方式,也就是增加狀態(tài)io 口以表達接收端即打印機的閑忙狀態(tài)。
較佳地,該從控制器用于在該從機的緩沖區(qū)存滿時保持該兩個io口的狀態(tài)不變直至該緩沖區(qū)空閑,且將該兩個io口的狀態(tài)設(shè)置為該第二狀態(tài)或該第三狀態(tài)。
較佳地,該從控制器用于在該從機出現(xiàn)異常情況時,將該兩個io口的狀態(tài)設(shè)置為第四狀態(tài);
該主控制器用于在檢測到該兩個io口的狀態(tài)為該第四狀態(tài)時發(fā)送一詢問包至該從機;
該從控制器還用于發(fā)送一該從機出現(xiàn)異常情況的信息至該主機。
較佳地,該主控制器用于在未發(fā)送數(shù)據(jù)包的時間達到一設(shè)定時間時發(fā)送一休眠信號至該從機,該從控制器用于將該兩個io口的狀態(tài)設(shè)置為該第一狀態(tài)。
較佳地,該主控制器用于在再次需要發(fā)送數(shù)據(jù)包時發(fā)送一喚醒信號至該從機,該從控制器用于將該兩個io口的狀態(tài)設(shè)置為該第二狀態(tài)。
本發(fā)明還提供一種基于spi協(xié)議的數(shù)據(jù)流控方法,其特點在于,其利用上述的基于spi協(xié)議的數(shù)據(jù)流控系統(tǒng)實現(xiàn),該數(shù)據(jù)流控方法包括以下步驟:
s1、在該從機準備好接收數(shù)據(jù)之前,該從控制器將該兩個io口的狀態(tài)設(shè)置為該第一狀態(tài);
s2、該主控制器檢測該兩個io口的狀態(tài)為該第一狀態(tài),控制不發(fā)送數(shù)據(jù)包給該從機;
s3、該從機準備好接收數(shù)據(jù),該從控制器將該兩個io口的狀態(tài)設(shè)置為第二狀態(tài);
s4、該主控制器檢測該兩個io口的狀態(tài)為該第二狀態(tài),控制發(fā)送該數(shù)據(jù)包至該從機;
s5、該從機接收該數(shù)據(jù)包,并發(fā)送一狀態(tài)包至該主機;
s6、該從機準備好接收下一數(shù)據(jù),該從控制器將該兩個io口的狀態(tài)設(shè)置為第三狀態(tài);
s6、該主控制器檢測該兩個io口的狀態(tài)為該第三狀態(tài),控制發(fā)送下一個數(shù)據(jù)包給該從機;
s7、該從機接收該下一個數(shù)據(jù)包,并發(fā)送該狀態(tài)包至該主機,進入步驟s3。
較佳地,該從控制器在該從機的緩沖區(qū)存滿時保持該兩個io口的狀態(tài)不變直至該緩沖區(qū)空閑,且將該兩個io口的狀態(tài)設(shè)置為該第二狀態(tài)或該第三狀態(tài)。
較佳地,該從控制器在該從機出現(xiàn)異常情況時,將該兩個io口的狀態(tài)設(shè)置為第四狀態(tài);
該主控制器在檢測到該兩個io口的狀態(tài)為該第四狀態(tài)時發(fā)送一詢問包至該從機;
該從控制器發(fā)送一該從機出現(xiàn)異常情況的信息至該主機。
較佳地,該主控制器在未發(fā)送數(shù)據(jù)包的時間達到一設(shè)定時間時發(fā)送一休眠信號至該從機,該從控制器將該兩個io口的狀態(tài)設(shè)置為該第一狀態(tài)。
較佳地,該主控制器在再次需要發(fā)送數(shù)據(jù)包時發(fā)送一喚醒信號至該從機,該從控制器將該兩個io口的狀態(tài)設(shè)置為該第二狀態(tài)。
在符合本領(lǐng)域常識的基礎(chǔ)上,上述各優(yōu)選條件,可任意組合,即得本發(fā)明各較佳實例。
本發(fā)明的積極進步效果在于:
本發(fā)明的基于spi協(xié)議的數(shù)據(jù)流控系統(tǒng)及方法,使得主機和從機之間實現(xiàn)很好的配合工作,能夠防止數(shù)據(jù)丟失,防止主機和從機間信息交互時出現(xiàn)錯誤,此外,休眠喚醒機制能夠有效地降低功耗。
附圖說明
圖1為本發(fā)明較佳實施例的基于spi協(xié)議的數(shù)據(jù)流控方法的流程圖。
具體實施方式
下面結(jié)合附圖給出本發(fā)明較佳實施例,以詳細說明本發(fā)明的技術(shù)方案,但并不因此將本發(fā)明限制在所述的實施例范圍之中。
本實施例提供一種基于spi協(xié)議的數(shù)據(jù)流控系統(tǒng),其包括一主機和一從機,該主機和該從機通過spi協(xié)議進行通信,該從機的端口包括至少兩個io口,該主機包括一主控制器,該從機包括一從控制器。
該主機作為spi主機設(shè)備,控制spi的發(fā)送時序及發(fā)送速率;該從機例如打印機作為spi從設(shè)備,只能被動接收主機發(fā)送下來的數(shù)據(jù);打印機端通過兩個io口與主機相連表示閑忙狀態(tài)。
如圖1所示,本實施例還提供一種基于spi協(xié)議的數(shù)據(jù)流控方法,其利用上述的基于spi協(xié)議的數(shù)據(jù)流控系統(tǒng)實現(xiàn),該數(shù)據(jù)流控方法包括以下步驟:
步驟101、在該從機(例如打印機)準備好接收數(shù)據(jù)之前,該從控制器將該兩個io口的狀態(tài)設(shè)置為該第一狀態(tài)(00,即均為低電平);
步驟102、該主控制器檢測該兩個io口的狀態(tài)為該第一狀態(tài),控制不發(fā)送數(shù)據(jù)包給該從機;
步驟103、該從機準備好接收數(shù)據(jù),該從控制器將該兩個io口的狀態(tài)設(shè)置為第二狀態(tài)(01,即一個低電平一個高電平);
步驟104、該主控制器檢測該兩個io口的狀態(tài)為該第二狀態(tài),控制發(fā)送256個字節(jié)的數(shù)據(jù)包至該從機;
步驟105、該從機接收該數(shù)據(jù)包,并發(fā)送一個256個字節(jié)的狀態(tài)包至該主機;
步驟106、該從機準備好接收下一數(shù)據(jù),該從控制器將該兩個io口的狀態(tài)由01更改設(shè)置為第三狀態(tài)(10,即一個高電平一個低電平);
步驟107、該主控制器檢測該兩個io口的狀態(tài)為該第三狀態(tài),控制發(fā)送下一個數(shù)據(jù)包給該從機;
步驟108、該從機接收該下一個數(shù)據(jù)包,并發(fā)送該狀態(tài)包至該主機,進入步驟103。
此外,該從控制器在該從機的緩沖區(qū)存滿時保持該兩個io口的狀態(tài)不 變直至該緩沖區(qū)空閑,且將該兩個io口的狀態(tài)設(shè)置為該第二狀態(tài)或該第三狀態(tài)。
由于該從機無法主動發(fā)送數(shù)據(jù),所以,在該從機出現(xiàn)異常情況(例如打印機翻蓋、過熱等)時,執(zhí)行以下步驟:步驟109、該從控制器將該兩個io口的狀態(tài)設(shè)置為第四狀態(tài)(11,即均為高電平);步驟110、該主控制器在檢測到該兩個io口的狀態(tài)為該第四狀態(tài)時發(fā)送一詢問包至該從機;步驟111、該從控制器發(fā)送一該從機出現(xiàn)異常情況的信息包至該主機。
主機端利用gpio引腳(gpio1、gpio2引腳對應(yīng)從控制器(mcu)的io狀態(tài)引腳,gpio3、gpio4引腳對應(yīng)mcu的休眠喚醒引腳)輔助完成上位機與打印機的通訊。gpio(gpio1、gpio2)取值0(第一狀態(tài)00)、1(第二狀態(tài)01)、2(第三狀態(tài)10)、3(第四狀態(tài)11)。值為0停止通訊,值3發(fā)送查詢包。gpio值變?yōu)?或2時,主機可以發(fā)信息包給打印機,同時收到打印機返回的等長度的信息包,主機根據(jù)約定對返回信息包進行分析處理,打印機收到包進行處理,如果接收緩沖區(qū)未滿,可以接收下一個包,打印機將gpio值改為2或1。如果打印機沒有改變gpio值,則主機不能繼續(xù)發(fā)包。
為降低功耗,流程中引入了休眠喚醒機制,如果長時間主機沒有打印任務(wù),主機利用gpio引腳(gpio3)使打印機進入休眠,降低功耗,即打印機收到休眠信號,把兩個io口的狀態(tài)設(shè)置為第一狀態(tài),停止接收數(shù)據(jù)包。主機有打印任務(wù)時,利用gpio引腳(gpio4)喚醒打印機,打印機收到喚醒信號,準備好后將兩個io的狀態(tài)設(shè)置第二狀態(tài),打印機可以開始接收主機數(shù)據(jù)包。
本實施例中,mcu接收spi數(shù)據(jù)包未做數(shù)據(jù)處理情況下,每秒可接收1200個包(每個包256個字節(jié))左右,即數(shù)據(jù)流量2.5mbit左右。
在本系統(tǒng)中的從機為打印機時,mcu接收spi數(shù)據(jù)包并且在打印機(選擇打印速度只有70mm/s的58熱敏打印機)做光柵位圖(80寬度位圖)打印情況下,每秒可發(fā)送200個數(shù)據(jù)包,打印效果流暢。上位機由于傳輸速度 很快,受打印頭速度限制,會提示數(shù)據(jù)阻塞,但數(shù)據(jù)沒有發(fā)生打印錯亂問題。
mcu接收spi數(shù)據(jù)包做光柵位圖(80寬度位圖)處理但不打印,每秒可發(fā)送725個數(shù)據(jù)包,即理論上spi結(jié)合數(shù)據(jù)流可支持80打印機320mm/s的光柵位圖打印。
由此可見,通過以上測試,可以確定spi數(shù)據(jù)異步流控通信速率能夠滿足產(chǎn)品化要求。
雖然以上描述了本發(fā)明的具體實施方式,但是本領(lǐng)域的技術(shù)人員應(yīng)當理解,這些僅是舉例說明,本發(fā)明的保護范圍是由所附權(quán)利要求書限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實質(zhì)的前提下,可以對這些實施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護范圍。