在S3C2410A上實(shí)現MDB/ICP協(xié)議
由圖1可知,該方案融合當前最主流的嵌入式系統接口,足以實(shí)現功能強大的售貨系統來(lái)滿(mǎn)足客戶(hù)的需求。本文引用地址:http://dyxdggzs.com/article/156613.htm
2.1 S3C2410A芯片UART串行位格式
通過(guò)對S3C2410A數據手冊的研讀,會(huì )發(fā)現當前一些主流的處理器芯片,比如S3C2410A,UART模塊不像傳統的51單片機一樣正好滿(mǎn)足MDB協(xié)議的串行位協(xié)議格式,S3C2410A的UART數據格式:最高115 200 bps、1個(gè)起始位、5~8位數據、1個(gè)奇偶校驗位(odd/even parity bit)、1或2個(gè)停止位。
2.2 S3C2410A支持MDB/ICP應用方法
如果要想支持MDB協(xié)議,S3C2410A沒(méi)有mode bit可用,這樣對MDB總線(xiàn)上的數據判斷是地址字節還是數據字節和總線(xiàn)一幀數據什么時(shí)候結束在S3C2410A上無(wú)法判斷識別,這對最初制定的方案提出了嚴重的挑戰,迫不得已要對S3C2410A成為MDB/IPC協(xié)議的VMC設備的可能性進(jìn)行預研,最直接的方式就是想到利用S3C2410A的可選的奇偶校驗位的值來(lái)逆推MDB設備的mode bit的值,讓奇偶校驗位來(lái)充當MDB mode bit的作用,從而來(lái)判斷出S3C2410A接收MDB設備傳送的數據是否是結束了。經(jīng)過(guò)分析就可以得到表1所列的推理。
通過(guò)上面的分析,開(kāi)始編寫(xiě)測試程序,結果發(fā)現S3C2410A的串口設計的一個(gè)bug:當配置UART LINECONTROL REG ULCONn的BITS[5:3]為“101”,選擇evenparity接收MDB總線(xiàn)的數據的時(shí)候,無(wú)論是構造出來(lái)的數據1的位數為奇數個(gè)還是偶數個(gè)搭配具體的模式位,發(fā)現S3C2410A的UART ERRORSTATUS REG(UERSTATn)的bit2 frame error位并不能準確的置位。想想S3C2410A這么流行的芯片竟然還有設計不完美的地方,幾乎要放棄的時(shí)候,本著(zhù)一切皆有可能的原則,既然芯片都不可靠了,就索性測試一下,按照表1把ULCONn的BITS[5:3]設置為“100”,選擇odd parity接收數據。按常理推斷even parity的結果應該和odd parity結果是一樣的,抱著(zhù)試一試的態(tài)度,構造測試代碼,結果出現了明顯的規律:當模式位為“O”的時(shí)候,UERSTATn的bit2 frame error位可以準確的置位;當模式位為“1”的時(shí)候,UART TX/RX STATUS REG(UTRSTATn)的bit 0(receive buffer data ready)可以準確置位,正常接收數據。得到這個(gè)規律之后,2410 VMC設備就可以準確判斷出MDB設備發(fā)送過(guò)來(lái)的數據是否是收到了結束標志。另外,當VMC向MDB設備發(fā)送數據的時(shí)候,可以按照協(xié)議要求當要發(fā)送地址字節時(shí)可設置ULCONn的BITS[5:3]為“110”,代表parity forced/checked as 1來(lái)把奇偶位強制1充當模式位,地址字節發(fā)送結束之后調整ULCONn的BITS[5:3]為“111”來(lái)發(fā)送數據字節。至此,S3C2410A充當MDB VMC設備可以得到完美的解決。下面是VMC接收總線(xiàn)數據的部分調試代碼片段。VMC向總線(xiàn)發(fā)送數據相對比較簡(jiǎn)單,有興趣的讀者可以與筆者交流探討。
評論