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

2008年05月22日
myAnalogに追加

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

新規プロジェクトを作成

要約

すべての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


この記事に関して

最新メディア 21

Subtitle
さらに詳しく
myAnalogに追加

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

新規プロジェクトを作成