DSl8820 ROM編碼的一種搜索算法
1.2 DSl8820的ROM編碼
每片DSl8820含有一個(gè)唯一的64位ROM編碼。頭8位是產(chǎn)品系列碼,接著(zhù)的 48位是產(chǎn)品序列號,最后8位是CRC(循環(huán)冗余校驗)碼。主機可以對總線(xiàn)上多片DS18820唯一尋址,因此多片DS18820能夠連在同一條數據線(xiàn)上而不會(huì )造成混亂,這為溫度的多點(diǎn)測量帶來(lái)了極大的方便。64位的ROM注冊碼如下:本文引用地址:http://dyxdggzs.com/article/163566.htm
1.3 DS18820 ROM搜索命令
當單線(xiàn)總線(xiàn)上掛有多個(gè)DS18B20時(shí),系統對總線(xiàn)上器件的數量和每個(gè)器件的ROM的識別與搜索是通過(guò)DS18820 ROM搜索命令與算法配合來(lái)實(shí)現的。下面具體介紹ROM搜索命令的工作過(guò)程。對64位ROM編碼識別從最低位開(kāi)始,ROM編碼的每一位搜索過(guò)程可總結為 “兩讀一寫(xiě)”:讀一位,讀該位補碼;寫(xiě)一位??偩€(xiàn)主機在ROM編碼每一位上完成這三步就可以獲得一個(gè)器件的ROM編碼。
(1)兩 讀
總線(xiàn)主機發(fā)布ROM搜索命令后執行一次讀,總線(xiàn)上所有器件就把它們各自ROM編碼的第一位放到總線(xiàn)來(lái)作出響應。這次讀獲得的數據是所有器件放在總線(xiàn)上數據的“與”。再執行一次讀,因為ROM搜索命令正在執行所以總線(xiàn)上所有器件把各自ROM編碼的第一位的補碼放在總線(xiàn)上,第二次讀獲得的數據也是所有器件放在總線(xiàn)上數據的“與”。對第一位的“兩讀”就此完成。之后主機再次進(jìn)行的“兩讀”則是針對ROM編碼的第二位,以此類(lèi)推。從“兩讀”獲得的數據有以下解釋?zhuān)绫?所列。
(2)- 寫(xiě)
對ROM編碼的某一位“兩讀”之后,對該位進(jìn)行“-寫(xiě)”操作?!?寫(xiě)”操作寫(xiě)的數據要根據“兩讀”獲得的數據來(lái)確定。如果“兩讀”數據為00,則表示總線(xiàn)上器件在該位上數據發(fā)生沖突,“-寫(xiě)”寫(xiě)的數據此種情況下具有“排除”的作用,如果器件ROM編碼在該位上的數據與“-寫(xiě)”寫(xiě)的數據相同,則繼續保持與總線(xiàn)的聯(lián)系。如果不相同則此器件從總線(xiàn)上“排除”,不再響應主機發(fā)布的命令,直到主機進(jìn)行下一次復位。如果“兩讀”數據為01,則表示總線(xiàn)上所有器件在該位上均位0,為保持器件與總線(xiàn)的聯(lián)系,“-寫(xiě)”操作主機應寫(xiě)0。同理,如“兩讀”數據為10,主機則應寫(xiě)1。
2 DS18820 ROM編碼的搜索算法
在一條“單線(xiàn)總線(xiàn)”上掛有多片。DS18820的情況下,對ROM編碼的搜索與識別主要是通過(guò)“兩讀”數據為00時(shí)“-寫(xiě)”操作的“排除”作用來(lái)實(shí)現的。多次“排除”作用后,就可以使總線(xiàn)上只剩下唯一的一個(gè)器件仍與總線(xiàn)保持聯(lián)系。如何“排除”,這需要算法的配合。下面具體介紹DS18820 ROM編碼的搜索算法。
評論