利用1-Wire?鏈路功能獲取位置信息—一種確定器
本文還發(fā)表在Maxim工程期刊,第60期(PDF, 848kB)。
數字總線(xiàn)系統的共同特性即為共享。隨著(zhù)微處理器的推廣,并行總線(xiàn)系統應用日益廣泛,總線(xiàn)上掛接的所有元件共享數據線(xiàn)和地址線(xiàn)。片選信號可由地址線(xiàn)和控制信號解碼得到。根據硬件設計和布線(xiàn),連接在總線(xiàn)上的各個(gè)器件的物理地址總是已知的。隨著(zhù)技術(shù)向低成本串行總線(xiàn)系統的發(fā)展1,首先省去了地址線(xiàn)。但SPI?和MICROWIRE?串行總線(xiàn)仍具有片選功能。許多先進(jìn)的串行總線(xiàn)系統引入了基于協(xié)議的尋址方式,將地址信息作為一個(gè)前導碼傳輸給數據。該類(lèi)總線(xiàn)的典型代表為I2C/SMBus?,此類(lèi)通信接口縮減到只有數據線(xiàn)和時(shí)鐘線(xiàn)。為了進(jìn)一步降低成本,可以將時(shí)鐘信息嵌入到數據流中。該類(lèi)總線(xiàn)的典型代表為1-Wire、LIN和SensorPath?總線(xiàn)。
由于采用了基于協(xié)議的尋址方式,因此元件物理位置方面的信息將缺失。對于采用串行總線(xiàn)的儀表和控制應用(例如測量多點(diǎn)溫度),這將是一個(gè)問(wèn)題。對于I2C總線(xiàn)而言,地址引腳與邏輯1、邏輯0、SCL或SDA相連,在某種程度上解決了這個(gè)問(wèn)題。采用這一辦法,單個(gè)引腳可被設定到4種不同的數字狀態(tài),相當于兩個(gè)位。盡管這種方法簡(jiǎn)單、有效,但由于最初的I2C協(xié)議僅提供7個(gè)地址位,因此具有一定的局限性。1-Wire總線(xiàn)具有64位地址,在這一方面可提供更高的靈活性。無(wú)論如何,每個(gè)增加一個(gè)地址引腳將增加成本,因此增加地址引腳不是一個(gè)好的選擇。
圖1給出了一種簡(jiǎn)單的低成本方案,可重新獲取串行總線(xiàn)上掛接的多個(gè)器件的物理位置,將網(wǎng)絡(luò )的起始位置的器件標識為位置#1,并依次為網(wǎng)絡(luò )上掛接的器件編號。該方案的電路連接如圖中藍色粗線(xiàn)所示。在位置1處,線(xiàn)路接地即可。

圖1. 可進(jìn)行位置檢測的串行網(wǎng)絡(luò )
除了圖1中標有IN和OUT的兩個(gè)引腳外,還需要通過(guò)片上邏輯讀取IN引腳和寫(xiě)OUT引腳。如果協(xié)議支持多點(diǎn)網(wǎng)絡(luò )功能,那么借助于上述這些方法,主機可首先識別出第一個(gè)器件,然后再識別下一個(gè)器件,以此類(lèi)推,直到完成對所有器件的定位。1-Wire總線(xiàn)即可滿(mǎn)足這一要求的串行總線(xiàn)系統。
1-Wire總線(xiàn)是一種簡(jiǎn)單的信令協(xié)議,可通過(guò)一條公共數據線(xiàn)實(shí)現主機/主控制器和一個(gè)或多個(gè)從機之間的半雙工、雙向通信(圖2)??梢酝ㄟ^(guò)單根1-Wire總線(xiàn)實(shí)現供電以及與從機之間的數據通信。供電通過(guò)以下方式實(shí)現:在數據傳輸過(guò)程中,總線(xiàn)狀態(tài)為高時(shí)從機的內部電容從總線(xiàn)上獲取電荷,總線(xiàn)狀態(tài)為低時(shí)利用該電荷為器件供電。典型的1-Wire主機包括一個(gè)開(kāi)漏I/O引腳,并通過(guò)電阻上拉至3V至5V電源。采用這種智能通信技術(shù),可以隨時(shí)方便、高效地增加存儲器、認證和混合信號功能。

圖2. 不帶鏈路功能的典型1-Wire網(wǎng)絡(luò )
所有的1-Wire系統都有一個(gè)重要的基本特征:每個(gè)從機都具有一個(gè)唯一的、不能更改(ROM)的64位、工廠(chǎng)激光刻制序列號(ID),這個(gè)序列號永遠不會(huì )與其它器件重復。除了為終端產(chǎn)品提供唯一的電子ID外,64位ROM ID還允許主機從掛接在同一條總線(xiàn)上的許多從機設備中選擇一個(gè)器件。64位ROM ID中包含有8位家族碼,用于識別器件的類(lèi)型和支持的功能。
通常,當系統啟動(dòng)初始化時(shí),1-Wire主機可能并不知道總線(xiàn)上掛接的器件數量以及他們的ROM ID。利用總線(xiàn)的線(xiàn)與特性,主機可采用排除法確定總線(xiàn)上掛接的所有器件的ID。通過(guò)SearchROM*功能2,主機可確定總線(xiàn)上所掛接器件的ROM ID。然而,Search ROM結果無(wú)法提供單個(gè)器件的位置。例如,如圖2所示的器件ROM ID,器件的ID按照表1所示的順序獲取。
表1. 器件搜索順序
鏈路功能的概念
采用鏈路功能確定1-Wire網(wǎng)絡(luò )環(huán)境中器件的物理位置時(shí),遵循以下幾點(diǎn):- 已知系統級1-Wire網(wǎng)絡(luò )的物理分布,例如第一個(gè)、誰(shuí)是第二個(gè),等等,以及器件/節點(diǎn)的物理位置。
- 獲取器件(ROM ID)的物理連接順序,哪個(gè)是第一個(gè),哪個(gè)是最后一個(gè)。

圖3. 具有鏈路功能的DS28EA00在1-Wire網(wǎng)絡(luò )中的典型連接
/EN和/DONE引腳除了用于順序搜索之外,還可作為數字PIO。為了實(shí)現這一功能,鏈路功能定義了三種鏈路狀態(tài),OFF、ON和DONE。通過(guò)Chain命令控制鏈路狀態(tài)的轉換。表2給出了鏈路狀態(tài)及相應工作狀態(tài)。
表2. 鏈路狀態(tài)
上電默認鏈路狀態(tài)為OFF,此時(shí)/DONE (PIOA)和/EN (PIOB)由PIO Access Read和PIO Access Write命令單獨控制,如DS28EA00數據資料所述3。鏈路狀態(tài)為ON時(shí),/DONE通過(guò)一個(gè)40kΩ的片上電阻(RCO)上拉至器件內部電源VDD,進(jìn)而向下一個(gè)器件的/EN引腳發(fā)送邏輯‘1’信號。如果/EN引腳為邏輯‘0’,則僅處于ON鏈路狀態(tài)的器件才能響應Conditional Read ROM命令。在順序搜索過(guò)程中,網(wǎng)絡(luò )中器件的最大值應滿(mǎn)足這一條件。
要將器件從Chain OFF轉換為Chain ON或Chain DONE狀態(tài),主機需采用Chain命令實(shí)現。圖4給出了各種可能的轉換。Chain命令代碼后,主機必須緊接著(zhù)發(fā)送一個(gè)適當的Chain Control字節。為了降低接收錯誤Chain命令的幾率,首先以原碼形式發(fā)送控制字節,然后再以反碼形式發(fā)送。當主機接收到AAh確認字節時(shí),表明鏈路狀態(tài)成功轉換。

圖4.鏈路狀態(tài)轉換圖
開(kāi)始順序搜索時(shí),主機必須將所有器件都置為Chain ON狀態(tài)。當主機通過(guò)Conditional Read ROM讀取完一個(gè)的器件ROM ID后,應該將該器件置為Chain DONE狀態(tài),從而允許鏈路中的下一個(gè)器件以響應Conditional Read ROM命令。在順序搜索的過(guò)程中,器件將依次進(jìn)入Chain DONE狀態(tài),直到搜索完所有器件。最后,所有器件都被設置到Chain OFF狀態(tài),從而釋放/EN和/DONE引腳,使之變?yōu)镻IO,并恢復到上電默認狀態(tài)。
順序搜索例程
前提 主機控制網(wǎng)絡(luò )如圖3所示。所有器件都支持鏈路功能。若要搜索鏈路中器件的順序,例如位置編號以及該處器件的ROM ID (即注冊碼),主機需執行以下步驟:初始化 主機發(fā)送Skip ROM命令,緊接著(zhù)發(fā)送Chain ON命令,將所有器件置于Chain ON狀態(tài)。除了鏈路中的第一個(gè)器件之外,對于其它所有器件,通過(guò)/DONE引腳的RCO上拉電阻將/DONE//EN變?yōu)檫壿?。
第一個(gè)周期 主機發(fā)送Conditional Read ROM命令,鏈路中的第一個(gè)器件對命令進(jìn)行響應,可得到第一個(gè)器件的64位ROM ID。主機存儲該ROM ID,并將其確定為鏈路的第一個(gè)器件。隨后,主機發(fā)送Chain DONE命令。該命令通過(guò)器件#1的/DONE引腳,將鏈路中第二個(gè)器件的/EN引腳設置為邏輯0,同時(shí)防止器件#1再次響應。終止 搜索過(guò)程結束后,鏈路中的所有器件都處于Chain DONE狀態(tài)。主機應發(fā)送Skip ROM命令后,緊接著(zhù)發(fā)送Chain OFF命令,用于終止順序搜索。這樣可將所有器件都進(jìn)入Chain OFF狀態(tài),變成由PIO Access功能命令控制PIO引腳。關(guān)于Conditional Read ROM和Chain命令的詳細說(shuō)明,以及完整的流程圖,請參考DS28EA00數據資料4。
第二個(gè)周期 主機發(fā)送Conditional Read ROM命令。由于此時(shí)器件#2是鏈路中唯一一個(gè)/EN為邏輯0的器件,因此該器件發(fā)送其ROM ID作為響應。主機將該ROM ID保存為序列碼'2'。(器件#1處于Chain DONE狀態(tài),所以不會(huì )響應該命令。) 隨后,主機發(fā)送Chain DONE命令。
重復周期 要識別剩余器件的ROM ID及其物理位置,主機需要重復發(fā)送Conditional Read ROM和Chain DONE命令。如果沒(méi)有器件響應Conditional Read ROM命令,說(shuō)明鏈路中的所有器件均已被識別。
假定采用標準的1-Wire速率(復位/在線(xiàn)檢測周期為960μs,每個(gè)時(shí)隙為65μs),初始化和結束共約用去7ms (一次總共占用的時(shí)間)。各個(gè)器件的搜索和位置檢測約占用7.7ms。相同條件下,執行Search ROM命令時(shí),每個(gè)器件約占用14ms。例如,在100ms之內,如果具有鏈路功能的話(huà),主機能識別和定位12個(gè)器件,但是如果僅依靠Search ROM功能的話(huà),主機只能識別7個(gè)器件。
補充說(shuō)明
電纜電容 常用于構建1-Wire網(wǎng)絡(luò )的5類(lèi)電話(huà)線(xiàn)的每對雙絞線(xiàn)對之間具有大約50pF/m的電容。根據網(wǎng)絡(luò )的規模,當所有器件都處于Chain ON狀態(tài)時(shí),會(huì )給線(xiàn)路增加非常大的電容負載。在寄生供電模式下,有時(shí)候需要采用有源1-Wire線(xiàn)路上拉,這樣可避免電壓跌落至最小允許值以下。采用主電源或本地VCC電源供電時(shí)無(wú)需采用這一措施。Conditional Read ROM DS2401及其兼容的、1993年停產(chǎn)的DS2400硅序列號,均將這一命令讀為Read ROM。因此,不要將DS2401連接到采用鏈路功能的網(wǎng)絡(luò )中。所以,使用1-Wire端口適配器時(shí),應選擇不帶DS2401的器件。DS2405版本A也能像DS2401一樣響應Conditional Read ROM命令代碼。1998年開(kāi)始投產(chǎn)的DS2405版本B則會(huì )忽略Conditional Read ROM命令代碼。
1-Wire主控制器電路 在嵌入式應用環(huán)境下,可采用各種低成本、分立式、基于IC的1-Wire主控制器。分立解決方案包括上拉電阻、空閑的μC端口引腳以及高級驅動(dòng)器5。專(zhuān)門(mén)用于驅動(dòng)1-Wire總線(xiàn)的集成驅動(dòng)器包括DS2480B6 (串行端口,UART),DS24907 (USB端口)以及DS24828,9 (I2C端口,圖5)。8通道版本的DS2482具有3個(gè)地址引腳,允許單個(gè)主控制器控制多達64個(gè)獨立的1-Wire網(wǎng)絡(luò )。應用筆記192,"DS2480B串行接口1-Wire線(xiàn)驅動(dòng)器的使用"10,從軟件開(kāi)發(fā)的角度對DS2480B進(jìn)行了說(shuō)明。與之類(lèi)似的一篇針對DS2482驅動(dòng)器的文章也可供參考11。

圖5. 單通道I2C至1- Wire橋接器件DS2482作為1-Wire主控制器。其/DONE輸出也可用于驅動(dòng)一個(gè)LED,并不會(huì )影響鏈路功能。
電源 如果提供VCC電源,所有DS28EA00可同時(shí)進(jìn)行溫度轉換。隨后發(fā)送Conditional Search命令,可以篩選出那些發(fā)出報警溫度的器件。通過(guò)順序搜索,可得出器件的ROM ID及其位置信息,能迅速知道需要在哪些地方采取糾正措施。如果沒(méi)有VCC電源,溫度轉換必須依次進(jìn)行。此外,開(kāi)始進(jìn)行順序搜索時(shí)(所有器件從Chain OFF狀態(tài)轉換至Chain ON狀態(tài)),必須確保1-Wire數據線(xiàn)路上的電壓不會(huì )跌落的太多。
速率 高速模式下的快速時(shí)序不適用于包含多個(gè)器件,或超過(guò)3m的1-Wire網(wǎng)絡(luò );此時(shí)應采用標準速率替代。根據網(wǎng)絡(luò )中的器件數量,即使采用標準速率,也需要延長(cháng)恢復時(shí)間,特別是當采用寄生電源供電時(shí)12。
故障診斷 如果無(wú)法實(shí)現順序搜索,則在發(fā)送Chain ON命令后,察看1-Wire線(xiàn)路上的壓降。如果電壓跌落至3.0V以下,則命令有可能不能正常執行。為了避免電壓跌落,Chain ON以后,可采用帶有源上拉的驅動(dòng)電路,或者采用主電源供電。如果鏈路中第一個(gè)器件的/EN輸入開(kāi)路、或者連接至1-Wire線(xiàn)路,或者連接至VCC,都將導致順序檢測失敗。確保網(wǎng)絡(luò )中無(wú)DS2401。不允許將并聯(lián)的兩個(gè)或多個(gè)網(wǎng)絡(luò )連接至同一個(gè)1-Wire端口,因此此時(shí)所有的“首個(gè)器件”將同時(shí)響應,這樣會(huì )得到帶無(wú)效CRC字節的ROM ID。
評論