<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Microchip UNI/O總線(xiàn)技術(shù)及其應(yīng)用

          Microchip UNI/O總線(xiàn)技術(shù)及其應(yīng)用

          作者: 時(shí)間:2012-08-28 來(lái)源:網(wǎng)絡(luò) 收藏
          引言
          隨著嵌入式系統(tǒng)小型化的趨勢(shì),市場(chǎng)對(duì)減少器件間通信所用的I/O引腳數(shù)的需求與日俱增。科技公司開(kāi)發(fā)的UNI/O總線(xiàn)正滿(mǎn)足了這一需求,這個(gè)低成本且易于實(shí)現(xiàn)的解決方案,僅需要使用一個(gè)I/O引腳就可實(shí)現(xiàn)主從器件之間的通信。

          1 UNI/O總線(xiàn)介紹
          1.1 UNI/O總線(xiàn)的特點(diǎn)
          UNI/O總線(xiàn)具有如下特點(diǎn):
          ①UNI/O總線(xiàn)采用曼徹斯特編碼,只需一根信號(hào)線(xiàn)SCIO就可以實(shí)現(xiàn)數(shù)據(jù)的串行傳輸和同步控制。
          ②UNI/O總線(xiàn)是一種單主型總線(xiàn)。主器件負(fù)責(zé)肩動(dòng)和控制總線(xiàn)上的所有操作,決定總線(xiàn)的工作速度。主器件通常由單片機(jī)、ASIC等充當(dāng)。
          ③UNI/O總線(xiàn)具有雙向通信能力。有主發(fā)送從接收和從發(fā)送主接收兩種工作方式。
          ④UNI/O總線(xiàn)速度為10~100kbps。
          ⑤UNI/O從器件必須具有空閑模式和待機(jī)模式,也可選擇具有保持模式。
          1.2 UNI/O總線(xiàn)的幀格式
          1.2.1 位值定義
          由于采用的是曼徹斯特編碼,所以其位值由佗周期中間的信號(hào)跳變方向決定。UNI/O總線(xiàn)規(guī)定:從高到低的跳變是0,從低到高的跳變是1。
          1.2.2 幀結(jié)構(gòu)
          在UNI/O總線(xiàn)上進(jìn)行通信時(shí),指令、數(shù)據(jù)和地址的傳送都以字節(jié)為單位。字節(jié)傳送時(shí),高位在前,低位在后,前一個(gè)位之后立即傳輸下一個(gè)位,位與位之間沒(méi)有延遲。字節(jié)之后必須發(fā)送應(yīng)答序列,進(jìn)行主從應(yīng)答。圖1給出了通常情況下使用的基本字節(jié)幀結(jié)構(gòu)。

          a.JPG


          (1)主應(yīng)答位
          由主器件發(fā)送,取值為1或0。為1時(shí)稱(chēng)之為MAK,MAK告知從器件指令執(zhí)行將繼續(xù);為0時(shí)稱(chēng)之為NoMAK,NoMAK用來(lái)結(jié)束當(dāng)前指令,此后如有必要,從器件可以啟動(dòng)相應(yīng)的內(nèi)部處理。
          (2)從應(yīng)答位
          由被選定作為通信對(duì)象的從器件發(fā)送。該位為1時(shí)稱(chēng)之為SAK,SAK表明其前面的操作已成功完成;非1時(shí)稱(chēng)之為NoSAK。在從器件被選定之前,由于無(wú)從器件應(yīng)答,從應(yīng)答位應(yīng)為NoSAK。在從器件被選定之后,NoSAK用來(lái)表明通信產(chǎn)生了錯(cuò)誤。
          另外,UNI/O總線(xiàn)也考慮了對(duì)主器件的中斷功能的支持。當(dāng)主器件與具有保持模式的從器件進(jìn)行通信時(shí),如果主器件在下一個(gè)MAK位周期時(shí)間內(nèi)持續(xù)拉低SCIO,從器件就進(jìn)入了保持模式。要維持在保持模式應(yīng)繼續(xù)使SCIO為低電平。當(dāng)從器件處在保持模式時(shí),主器件就可以進(jìn)行對(duì)其他I/O設(shè)備的中斷處理工作,中斷處理結(jié)束后可通過(guò)發(fā)送MAK來(lái)終止保持過(guò)程,并繼續(xù)之前的通信。圖2給出了包含保持過(guò)程的字節(jié)幀結(jié)構(gòu)。

          b.JPG


          1.3 UNI/O總線(xiàn)的命令序列
          UNI/O總線(xiàn)的命令序列是指完成一條指令的執(zhí)行主從器件,需要在總線(xiàn)上傳送的各種信號(hào)和字節(jié)幀的有序組合。在UNI/O總線(xiàn)系統(tǒng)中,一條指令的執(zhí)行過(guò)程必須包括:總線(xiàn)準(zhǔn)備、主從同步、從器件選擇、指令傳輸和指令執(zhí)行等環(huán)節(jié)。
          1.3.1 總線(xiàn)定義的信號(hào)
          (1)待機(jī)脈沖
          待機(jī)脈沖是由主器件驅(qū)動(dòng)SCIO到高電平狀態(tài),并保持此狀態(tài)600μs以上形成的脈沖信號(hào)。待機(jī)脈沖通常用來(lái)通知總線(xiàn)上的所有從器件進(jìn)入待機(jī)模式,也可以用來(lái)提前終止一條指令的執(zhí)行。在執(zhí)行一條指令時(shí),如果是第一條指令,或者要選擇的從器件與上一條指令不同,或者上一條指令的執(zhí)行過(guò)程發(fā)生了錯(cuò)誤,本條指令的執(zhí)行都必須從產(chǎn)生待機(jī)脈沖開(kāi)始。
          (2)TSS信號(hào)
          TSS信號(hào)是由主器件驅(qū)動(dòng)SCIO到高電平狀態(tài),并保持此狀態(tài)10μs以上形成的脈沖信號(hào)。在一條指令成功執(zhí)行之后,若還要執(zhí)行下一條指令來(lái)對(duì)同一個(gè)從器件進(jìn)行操作,則后一條指令執(zhí)行過(guò)程的第一步只需產(chǎn)生一個(gè)TSS信號(hào),而不需要再產(chǎn)生待機(jī)脈沖。這樣,通信效率會(huì)更高。
          1.3.2 特殊功能字節(jié)幀
          (1)起始頭
          起始頭用來(lái)使從器件進(jìn)入正常工作模式,并同步從器件內(nèi)的時(shí)鐘。起始頭由5μs以上的持續(xù)低電平脈沖和緊跟其后的8位編碼“01010 101”組成。所有的從器件都可以從起始頭中獲知位周期的長(zhǎng)短,并以此為依據(jù)調(diào)整內(nèi)部時(shí)鐘,實(shí)現(xiàn)主從同步。起始頭之后的主應(yīng)答位應(yīng)為MAK,從應(yīng)答位正常情況應(yīng)為NoSAK。
          (2)地址幀
          地址幀用于選擇總線(xiàn)上特定的從器件進(jìn)行通信。從器件地址有8位和12位兩種類(lèi)型,由4位系列碼和4位或8位從器件碼組成。8位地址的傳輸只需一個(gè)地址幀,正常情況,其應(yīng)答序列由MAK和SAK組成。12位地址的傳輸需要兩個(gè)字節(jié)幀:高地址字節(jié)幀和緊跟其后的低地址字節(jié)幀。正常情況,低地址字節(jié)幀中的應(yīng)答序列應(yīng)該由MAK和SAK組成,高地址字節(jié)幀中的應(yīng)答序列則由MAK和NoSAK組成。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();