白書5:データシートコマンドに対する1-Wire APIの使用

2008年05月22日

Figure 1

   

要約

すべての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 「1-Wireソフトウェアリソースガイドデバイス解説」を参照してください(特殊な用語、コマンド、またはコードについては、わかりやすくするためイタリック体で示しています)。

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 「1-Wire検索アルゴリズム」で説明しています。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.
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 「1-Wire File Structure」を参照してください。表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 (package com.dalsemi.onewire.container)
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)バイトを入れることによって構築されます。たとえば、DS1922Lはメモリにマッピングされたリアルタイムクロック(RTC)レジスタを備えており、Read Memoryコマンドでアクセスすることができます。図1は、DS1922Lのデータシートからの引用です。

図1. DS1922Lの(PW付き)メモリ読出しおよびCRCフロー(データシート)

図1. DS1922Lの(PW付き)メモリ読出しおよびCRCフロー(データシート)

DS1922Lのデータシートで規定されているように、RTCレジスタはアドレス0219 (hex)から始まる5バイト長です。図1に示したメモリコマンドフローは、Match ROMなどのROM機能コマンドでデバイスが選択された後に開始されます。

表3は、フローチャートに基づいて1-Wireバスに送信される双方向データのブロックを構成する16バイトを一覧表示しています。このデータは一度に1バイトずつ送信することができますが、多くの場合、ブロックを作成してすべてを一度に送信すると効率が向上します。

表3. RTC読出しブロック
Block Offset Byte Value (hex) Description
0 69 Master Tx Read Memory with (PW) and CRC command
1 19 Master Tx TA1 (address, least significant byte, T7:T0)
2 02 Master Tx TA2 (address, most significant byte, T15:T8)
3 FF Master Tx Password Byte 0 (assume not set)
4 FF Master Tx Password Byte 1
5 FF Master Tx Password Byte 2
6 FF Master Tx Password Byte 3
7 FF Master Tx Password Byte 4
8 FF Master Tx Password Byte 5
9 FF Master Tx Password Byte 6
10 FF Master Tx Password Byte 7
11 FF Master Rx byte 0 of RTC (address 0219h)
12 FF Master Rx byte 1 of RTC (address 021Ah)
13 FF Master Rx byte 2 of RTC (address 021Bh)
14 FF Master Rx byte 3 of RTC (address 021Ch)
15 FF Master Rx byte 4 of RTC (address 021Dh)

図2は、1-Wireパブリックドメイン(PD)のAPI用に記述した「C」の例であり、表3に示したブロックを使用してDS1922LのRTCを読み出しています。

図2. PDのRTC読出しの例

   unsigned char datablock[] = { 0xF0,0x19,0x02,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,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, 16))
         {
         // RTC is now in bytes 11-15 of datablock
         ...
         }
   }

表4は、各APIの双方向ブロックコマンドを示します。完全を期すため、シングルバイトとビットコマンドも記載しています。

表4. 汎用の1-Wire I/O機能
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 I/O機能を使用することによって、あらゆる機能を実行することができるようになります。一部の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


myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成

この記事に関して

製品

DS2438
製造中

スマートバッテリモニタ

DS2401
新規設計に推奨

シリコンシリアルナンバー

DS1985
製造中

iButton 16Kbアドオンリー

DS1921K

Thermochron iButtonスタータキット

DS2450

1-WireクワッドA/Dコンバータ

DS2417 製造中

割込み付き、1-Wireタイムチップ

DS1904 新規設計に推奨

iButton RTC

DS1822 製造中

エコノ1-Wireデジタルサーモメータ

DS18B20-PAR 製造中

1-Wire寄生電力デジタルサーモメータ

MAX31826 製造中

1-Wireデジタル温度センサー、1Kbロック可能なEEPROM内蔵

DS18S20

1-Wire寄生電力デジタルサーモメータ

DS18S20-PAR

寄生電源デジタルサーモメータ

MAX31820 製造中

1-Wire周囲温度センサー

MAX31820PAR 製造中

1-Wire寄生電源、周囲温度センサー

DS18B20 製造中

プログラマブル分解能1-Wireデジタルサーモメータ

DS1822-PAR 製造中

エコノパラサイトパワー・デジタルサーモメータ

DS1920 製造中

Temperature iButton

DS1921G 新規設計に推奨

Thermochron iButtonデバイス

DS1922L 製造中

8KBデータログメモリ付き、iButton温度ロガー

DS28E05 製造中

1-Wire EEPROM

DS1993 新規設計に推奨

iButton 1Kb/4Kbメモリ

DS2406

1Kbメモリ付き、デュアル、アドレス指定可能なスイッチ

DS1992 新規設計に推奨

iButton 1Kb/4Kbメモリ

DS1982 製造中

iButton 1Kbアドオンリー

DS2502

1Kbアドオンリーメモリ

DS2432 製造中

SHA-1エンジン内蔵、1Kb保護1-Wire EEPROM

DS1995 新規設計に推奨

iButton 16Kbメモリ

DS1971 製造中

iButton 256ビットEEPROM

DS2505

16Kbアドオンリーメモリ

DS1963S 新規設計に推奨

iButton金融用デバイス、SHA-1関数内蔵

DS1973 製造中

iButton 4Kb EEPROM

DS1996 新規設計に推奨

iButton 64Kbメモリ

DS1990A 新規設計に推奨

iButtonシリアルナンバー

DS2431 製造中

1024ビット、1-Wire EEPROM

最新メディア 21

Subtitle
さらに詳しく
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成