新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Microchip UNI/O總線技術及其應用

        Microchip UNI/O總線技術及其應用

        作者: 時間:2012-08-08 來源:網絡 收藏

        摘要:/O公司開發的一種創新型單I/O。本文分析了該的特點和通信原理,以11XXX系列EEPROM存儲器的為例,詳細介紹了/O從器件與單片機的接口,給出了硬件連接電路和存儲器讀寫操作的程序流程。
        關鍵詞:/O總線;11XXX系列EEPROM;單片機;接口

        引言
        隨著嵌入式系統小型化的趨勢,市場對減少器件間通信所用的I/O引腳數的需求與日俱增。科技公司開發的UNI/O總線正滿足了這一需求,這個低成本且易于實現的解決方案,僅需要使用一個I/O引腳就可實現主從器件之間的通信。

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

        本文引用地址:http://www.104case.com/article/148645.htm

        a.JPG


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

        b.JPG


        1.3 UNI/O總線的命令序列
        UNI/O總線的命令序列是指完成一條指令的執行主從器件,需要在總線上傳送的各種信號和字節幀的有序組合。在UNI/O總線系統中,一條指令的執行過程必須包括:總線準備、主從同步、從器件選擇、指令傳輸和指令執行等環節。
        1.3.1 總線定義的信號
        (1)待機脈沖
        待機脈沖是由主器件驅動SCIO到高電平狀態,并保持此狀態600μs以上形成的脈沖信號。待機脈沖通常用來通知總線上的所有從器件進入待機模式,也可以用來提前終止一條指令的執行。在執行一條指令時,如果是第一條指令,或者要選擇的從器件與上一條指令不同,或者上一條指令的執行過程發生了錯誤,本條指令的執行都必須從產生待機脈沖開始。
        (2)TSS信號
        TSS信號是由主器件驅動SCIO到高電平狀態,并保持此狀態10μs以上形成的脈沖信號。在一條指令成功執行之后,若還要執行下一條指令來對同一個從器件進行操作,則后一條指令執行過程的第一步只需產生一個TSS信號,而不需要再產生待機脈沖。這樣,通信效率會更高。
        1.3.2 特殊功能字節幀
        (1)起始頭
        起始頭用來使從器件進入正常工作模式,并同步從器件內的時鐘。起始頭由5μs以上的持續低電平脈沖和緊跟其后的8位編碼“01010 101”組成。所有的從器件都可以從起始頭中獲知位周期的長短,并以此為依據調整內部時鐘,實現主從同步。起始頭之后的主應答位應為MAK,從應答位正常情況應為NoSAK。
        (2)地址幀
        地址幀用于選擇總線上特定的從器件進行通信。從器件地址有8位和12位兩種類型,由4位系列碼和4位或8位從器件碼組成。8位地址的傳輸只需一個地址幀,正常情況,其應答序列由MAK和SAK組成。12位地址的傳輸需要兩個字節幀:高地址字節幀和緊跟其后的低地址字節幀。正常情況,低地址字節幀中的應答序列應該由MAK和SAK組成,高地址字節幀中的應答序列則由MAK和NoSAK組成。
        (3)指令幀
        指令幀用于傳送指令,由指令編碼和應答序列組成。指令編碼往各種UNI/O從器件中定義。指令幀中的主應答位應根據指令是否要求傳輸其他數據字節確定。當指令要求傳輸其他數據字節時,該位為MAK,否則為NoMAK。從應答位正常情況下為SAK。
        1.3.3 UNI/O總線的命令序列
        圖3所示的是用于執行8位地址從器件指令的命令序列。其中字節幀的數量在總線規范中未進行限制,只要前一個字節幀中的主應答位為MAK就表示期望傳輸下一個字節幀。不過,字節幀的實際數量必須符合從器件指令的使用規范。在此前提下,可以由用戶程序根據其功能決定。用于執行12位地址從器件指令的命令序列如圖4所示。

        c.JPG



        2 UNI/O從器件與單片機的接口設計
        11XXX系列EEPROM是公司最新推出的、支持UNI/O總線協議的存儲器產品。下面就以該存儲器的使用為例,詳細介紹UNI/O總線系統的設計方法。
        2.1 硬件設計
        圖5給出了11XXX系列EEPROM與單片機的接口原理圖。圖中,SCIO引腳上接一個20 kΩ的上拉電阻是為了確保總線在上電/掉電序列期間以及未被驅動時處于空閑狀態。VCC和VSS之間接入一個0.1μF的去耦電容是為了濾除VCC上的噪聲。

        d.JPG


        2.2 軟件設計
        2.2.1 UNI/O存儲器11XXX的操作指令
        11XXX系列存儲器共有9條操作指令,其指令編碼和功能描述如表1所列。

        e.JPG


        2.2.2 UNI/O存儲器11XXX的高級特性
        11XXX器件除了具有EEPROM存儲器的基本特性、支持UNI/O總線協議外,還有以下高級特性。這些高級特性也是編寫接口程序的基本依據。
        (1)內置了一個狀態寄存器
        狀態寄存器可以用來提供狀態信息和片內數據的保護控制。其各位的功能定義如下:
        ①Bit0。為寫進行位WIP,用于表明11XXX是否忙于寫操作。當它為1時,表明正在進行寫操作;為0時,表明沒有進行寫操作。此位只讀。要編寫高效率的寫存儲陣列程序,可采用WIP查詢來及時檢測寫周期的結束。
        ②Bit1。為寫使能鎖存器位WEL,用于表明寫使能鎖存器的狀態。當它為1時,鎖存器允許存儲陣列無保護塊和狀態寄存器的寫入操作;當置為0時,禁止寫入操作。只能使用WREN指令來將此位置1,但會在上電或成功執行了以下指令之一時復位。這些指令包括:WRDI、WRSR、WRITE、SETAL和ERAL。
        ③Bit2~Bit3。是塊保護位BP0和BP1,用于表明當前哪些塊被寫保護。這些位可以由用戶通過WRSR指令進行設置。這些位是非易失性的。表2給出了利用BP0和BP1對存儲器進行分塊保護的方案。

        f.JPG


        ④Bit4~Bit7。為無關位,讀出時為0。
        (2)包含一個讀操作地址指針
        在進行存儲陣列讀操作時,瀆操作地址指針會在每個字節發送后自動指向原地址加1的存儲單元。當到達最高地址時,如果主器件仍然發出MAK選擇繼續讀取,則地址指針的值會翻轉回到0x00地址處。在上電后,讀地址指針會保持上一次訪問的存儲單元的地址。
        (3)支持頁寫功能
        用WRITE指令可以向指定地址的存儲單元或者指定地址開始的存儲器區域寫入內容任意的數據。不過,在寫多個存儲單元時,必須限制在單個物理頁面內寫。物理頁邊界從頁大小(16字節)整數倍的地址開始,結束于頁大小的整數倍減1的地址。如果WRITE指令試圖跨越物理頁邊界進行,其結果是將超出頁邊界的數據寫回到當前頁的開始,即覆蓋先前存儲的數據,而不會如期望的那樣寫到下一貞。
        2.2.3 UNI/O存儲器11XXX的讀寫程序
        上電之后,由于11XXX處在關斷模式,而且總線處于高電平空閑狀態,所以主器件必須先在SCIO上產生一個高到低再到高的脈沖,使11XXX從關斷模式退出進入空閑模式,這樣11XXX才能按照命令序列所規定的流程響應總線上的其他信號,接收主器件發來的指令,并按指令要求完成規定的操作。
        (1)寫程序流程
        圖6是寫存儲陣列中未保護區塊的程序流程。圖中發送指令的操作可通過調用發送指令子程序來完成。圖7給出了發送指令程序流程。要寫存儲陣列中受保護的區塊,只需在執行WREN指令之前,用WRSR指令對BP0、BP1進行相應的設置,以暫時解除待寫區塊的保護,并在程序的最后再用WRSR指令對它們進行恢復即可。要全地址空間置1或擦除,必須先解除對整個存儲陣列的保護并使能寫操作,再發送SETAL或ERAL指令,指令發送之后用NoMAK來啟動內部寫操作,內部操作完成之后恢復對存儲陣列的保護即可。

        g.JPG


        (2)讀程序流程
        隨機讀存儲陣列的程序流程是:先發送READ指令,再發送待讀單元地址。先高地址字節,后低地址字節。然后,從器件就會將該地址中的數據送到總線上,主器件收到第一個數據字節后,若還要讀取更多的數據,可以發送應答信號MAK。之后,從器件用SAK應答,并送出下一個數據字節。若要結束讀操作,主器件只要發送NoMAK即可。
        要從存儲陣列的當前位置讀取數據可用CRRD指令來進行操作,其程序流程除了不需要傳送存儲器單元地址外,其余操作步驟與READ相同。

        結語
        UNI/O總線只有一根信號線,對I/O端口的占用最少,可有效地減小嵌入式系統的體積并降低產品成本,具有廣闊的前景。

        存儲器相關文章:存儲器原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 隆子县| 恩平市| 沁水县| 霍邱县| 丰县| 澎湖县| 聂拉木县| 安远县| 曲水县| 龙岩市| 云安县| 汉阴县| 横山县| 盐津县| 神木县| 峨边| 印江| 延庆县| 金川县| 小金县| 崇州市| 闽清县| 二连浩特市| 铜鼓县| 阿拉善左旗| 抚松县| 定日县| 兖州市| 寿宁县| 资阳市| 泉州市| 卓尼县| 庄河市| 盐亭县| 鄂托克旗| 沛县| 宁德市| 聊城市| 夏邑县| 虞城县| 绥江县|