要約:すべての1-Wire®デバイスのデータシートでは、2セットのコマンドを説明しています。ROM機能コマンドと呼ばれる1つ目のセットはデバイスの識別と選択に使用されます。2つ目のセットはメモリ機能コマンドと呼ばれますが、それ以外の非メモリ動作を含むことがあります。ROM機能コマンドは、デバイスが選択されるたびに完了させて、メモリ機能コマンドに備える必要があります。ダラスセミコンダクタによって作成された1-Wire APIは、これらのコマンドを利用して1-Wireデバイスで動作します。場合によっては、どのコマンドが呼び出されているかが明らかでないことがあります。このアプリケーションノートでは、データシートに示されたコマンドをAPI機能にマッピングしています。特定のAPI機能が利用可能でない場合、汎用の通信API機能を使用してコマンドを変換する手法を提示します。
はじめに
すべての1-Wireデバイスのデータシートでは、2セットのコマンドを説明しています。ROM機能コマンドと呼ばれる1つ目のセットはデバイスの識別と選択に使用されます。2つ目のセットはメモリ機能コマンドと呼ばれますが、それ以外の非メモリ動作を含むことがあります。ROM機能コマンドは、デバイスが選択されるたびに完了させて、メモリ機能コマンドに備える必要があります。ダラスセミコンダクタによって作成された1-Wire APIは、これらのコマンドを利用して1-Wireデバイスで動作します。場合によっては、どのコマンドが呼び出されているかが明らかでないことがあります。このアプリケーションノートでは、データシートに示されたコマンドをAPI機能にマッピングしています。特定のAPI機能が利用可能でない場合、汎用の通信API機能を使用してコマンドを変換する技術を提示します。
このアプリケーションノートで扱う略語(PD、TMEX、OWAPI、OWCOM)を含めたさまざまなAPIの詳細な説明については、「アプリケーションノート155」を参照してください(特殊な用語、コマンド、またはコードについては、わかりやすくするためイタリック体で示しています)。
ROM機能コマンド
ROM機能コマンドは、ROM IDを検出するため、またはROM IDを用いてさまざまなモードでデバイスを選択するために使用します。ROM IDは、ファミリコード、シリアル化フィールド、および巡回冗長検査(CRC)を含む固有の64ビットの数値です。1-Wireマスタは、1-Wireリセットを送出しプレゼンスを受信した後でこれらの機能の1つを送信します。
Read ROMコマンドは、ROM IDをじかに読み出します。Read ROMコマンドは、1つのデバイスのみ接続されている場合にのみ1-Wireネットワーク上で使用することができます。複数のデバイスのネットワークでは、Search ROMコマンドでROM IDを検出する必要があります。この検索アルゴリズムの詳細は「アプリケーションノート187」で説明しています。Conditional Search ROMコマンドは、何らかのアラーム状態にある1つの1-Wireデバイスのみが応答する以外は、Search ROMと同様に機能します。これは、注意が必要なデバイスのみを検出するために使用します。
Skip ROMコマンドは、ROM IDに関係なくすべてのデバイスを選択するために使用します。このコマンドは、十分なエネルギーがあるという前提でプログラムメモリデバイスをグループにまとめるために使用することが可能です。Overdrive Skipコマンドは似ていますが、すべてのデバイスを選択するだけではなく、これらのデバイスをオーバドライブの通信速度に切り替えます。Overdrive Skipコマンドは、すべての対応する1-Wireデバイスをオーバドライブ速度に切り替えるためによく使用されます。デバイスをオーバドライブで通信するようにした後、従来のSearch ROMシーケンスを使用してROM IDを検出することができます。
Match ROMコマンドは、選択したROM IDをブロードキャストすることによって特定のデバイスを選択します。Overdrive Matchは似ていますが、同時にデバイスをオーバドライブの通信速度に切り替えます。Resumeコマンドは選択された最後のデバイスを再度選択するために使用します。これは同じデバイスに繰り返しアクセスするときのショートカットコマンドです。
表1では、特定のROM機能コマンドにAPIをマッピングしています。各種の1-Wire APIは、ネットワーク上に複数の1-Wireデバイスが存在するという考え方で設計されているため、単一デバイスのネットワークで必要なコマンドまたは最も有効なコマンドは直接サポートされていないことに留意してください。ただし、Customコマンドで後述するように、基本通信機能を使用してあらゆるコマンドを構築することができます。
表1. ROM機能コマンド
| Command |
PD |
TMEX |
| Read ROM |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
| Match ROM |
owAccess |
TMAccess |
| Search ROM |
owFirst, owNext |
TOMFirst, TMNext |
| Conditional Search ROM |
owFirst, owNext |
TMFirstAlarm, TMNextAlarm |
| Skip ROM |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
| Overdrive Skip* |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
| Overdrive Match |
owOverdriveAccess |
TMOverAccess |
| Resume Command** |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
/tr>
|
| Command |
OWAPI |
OWCOM |
| Read ROM |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
| Match ROM |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.select |
DSPortAdapter.select |
| Search ROM |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.getFirstDeviceContainer,
DSPortAdapter.getNextDeviceContainer |
DSPortAdapter.getFirstDeviceContainer,
DSPortAdapter.getNextDeviceContainer |
| Conditional Search ROM |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.setSearchOnlyAlarmingDevices
(then same as Search ROM) |
DSPortAdapter.setSearchOnlyAlarmingDevices
(then same as Search ROM) |
| Skip ROM |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
| Overdrive Skip* |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
| Overdrive Match* |
(package com.dalsemi.onewire.container)
OneWireContainer.setSpeed
OneWireContainer.doSpeed |
OneWireContainer.setSpeed
OneWireContainer.doSpeed |
| Resume Command** |
No predefined API, see Custom Commands. |
No predefined API, see Custom Commands. |
*注:オーバドライブの通信速度をサポートする1-Wireデバイスにのみ適用
**注:Resumeコマンドをサポートする1-Wireデバイスにのみ適用
メモリ機能コマンド
メモリ機能コマンドは、デバイスによって少し異なります。ただし、その主要な目的は同じで、デバイスのメモリ領域の読出しと書込みです。これらの異なるコマンド構造に対処するため、1-Wire APIはこれらの相違点を取り除くように構築しました。たとえば、汎用の書込みメモリAPIはWrite Scratchpad、Read Scratchpad、およびCopy Scratchpadシーケンス、あるいはEPROM書込みメモリシーケンスを使用することができます。APIユーザにとって、これは同じに見えます。
ほとんどのAPIに3レベルのメモリコマンドがあります。1つ目のメモリコマンドはいずれの構造も持たないメモリ(未処理)に対する読出しと書込みを可能にします。2つ目のメモリコマンドはUniversal Data Packet (UDP)というパケット構造を使用します。3つ目のメモリコマンドタイプは、複数のUDP構造を1つのファイル構造にまとめます。UDPとファイル構造の説明については、「アプリケーションノート114」を参照してください。表2では、3タイプのメモリ動作にAPIをマッピングしています。
表2. メモリ機能の要約
| Command |
PD |
TMEX |
| Write Raw |
owWrite |
TMProgramBlock (EPROM only) (see Custom Commands) |
| Read Raw |
owRead |
TMProgramBlock (EPROM only) (see Custom Commands) |
| Write UDP |
owWritePagePacket |
TMWritePacket |
| Read UDP |
owReadPagePacket |
TMReadPacket |
| Write File |
owCreateFile
owWriteFile |
TMCreateFile
TMWriteFile |
| Read File |
owOpenFile
owReadFile |
TMOpenFile
TMReadFile |
| |
| Command |
OWAPI |
OWCOM |
| Write Raw |
(package com.dalsemi.onewire.container)
MemoryBank.write |
MemoryBank.write |
| Read Raw |
MemoryBank.read |
MemoryBank.read |
| Write UDP |
(package com.dalsemi.onewire.container)
PagedMemoryBank.writePagePacket |
PagedMemoryBank.writePagePacket |
| Read UDP |
(package com.dalsemi.onewire.container)
PagedMemoryBank.readPagePacket |
PagedMemoryBank.readPagePacket |
| Write File |
(package com.dalsemi.onewire.application.file)
OWFileOutputStream.write |
OWFileOutputStream.write |
| Read File |
(package com.dalsemi.onewire.application.file)
OWFileInputStream.read |
OWFileInputStream.read |
データシートのメモリ機能コマンドの下に含まれるコマンドの一部は、実際はカスタムデバイスコマンドです。これらのコマンドを処理するためのガイドについては、以下の項を参照してください。
カスタムコマンド
ほとんどすべてのカスタムコマンドは、まずMatch ROMに相当するAPIでデバイスを選択してから、データの双方向ブロックを1-Wireネットワークに送信することによって得ることができます。このブロックは、必要な書込みコマンドをブロックに入れ、1-Wireデバイスから読み出したブロックにFF (hex)バイトを入れることによって構築されます。たとえば、DS1994はメモリにマッピングされたリアルタイムクロック(RTC)レジスタを備えており、Read Memoryコマンドでアクセスすることができます。以下の図1は、DS1994のデータシートからの引用です。
DS1994は新規設計用に推奨されていません。

図1. DS1994のメモリ読出しフロー(データシート)
DS1994のデータシートで規定されているように、RTCレジスタはアドレス0202 (hex)から始まる5バイト長です。図1に示したメモリコマンドフローは、Match ROMなどのROM機能コマンドでデバイスが選択された後に開始されます。
以下の表3は、フローチャートに基づいて1-Wireバスに送信される双方向データのブロックを構成する8バイトを一覧表示しています。このデータは一度に1バイトずつ送信することができますが、多くの場合、ブロックを作成してすべてを一度に送信すると効率が向上します。
表3. RTC読出しブロック
| Block Offset |
Byte Value (hex) |
Description |
| 0 |
F0 |
Master TX Read Memory command |
| 1 |
02 |
Master TX TA1 (address, least significant byte, T7:T0) |
| 2 |
02 |
Master TX TA2 (address, most significant byte, T15:T8) |
| 3 |
FF |
Master RX byte 0 of RTC (address 0202h) |
| 4 |
FF |
Master RX byte 1 of RTC (address 0203h) |
| 5 |
FF |
Master RX byte 2 of RTC (address 0204h) |
| 6 |
FF |
Master RX byte 3 of RTC (address 0205h) |
| 7 |
FF |
Master RX byte 4 of RTC (address 0206h) |
図2は、1-Wireパブリックドメイン(PD)のAPI用に記述した「C」の例であり、表3に示したブロックを使用してDS1994のRTCを読み出しています。
図2. PDのRTC読出しの例
unsigned char datablock[] = { 0xF0,0x02,0x02,0xFF,0xFF,0xFF,0xFF,0xFF };
int portnum=0;
// select the current device (Match ROM)
if (owAccess(portnum))
{
// send the read memory command and address, receive the RTC value
if (owBlock(portnum, 1, datablock, 8))
{
// RTC is now in bytes 3-7 of datablock
...
}
}
表4は、各APIの双方向ブロックコマンドを示します。完全を期すため、シングルバイトとビットコマンドも記載しています。
表4. 汎用の1-Wire IO機能
| Command |
PD |
TMEX |
| block (bidirectional) |
owBlock |
TMBlockStream |
| byte (bidirectional) |
owTouchByte |
TMTouchByte |
| bit (bidirectional) |
owTouchBit |
TMTouchBit |
| read byte |
owReadByte |
TMTouchByte(data = FF hex) |
| write byte |
owWriteByte |
TMTouchByte(data to write) |
| reset |
owTouchReset |
TMTouchReset |
|
| Command |
OWAPI |
OWCOM |
| block (bidirectional) |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.dataBlock |
DSPortAdapter.dataBlock |
| byte (bidirectional) |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.dataBlock
(single byte block) |
DSPortAdapter.dataBock
(single byte block) |
| bit (bidirectional) |
Not available |
Not available |
| read byte |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.getByte |
DSPortAdapter.getByte |
| write byte |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.putByte |
DSPortAdapter.putByte |
| 1-Wire reset + presence detect |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.reset |
DSPortAdapter.reset |
1-Wireの各デバイスタイプのデータシートに注目すると、適切なブロックを構築して汎用の1-Wire IO機能を使用することによって、あらゆる機能を実行することができるようになります。一部の1-Wireデバイスは、特別な給電の制約やプログラムパルスを必要とします。これらは、表5の特殊API機能が取り扱います。
表5. 特殊な1-Wire電力機能
| Command |
PD |
TMEX |
| EPROM programming pulse |
owProgramPulse |
TMProgramPulse |
Power delivery
(strong pullup) after bit |
owReadBitPower (read bit only) |
TMOneWireLevel (prime for next bit)
TMTouchBit |
Power delivery
(strong pullup) after byte |
owWriteBytePower (write byte only) |
TMOneWireLevel (prime for next byte)
TMTouchByte |
|
| Command |
OWAPI |
OWCOM |
| EPROM programming pulse |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.startProgramPulse |
DSPortAdapter.startProgramPulse |
Power delivery
(strong pullup) after bit |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.startPowerDelivery
(prime for next bit)
DSPortAdapter.putBit /
DSPortAdapter.getBit |
DSPortAdapter.startPowerDelivery
(prime for next bit)
DSPortAdapter.putBit /
DSPortAdapter.getBit
|
Power delivery
(strong pullup) after byte |
(package com.dalsemi.onewire.adapter)
DSPortAdapter.startPowerDelivery
(prime for next byte)
DSPortAdapter.putByte /
DSPortAdapter.getByte |
DSPortAdapter.startPowerDelivery
(prime for next byte)
DSPortAdapter.putByte /
DSPortAdapter.getByte |
1-WireはMaxim Integrated Products, Inc.の登録商標です。
フィードバックをお寄せください。 内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。—マキシムはお客様からいただく訂正、提案を元に改善していきます。
このページを評価し、フィードバックを送信する。
自動アップデート
お客様が関心のある分野でアプリケーションノートが新規に掲載された際に自動通知Eメールの受信を希望する場合は、EE-Mail™にご登録ください。
| その他の情報 | |
APP 1100: May 22, 2008
|
| DS1822 |
エコノ1-Wireディジタルサーモメータ |
フルデータシート (PDF, 228kB)
|
無料 サンプル
|
| DS1822-PAR |
エコノパラサイトパワー・ディジタルサーモメータ |
フルデータシート (PDF, 212kB)
|
|
| DS18B20 |
プログラマブル分解能1-Wireディジタルサーモメータ |
フルデータシート (PDF, 188kB)
|
無料 サンプル
|
| DS18B20-PAR |
1-Wire寄生電力ディジタルサーモメータ |
フルデータシート (PDF, 208kB)
|
|
| DS18S20 |
1-Wire寄生電力ディジタルサーモメータ |
フルデータシート (PDF, 188kB)
|
無料 サンプル
|
| DS18S20-PAR |
寄生電源ディジタルサーモメータ |
フルデータシート (PDF, 264kB)
|
|
| DS1904 |
RTC iButton |
フルデータシート (PDF, 216kB)
|
無料 サンプル
|
| DS1920 |
温度用iButton® |
フルデータシート (PDF, 560kB)
|
|
| DS1921G |
Thermochron iButton |
フルデータシート (PDF, 632kB)
|
|
| DS1963S |
SHA iButton |
|
|
| DS1971 |
256ビットEEPROM iButton® |
フルデータシート (PDF, 296kB)
|
無料 サンプル
|
| DS1973 |
4Kb EEPROM iButton® |
フルデータシート (PDF, 268kB)
|
無料 サンプル
|
| DS1982 |
1KbアドオンリーiButton® |
フルデータシート (PDF, 708kB)
|
無料 サンプル
|
| DS1985 |
16KbアドオンリーiButton® |
フルデータシート (PDF, 708kB)
|
無料 サンプル
|
| DS1986 |
64KbアドオンリーiButton® |
フルデータシート (PDF, 688kB)
|
|
| DS1990A |
シリアルナンバーiButton |
フルデータシート (PDF, 200kB)
|
無料 サンプル
|
| DS1992 |
1Kb/4KbメモリiButton® |
フルデータシート (PDF, 348kB)
|
無料 サンプル
|
| DS1993 |
1Kb/4KbメモリiButton® |
フルデータシート (PDF, 348kB)
|
無料 サンプル
|
| DS1995 |
16KビットメモリiButton® |
フルデータシート (PDF, 68kB)
|
|
| DS1996 |
64kビットメモリiButton® |
フルデータシート (PDF, 352kB)
|
|
| DS2401 |
シリコンシリアルナンバー |
フルデータシート (PDF, 288kB)
|
無料 サンプル
|
| DS2405 |
アドレス指定可能なスイッチ |
フルデータシート (PDF, 436kB)
|
無料 サンプル
|
| DS2406 |
1Kbメモリ付き、デュアル、アドレス指定可能なスイッチ |
フルデータシート (PDF, 264kB)
|
無料 サンプル
|
| DS2415 |
1-Wireタイムチップ |
フルデータシート (PDF, 256kB)
|
|
| DS2417 |
割込み付き、1-Wireタイムチップ |
フルデータシート (PDF, 164kB)
|
無料 サンプル
|
| DS2431 |
1024ビット、1-Wire EEPROM |
フルデータシート (PDF, 272kB)
|
無料 サンプル
|
| DS2432 |
SHA-1エンジン内蔵、1kビット保護1-Wire EEPROM |
要約版データシート (PDF, 408kB, English only)
|
|
| DS2433 |
4kb、1-Wire EEPROM |
フルデータシート (PDF, 700kB)
|
無料 サンプル
|
| DS2438 |
スマートバッテリモニタ |
フルデータシート (PDF, 376kB)
|
無料 サンプル
|
| DS2450 |
1-WireクワッドA/Dコンバータ |
フルデータシート (PDF, 360kB)
|
無料 サンプル
|
| DS2502 |
1Kbアドオンリーメモリ |
フルデータシート (PDF, 648kB)
|
無料 サンプル
|
| DS2505 |
16Kbアドオンリーメモリ |
フルデータシート (PDF, 320kB)
|
無料 サンプル
|
| DS2506 |
64Kbアドオンリーメモリ |
フルデータシート (PDF, 900kB)
|
無料 サンプル
|
| DS2760 |
高精度Li+ (リチウムイオン)バッテリモニタ |
フルデータシート (PDF, 296kB)
|
|
|
|
ダウンロード、PDFフォーマット (62kB)
AN1100,
AN 1100,
APP1100,
Appnote1100,
Appnote 1100
|
|