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