Microchip UNI/O總線(xiàn)技術(shù)及其應用
摘要:UNI/O總線(xiàn)是Microchip公司開(kāi)發(fā)的一種創(chuàng )新型單I/O總線(xiàn)。本文分析了該總線(xiàn)的特點(diǎn)和通信原理,以11XXX系列EEPROM存儲器的應用為例,詳細介紹了UNI/O從器件與單片機的接口技術(shù),給出了硬件連接電路和存儲器讀寫(xiě)操作的程序流程。
關(guān)鍵詞:UNI/O總線(xiàn);11XXX系列EEPROM;單片機;接口技術(shù)
引言
隨著(zhù)嵌入式系統小型化的趨勢,市場(chǎng)對減少器件間通信所用的I/O引腳數的需求與日俱增。Microchip科技公司開(kāi)發(fā)的UNI/O總線(xiàn)正滿(mǎn)足了這一需求,這個(gè)低成本且易于實(shí)現的解決方案,僅需要使用一個(gè)I/O引腳就可實(shí)現主從器件之間的通信。
1 UNI/O總線(xiàn)介紹
1.1 UNI/O總線(xiàn)的特點(diǎn)
UNI/O總線(xiàn)具有如下特點(diǎn):
①UNI/O總線(xiàn)采用曼徹斯特編碼,只需一根信號線(xiàn)SCIO就可以實(shí)現數據的串行傳輸和同步控制。
②UNI/O總線(xiàn)是一種單主型總線(xiàn)。主器件負責肩動(dòng)和控制總線(xiàn)上的所有操作,決定總線(xiàn)的工作速度。主器件通常由單片機、ASIC等充當。
③UNI/O總線(xiàn)具有雙向通信能力。有主發(fā)送從接收和從發(fā)送主接收兩種工作方式。
④UNI/O總線(xiàn)速度為10~100kbps。
⑤UNI/O從器件必須具有空閑模式和待機模式,也可選擇具有保持模式。
1.2 UNI/O總線(xiàn)的幀格式
1.2.1 位值定義
由于采用的是曼徹斯特編碼,所以其位值由佗周期中間的信號跳變方向決定。UNI/O總線(xiàn)規定:從高到低的跳變是0,從低到高的跳變是1。
1.2.2 幀結構
在UNI/O總線(xiàn)上進(jìn)行通信時(shí),指令、數據和地址的傳送都以字節為單位。字節傳送時(shí),高位在前,低位在后,前一個(gè)位之后立即傳輸下一個(gè)位,位與位之間沒(méi)有延遲。字節之后必須發(fā)送應答序列,進(jìn)行主從應答。圖1給出了通常情況下使用的基本字節幀結構。
(1)主應答位
由主器件發(fā)送,取值為1或0。為1時(shí)稱(chēng)之為MAK,MAK告知從器件指令執行將繼續;為0時(shí)稱(chēng)之為NoMAK,NoMAK用來(lái)結束當前指令,此后如有必要,從器件可以啟動(dòng)相應的內部處理。
(2)從應答位
由被選定作為通信對象的從器件發(fā)送。該位為1時(shí)稱(chēng)之為SAK,SAK表明其前面的操作已成功完成;非1時(shí)稱(chēng)之為NoSAK。在從器件被選定之前,由于無(wú)從器件應答,從應答位應為NoSAK。在從器件被選定之后,NoSAK用來(lái)表明通信產(chǎn)生了錯誤。
另外,UNI/O總線(xiàn)也考慮了對主器件的中斷功能的支持。當主器件與具有保持模式的從器件進(jìn)行通信時(shí),如果主器件在下一個(gè)MAK位周期時(shí)間內持續拉低SCIO,從器件就進(jìn)入了保持模式。要維持在保持模式應繼續使SCIO為低電平。當從器件處在保持模式時(shí),主器件就可以進(jìn)行對其他I/O設備的中斷處理工作,中斷處理結束后可通過(guò)發(fā)送MAK來(lái)終止保持過(guò)程,并繼續之前的通信。圖2給出了包含保持過(guò)程的字節幀結構。
1.3 UNI/O總線(xiàn)的命令序列
UNI/O總線(xiàn)的命令序列是指完成一條指令的執行主從器件,需要在總線(xiàn)上傳送的各種信號和字節幀的有序組合。在UNI/O總線(xiàn)系統中,一條指令的執行過(guò)程必須包括:總線(xiàn)準備、主從同步、從器件選擇、指令傳輸和指令執行等環(huán)節。
1.3.1 總線(xiàn)定義的信號
(1)待機脈沖
待機脈沖是由主器件驅動(dòng)SCIO到高電平狀態(tài),并保持此狀態(tài)600μs以上形成的脈沖信號。待機脈沖通常用來(lái)通知總線(xiàn)上的所有從器件進(jìn)入待機模式,也可以用來(lái)提前終止一條指令的執行。在執行一條指令時(shí),如果是第一條指令,或者要選擇的從器件與上一條指令不同,或者上一條指令的執行過(guò)程發(fā)生了錯誤,本條指令的執行都必須從產(chǎn)生待機脈沖開(kāi)始。
(2)TSS信號
TSS信號是由主器件驅動(dòng)SCIO到高電平狀態(tài),并保持此狀態(tài)10μs以上形成的脈沖信號。在一條指令成功執行之后,若還要執行下一條指令來(lái)對同一個(gè)從器件進(jìn)行操作,則后一條指令執行過(guò)程的第一步只需產(chǎn)生一個(gè)TSS信號,而不需要再產(chǎn)生待機脈沖。這樣,通信效率會(huì )更高。
1.3.2 特殊功能字節幀
(1)起始頭
起始頭用來(lái)使從器件進(jìn)入正常工作模式,并同步從器件內的時(shí)鐘。起始頭由5μs以上的持續低電平脈沖和緊跟其后的8位編碼“01010 101”組成。所有的從器件都可以從起始頭中獲知位周期的長(cháng)短,并以此為依據調整內部時(shí)鐘,實(shí)現主從同步。起始頭之后的主應答位應為MAK,從應答位正常情況應為NoSAK。
(2)地址幀
地址幀用于選擇總線(xiàn)上特定的從器件進(jìn)行通信。從器件地址有8位和12位兩種類(lèi)型,由4位系列碼和4位或8位從器件碼組成。8位地址的傳輸只需一個(gè)地址幀,正常情況,其應答序列由MAK和SAK組成。12位地址的傳輸需要兩個(gè)字節幀:高地址字節幀和緊跟其后的低地址字節幀。正常情況,低地址字節幀中的應答序列應該由MAK和SAK組成,高地址字節幀中的應答序列則由MAK和NoSAK組成。
(3)指令幀
指令幀用于傳送指令,由指令編碼和應答序列組成。指令及其編碼往各種UNI/O從器件中定義。指令幀中的主應答位應根據指令是否要求傳輸其他數據字節確定。當指令要求傳輸其他數據字節時(shí),該位為MAK,否則為NoMAK。從應答位正常情況下為SAK。
1.3.3 UNI/O總線(xiàn)的命令序列
圖3所示的是用于執行8位地址從器件指令的命令序列。其中字節幀的數量在總線(xiàn)規范中未進(jìn)行限制,只要前一個(gè)字節幀中的主應答位為MAK就表示期望傳輸下一個(gè)字節幀。不過(guò),字節幀的實(shí)際數量必須符合從器件指令的使用規范。在此前提下,可以由用戶(hù)程序根據其功能決定。用于執行12位地址從器件指令的命令序列如圖4所示。
2 UNI/O從器件與單片機的接口設計
11XXX系列EEPROM是Microchip技術(shù)公司最新推出的、支持UNI/O總線(xiàn)協(xié)議的存儲器產(chǎn)品。下面就以該存儲器的使用為例,詳細介紹UNI/O總線(xiàn)系統的應用設計方法。
2.1 硬件設計
圖5給出了11XXX系列EEPROM與單片機的接口原理圖。圖中,SCIO引腳上接一個(gè)20 kΩ的上拉電阻是為了確??偩€(xiàn)在上電/掉電序列期間以及未被驅動(dòng)時(shí)處于空閑狀態(tài)。VCC和VSS之間接入一個(gè)0.1μF的去耦電容是為了濾除VCC上的噪聲。
2.2 軟件設計
2.2.1 UNI/O存儲器11XXX的操作指令
11XXX系列存儲器共有9條操作指令,其指令編碼和功能描述如表1所列。
2.2.2 UNI/O存儲器11XXX的高級特性
11XXX器件除了具有EEPROM存儲器的基本特性、支持UNI/O總線(xiàn)協(xié)議外,還有以下高級特性。這些高級特性也是編寫(xiě)接口程序的基本依據。
(1)內置了一個(gè)狀態(tài)寄存器
狀態(tài)寄存器可以用來(lái)提供狀態(tài)信息和片內數據的保護控制。其各位的功能定義如下:
①Bit0。為寫(xiě)進(jìn)行位WIP,用于表明11XXX是否忙于寫(xiě)操作。當它為1時(shí),表明正在進(jìn)行寫(xiě)操作;為0時(shí),表明沒(méi)有進(jìn)行寫(xiě)操作。此位只讀。要編寫(xiě)高效率的寫(xiě)存儲陣列程序,可采用WIP查詢(xún)來(lái)及時(shí)檢測寫(xiě)周期的結束。
②Bit1。為寫(xiě)使能鎖存器位WEL,用于表明寫(xiě)使能鎖存器的狀態(tài)。當它為1時(shí),鎖存器允許存儲陣列無(wú)保護塊和狀態(tài)寄存器的寫(xiě)入操作;當置為0時(shí),禁止寫(xiě)入操作。只能使用WREN指令來(lái)將此位置1,但會(huì )在上電或成功執行了以下指令之一時(shí)復位。這些指令包括:WRDI、WRSR、WRITE、SETAL和ERAL。
③Bit2~Bit3。是塊保護位BP0和BP1,用于表明當前哪些塊被寫(xiě)保護。這些位可以由用戶(hù)通過(guò)WRSR指令進(jìn)行設置。這些位是非易失性的。表2給出了利用BP0和BP1對存儲器進(jìn)行分塊保護的方案。
④Bit4~Bit7。為無(wú)關(guān)位,讀出時(shí)為0。
(2)包含一個(gè)讀操作地址指針
在進(jìn)行存儲陣列讀操作時(shí),瀆操作地址指針會(huì )在每個(gè)字節發(fā)送后自動(dòng)指向原地址加1的存儲單元。當到達最高地址時(shí),如果主器件仍然發(fā)出MAK選擇繼續讀取,則地址指針的值會(huì )翻轉回到0x00地址處。在上電后,讀地址指針會(huì )保持上一次訪(fǎng)問(wèn)的存儲單元的地址。
(3)支持頁(yè)寫(xiě)功能
用WRITE指令可以向指定地址的存儲單元或者指定地址開(kāi)始的存儲器區域寫(xiě)入內容任意的數據。不過(guò),在寫(xiě)多個(gè)存儲單元時(shí),必須限制在單個(gè)物理頁(yè)面內寫(xiě)。物理頁(yè)邊界從頁(yè)大小(16字節)整數倍的地址開(kāi)始,結束于頁(yè)大小的整數倍減1的地址。如果WRITE指令試圖跨越物理頁(yè)邊界進(jìn)行,其結果是將超出頁(yè)邊界的數據寫(xiě)回到當前頁(yè)的開(kāi)始,即覆蓋先前存儲的數據,而不會(huì )如期望的那樣寫(xiě)到下一貞。
2.2.3 UNI/O存儲器11XXX的讀寫(xiě)程序
上電之后,由于11XXX處在關(guān)斷模式,而且總線(xiàn)處于高電平空閑狀態(tài),所以主器件必須先在SCIO上產(chǎn)生一個(gè)高到低再到高的脈沖,使11XXX從關(guān)斷模式退出進(jìn)入空閑模式,這樣11XXX才能按照命令序列所規定的流程響應總線(xiàn)上的其他信號,接收主器件發(fā)來(lái)的指令,并按指令要求完成規定的操作。
(1)寫(xiě)程序流程
圖6是寫(xiě)存儲陣列中未保護區塊的程序流程。圖中發(fā)送指令的操作可通過(guò)調用發(fā)送指令子程序來(lái)完成。圖7給出了發(fā)送指令程序流程。要寫(xiě)存儲陣列中受保護的區塊,只需在執行WREN指令之前,用WRSR指令對BP0、BP1進(jìn)行相應的設置,以暫時(shí)解除待寫(xiě)區塊的保護,并在程序的最后再用WRSR指令對它們進(jìn)行恢復即可。要全地址空間置1或擦除,必須先解除對整個(gè)存儲陣列的保護并使能寫(xiě)操作,再發(fā)送SETAL或ERAL指令,指令發(fā)送之后用NoMAK來(lái)啟動(dòng)內部寫(xiě)操作,內部操作完成之后恢復對存儲陣列的保護即可。
(2)讀程序流程
隨機讀存儲陣列的程序流程是:先發(fā)送READ指令,再發(fā)送待讀單元地址。先高地址字節,后低地址字節。然后,從器件就會(huì )將該地址中的數據送到總線(xiàn)上,主器件收到第一個(gè)數據字節后,若還要讀取更多的數據,可以發(fā)送應答信號MAK。之后,從器件用SAK應答,并送出下一個(gè)數據字節。若要結束讀操作,主器件只要發(fā)送NoMAK即可。
要從存儲陣列的當前位置讀取數據可用CRRD指令來(lái)進(jìn)行操作,其程序流程除了不需要傳送存儲器單元地址外,其余操作步驟與READ相同。
結語(yǔ)
UNI/O總線(xiàn)只有一根信號線(xiàn),對I/O端口的占用最少,可有效地減小嵌入式系統的體積并降低產(chǎn)品成本,具有廣闊的應用前景。
存儲器相關(guān)文章:存儲器原理
評論