利用1-Wire?鏈路功能獲取位置信息—一種確定器
本文還發(fā)表在Maxim工程期刊,第60期(PDF, 848kB)。
數(shù)字總線系統(tǒng)的共同特性即為共享。隨著微處理器的推廣,并行總線系統(tǒng)應(yīng)用日益廣泛,總線上掛接的所有元件共享數(shù)據(jù)線和地址線。片選信號可由地址線和控制信號解碼得到。根據(jù)硬件設(shè)計和布線,連接在總線上的各個器件的物理地址總是已知的。隨著技術(shù)向低成本串行總線系統(tǒng)的發(fā)展1,首先省去了地址線。但SPI?和MICROWIRE?串行總線仍具有片選功能。許多先進的串行總線系統(tǒng)引入了基于協(xié)議的尋址方式,將地址信息作為一個前導(dǎo)碼傳輸給數(shù)據(jù)。該類總線的典型代表為I2C/SMBus?,此類通信接口縮減到只有數(shù)據(jù)線和時鐘線。為了進一步降低成本,可以將時鐘信息嵌入到數(shù)據(jù)流中。該類總線的典型代表為1-Wire、LIN和SensorPath?總線。
由于采用了基于協(xié)議的尋址方式,因此元件物理位置方面的信息將缺失。對于采用串行總線的儀表和控制應(yīng)用(例如測量多點溫度),這將是一個問題。對于I2C總線而言,地址引腳與邏輯1、邏輯0、SCL或SDA相連,在某種程度上解決了這個問題。采用這一辦法,單個引腳可被設(shè)定到4種不同的數(shù)字狀態(tài),相當(dāng)于兩個位。盡管這種方法簡單、有效,但由于最初的I2C協(xié)議僅提供7個地址位,因此具有一定的局限性。1-Wire總線具有64位地址,在這一方面可提供更高的靈活性。無論如何,每個增加一個地址引腳將增加成本,因此增加地址引腳不是一個好的選擇。
圖1給出了一種簡單的低成本方案,可重新獲取串行總線上掛接的多個器件的物理位置,將網(wǎng)絡(luò)的起始位置的器件標(biāo)識為位置#1,并依次為網(wǎng)絡(luò)上掛接的器件編號。該方案的電路連接如圖中藍(lán)色粗線所示。在位置1處,線路接地即可。
圖1. 可進行位置檢測的串行網(wǎng)絡(luò)
除了圖1中標(biāo)有IN和OUT的兩個引腳外,還需要通過片上邏輯讀取IN引腳和寫OUT引腳。如果協(xié)議支持多點網(wǎng)絡(luò)功能,那么借助于上述這些方法,主機可首先識別出第一個器件,然后再識別下一個器件,以此類推,直到完成對所有器件的定位。1-Wire總線即可滿足這一要求的串行總線系統(tǒng)。
1-Wire總線是一種簡單的信令協(xié)議,可通過一條公共數(shù)據(jù)線實現(xiàn)主機/主控制器和一個或多個從機之間的半雙工、雙向通信(圖2)??梢酝ㄟ^單根1-Wire總線實現(xiàn)供電以及與從機之間的數(shù)據(jù)通信。供電通過以下方式實現(xiàn):在數(shù)據(jù)傳輸過程中,總線狀態(tài)為高時從機的內(nèi)部電容從總線上獲取電荷,總線狀態(tài)為低時利用該電荷為器件供電。典型的1-Wire主機包括一個開漏I/O引腳,并通過電阻上拉至3V至5V電源。采用這種智能通信技術(shù),可以隨時方便、高效地增加存儲器、認(rèn)證和混合信號功能。
圖2. 不帶鏈路功能的典型1-Wire網(wǎng)絡(luò)
所有的1-Wire系統(tǒng)都有一個重要的基本特征:每個從機都具有一個唯一的、不能更改(ROM)的64位、工廠激光刻制序列號(ID),這個序列號永遠(yuǎn)不會與其它器件重復(fù)。除了為終端產(chǎn)品提供唯一的電子ID外,64位ROM ID還允許主機從掛接在同一條總線上的許多從機設(shè)備中選擇一個器件。64位ROM ID中包含有8位家族碼,用于識別器件的類型和支持的功能。
通常,當(dāng)系統(tǒng)啟動初始化時,1-Wire主機可能并不知道總線上掛接的器件數(shù)量以及他們的ROM ID。利用總線的線與特性,主機可采用排除法確定總線上掛接的所有器件的ID。通過SearchROM*功能2,主機可確定總線上所掛接器件的ROM ID。然而,Search ROM結(jié)果無法提供單個器件的位置。例如,如圖2所示的器件ROM ID,器件的ID按照表1所示的順序獲取。
表1. 器件搜索順序
鏈路功能的概念
采用鏈路功能確定1-Wire網(wǎng)絡(luò)環(huán)境中器件的物理位置時,遵循以下幾點:- 已知系統(tǒng)級1-Wire網(wǎng)絡(luò)的物理分布,例如第一個、誰是第二個,等等,以及器件/節(jié)點的物理位置。
- 獲取器件(ROM ID)的物理連接順序,哪個是第一個,哪個是最后一個。
圖3. 具有鏈路功能的DS28EA00在1-Wire網(wǎng)絡(luò)中的典型連接
/EN和/DONE引腳除了用于順序搜索之外,還可作為數(shù)字PIO。為了實現(xiàn)這一功能,鏈路功能定義了三種鏈路狀態(tài),OFF、ON和DONE。通過Chain命令控制鏈路狀態(tài)的轉(zhuǎn)換。表2給出了鏈路狀態(tài)及相應(yīng)工作狀態(tài)。
表2. 鏈路狀態(tài)
上電默認(rèn)鏈路狀態(tài)為OFF,此時/DONE (PIOA)和/EN (PIOB)由PIO Access Read和PIO Access Write命令單獨控制,如DS28EA00數(shù)據(jù)資料所述3。鏈路狀態(tài)為ON時,/DONE通過一個40kΩ的片上電阻(RCO)上拉至器件內(nèi)部電源VDD,進而向下一個器件的/EN引腳發(fā)送邏輯‘1’信號。如果/EN引腳為邏輯‘0’,則僅處于ON鏈路狀態(tài)的器件才能響應(yīng)Conditional Read ROM命令。在順序搜索過程中,網(wǎng)絡(luò)中器件的最大值應(yīng)滿足這一條件。
要將器件從Chain OFF轉(zhuǎn)換為Chain ON或Chain DONE狀態(tài),主機需采用Chain命令實現(xiàn)。圖4給出了各種可能的轉(zhuǎn)換。Chain命令代碼后,主機必須緊接著發(fā)送一個適當(dāng)?shù)腃hain Control字節(jié)。為了降低接收錯誤Chain命令的幾率,首先以原碼形式發(fā)送控制字節(jié),然后再以反碼形式發(fā)送。當(dāng)主機接收到AAh確認(rèn)字節(jié)時,表明鏈路狀態(tài)成功轉(zhuǎn)換。
圖4.鏈路狀態(tài)轉(zhuǎn)換圖
開始順序搜索時,主機必須將所有器件都置為Chain ON狀態(tài)。當(dāng)主機通過Conditional Read ROM讀取完一個的器件ROM ID后,應(yīng)該將該器件置為Chain DONE狀態(tài),從而允許鏈路中的下一個器件以響應(yīng)Conditional Read ROM命令。在順序搜索的過程中,器件將依次進入Chain DONE狀態(tài),直到搜索完所有器件。最后,所有器件都被設(shè)置到Chain OFF狀態(tài),從而釋放/EN和/DONE引腳,使之變?yōu)镻IO,并恢復(fù)到上電默認(rèn)狀態(tài)。
順序搜索例程
前提 主機控制網(wǎng)絡(luò)如圖3所示。所有器件都支持鏈路功能。若要搜索鏈路中器件的順序,例如位置編號以及該處器件的ROM ID (即注冊碼),主機需執(zhí)行以下步驟:初始化 主機發(fā)送Skip ROM命令,緊接著發(fā)送Chain ON命令,將所有器件置于Chain ON狀態(tài)。除了鏈路中的第一個器件之外,對于其它所有器件,通過/DONE引腳的RCO上拉電阻將/DONE//EN變?yōu)檫壿?。
第一個周期 主機發(fā)送Conditional Read ROM命令,鏈路中的第一個器件對命令進行響應(yīng),可得到第一個器件的64位ROM ID。主機存儲該ROM ID,并將其確定為鏈路的第一個器件。隨后,主機發(fā)送Chain DONE命令。該命令通過器件#1的/DONE引腳,將鏈路中第二個器件的/EN引腳設(shè)置為邏輯0,同時防止器件#1再次響應(yīng)。終止 搜索過程結(jié)束后,鏈路中的所有器件都處于Chain DONE狀態(tài)。主機應(yīng)發(fā)送Skip ROM命令后,緊接著發(fā)送Chain OFF命令,用于終止順序搜索。這樣可將所有器件都進入Chain OFF狀態(tài),變成由PIO Access功能命令控制PIO引腳。關(guān)于Conditional Read ROM和Chain命令的詳細(xì)說明,以及完整的流程圖,請參考DS28EA00數(shù)據(jù)資料4。
第二個周期 主機發(fā)送Conditional Read ROM命令。由于此時器件#2是鏈路中唯一一個/EN為邏輯0的器件,因此該器件發(fā)送其ROM ID作為響應(yīng)。主機將該ROM ID保存為序列碼'2'。(器件#1處于Chain DONE狀態(tài),所以不會響應(yīng)該命令。) 隨后,主機發(fā)送Chain DONE命令。
重復(fù)周期 要識別剩余器件的ROM ID及其物理位置,主機需要重復(fù)發(fā)送Conditional Read ROM和Chain DONE命令。如果沒有器件響應(yīng)Conditional Read ROM命令,說明鏈路中的所有器件均已被識別。
假定采用標(biāo)準(zhǔn)的1-Wire速率(復(fù)位/在線檢測周期為960μs,每個時隙為65μs),初始化和結(jié)束共約用去7ms (一次總共占用的時間)。各個器件的搜索和位置檢測約占用7.7ms。相同條件下,執(zhí)行Search ROM命令時,每個器件約占用14ms。例如,在100ms之內(nèi),如果具有鏈路功能的話,主機能識別和定位12個器件,但是如果僅依靠Search ROM功能的話,主機只能識別7個器件。
補充說明
電纜電容 常用于構(gòu)建1-Wire網(wǎng)絡(luò)的5類電話線的每對雙絞線對之間具有大約50pF/m的電容。根據(jù)網(wǎng)絡(luò)的規(guī)模,當(dāng)所有器件都處于Chain ON狀態(tài)時,會給線路增加非常大的電容負(fù)載。在寄生供電模式下,有時候需要采用有源1-Wire線路上拉,這樣可避免電壓跌落至最小允許值以下。采用主電源或本地VCC電源供電時無需采用這一措施。Conditional Read ROM DS2401及其兼容的、1993年停產(chǎn)的DS2400硅序列號,均將這一命令讀為Read ROM。因此,不要將DS2401連接到采用鏈路功能的網(wǎng)絡(luò)中。所以,使用1-Wire端口適配器時,應(yīng)選擇不帶DS2401的器件。DS2405版本A也能像DS2401一樣響應(yīng)Conditional Read ROM命令代碼。1998年開始投產(chǎn)的DS2405版本B則會忽略Conditional Read ROM命令代碼。
1-Wire主控制器電路 在嵌入式應(yīng)用環(huán)境下,可采用各種低成本、分立式、基于IC的1-Wire主控制器。分立解決方案包括上拉電阻、空閑的μC端口引腳以及高級驅(qū)動器5。專門用于驅(qū)動1-Wire總線的集成驅(qū)動器包括DS2480B6 (串行端口,UART),DS24907 (USB端口)以及DS24828,9 (I2C端口,圖5)。8通道版本的DS2482具有3個地址引腳,允許單個主控制器控制多達64個獨立的1-Wire網(wǎng)絡(luò)。應(yīng)用筆記192,"DS2480B串行接口1-Wire線驅(qū)動器的使用"10,從軟件開發(fā)的角度對DS2480B進行了說明。與之類似的一篇針對DS2482驅(qū)動器的文章也可供參考11。
圖5. 單通道I2C至1- Wire橋接器件DS2482作為1-Wire主控制器。其/DONE輸出也可用于驅(qū)動一個LED,并不會影響鏈路功能。
電源 如果提供VCC電源,所有DS28EA00可同時進行溫度轉(zhuǎn)換。隨后發(fā)送Conditional Search命令,可以篩選出那些發(fā)出報警溫度的器件。通過順序搜索,可得出器件的ROM ID及其位置信息,能迅速知道需要在哪些地方采取糾正措施。如果沒有VCC電源,溫度轉(zhuǎn)換必須依次進行。此外,開始進行順序搜索時(所有器件從Chain OFF狀態(tài)轉(zhuǎn)換至Chain ON狀態(tài)),必須確保1-Wire數(shù)據(jù)線路上的電壓不會跌落的太多。
速率 高速模式下的快速時序不適用于包含多個器件,或超過3m的1-Wire網(wǎng)絡(luò);此時應(yīng)采用標(biāo)準(zhǔn)速率替代。根據(jù)網(wǎng)絡(luò)中的器件數(shù)量,即使采用標(biāo)準(zhǔn)速率,也需要延長恢復(fù)時間,特別是當(dāng)采用寄生電源供電時12。
故障診斷 如果無法實現(xiàn)順序搜索,則在發(fā)送Chain ON命令后,察看1-Wire線路上的壓降。如果電壓跌落至3.0V以下,則命令有可能不能正常執(zhí)行。為了避免電壓跌落,Chain ON以后,可采用帶有源上拉的驅(qū)動電路,或者采用主電源供電。如果鏈路中第一個器件的/EN輸入開路、或者連接至1-Wire線路,或者連接至VCC,都將導(dǎo)致順序檢測失敗。確保網(wǎng)絡(luò)中無DS2401。不允許將并聯(lián)的兩個或多個網(wǎng)絡(luò)連接至同一個1-Wire端口,因此此時所有的“首個器件”將同時響應(yīng),這樣會得到帶無效CRC字節(jié)的ROM ID。
評論