どのI2Cアドレスを選択する必要がありますか?


16

I2Cアドレスを自分用に予約するには、I2Cの人々にお金を払わなければならないことがわかりました。しかし、私はこれをしたくありません。

プロジェクトのスレーブMCUとマスターMCUに選択するアドレスについてアドバイスを求めています。ボードにはEEPROMもあります。したがって、EEPROMのアドレスの使用は避けます。マスターは、ジャイロや加速度計、追加のメモリデバイスなど、さまざまなセンサーに接続する予定です。明確にすべきアドレスのブロックはありますか?マスターには0x00を使用し、スレーブには0x01を使用することを考えていました。これらはほとんど使用されていないようだからです。

別の質問:10ビットデバイスと7ビットデバイスを同じバスで混在させるのは悪い考えでしょうか?MCUが10ビットアドレッシングで通信する可能性を検討していましたが、センサーには7ビットアドレスのみを使用していました。


1
@ W5VO。そう、SDカードのすぐ横に$ 3,000だけが欲しい人。
トーマスO

1
@ThomasO、識別子のようにアドレスを予約するためにそれらを支払う必要はありません。デバイスを作るためにこれを支払う必要はありません、彼らはサービスを販売しています。彼らは彼らの知的財産を強制しているSDカード、彼らはあなたにそれを行うか、別の技術を選択するように言うことができます。
Kortuk

1
@ThomasO、私はあなたがこの場合に払っている何かがあることを指摘していました。また、2000は実際の製品にはあまりありません。
Kortuk

1
@Thomas O 3,000ドルは、実際には製品にとって非常に合理的です。これは、製品を製造している企業にとっては一瞬の低下です。
ケレンブ

2
@reemrevnivek、しかし、特許権者はむしろそれを要求し、オープンハードウェアが使用を許可できないようにし、この料金の支払いを要求することを選択しました。特許権者として、彼らにはその権利があります。私は、法律が変わるまで、これが明確であることを確認するつもりです。特許と著作権の見直しをお願いしますが、それまでは、これが良いアイデアを持っているエンジニアを保護し、報いる方法です。
Kortuk

回答:


13

まず、0x00と0x01は使用しないでください。これらは予約されています!I2Cバス仕様の表3には、予約済みアドレス(およびその理由)がリストされています。

スレーブアドレスR / W説明
 0000 000 0ゼネラルコールアドレス
 0000 000 1 STARTバイト
 0000 001 X CBUSアドレス
 0000 010 X異なるバス形式用に予約済み
 0000 011 X将来の目的のために予約済み
 0000 1XX X Hsモードマスターコード
 1111 1XX 1デバイスID
 1111 0XX X 10ビットスレーブアドレッシング

また、0x00を避ける必要があります。これにはエッジ遷移がなく、エラー状態である可能性があるためです(デバッグが困難です)。

それ以外は、「構成可能にするだけ」と言います。さまざまなセンサーを接続できるようにする場合は、NXPにアドレスを支払うか、調整可能なアドレスを指定します。ソースコードを配布する場合、ソフトウェアの変更は明らかです。選択したアドレスの1つまたは2つのビットを切り替えるハードウェアオプション(デジタルピンのはんだジャンパー)は安価で簡単です。または、A / Dピンにジャンパーを接続した抵抗器のラダーネットワークを使用すると、ハードウェアを完全に制御できます。


1
構成可能なアドレスの場合は+1。同じバス上に同じものがいくつかあるスレーブでこれを見てきました。
ケレンブ

ええ、私は設定可能なアドレスを考えていました。メニューシステムから設定を変更することで更新できます。1つの重要なことは、アドレスを変更する人とマスターMCUがスレーブとの通信を失うのを防ぐために保護手段を追加する必要があるため、アドレスをリセットする何らかのプロトコルを確立する必要があることです。)
トーマスO

16

デザインで積極的に使用しないデバイスを選択し、そのデバイスのI2Cアドレスを使用します。たとえば、RTCが不要な場合は、NXP PCF8563(および他のRTC)で使用される0xA2と0xA3を使用できます。


私はこれがとても好きです。
ニックハルデン

残念ながら、ST STCN75TI DAC8571またはMicrochip 24AA025E48TI ADC121C027など、一部のデバイスは依然として衝突しています。
Xcodo

10

1999年時点で割り当てられたアドレスのリストは次のとおりです。http : //www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

彼らはこの推論で完全なリストをリリースしません:

Q:これまでに使用されたすべてのI²Cスレーブアドレスのリストを受け取ることは可能ですか?

A:いいえ。NXPSemiconductorsは、以前に割り当てられたすべてのスレーブアドレスのこのリストを発行しません。これは、リストが最新であり、割り当てられた各アドレスが一意であることを保証できる唯一の方法だからです。このリストが利用可能になった場合、I²Cバスのライセンシーはスレーブアドレス自体の選択を開始し、中央のリストはすぐに不完全になり、アドレスの競合につながる可能性があります。確立され、うまく機能することが証明された原則は、各ライセンシーがNXPセミコンダクターズ内の単一の連絡先にスレーブアドレス要求を送信し、単一のマスターリストに基づいてスレーブアドレスを割り当てることです。

http://www.nxp.com/products/interface_control/i2c/faq/から

現在、すべてがプロジェクトの内部にある場合、接続しようとしているものと競合しない限り、任意のアドレスを選択できない理由はありません。


奇妙な推論:リストを持たないことで、リストを最新の状態に保つことができます...:-/
Federico Russo

単純な推論:彼らは、IDを割り当てるすべての人が真に最新のリストを持つことを保証したい。リストの古いコピーが浮かんでいると、その目標が損なわれます。
-supercat

1
@Federico彼らはリストを持っているが、彼らはリストを最新のものにするために人々がそれらを通過することを余儀なくされるように、彼らはそれをただ公開しない。リストが公開されている場合、未使用のアドレスを選択する人がたくさんいるでしょうが、誰かがそのアドレスを適切に予約するとどうなりますか?
ケレンブ

FWIW:
SELGUIDE.PDF

1

Kellenjbが言うように、スレーブデバイスアドレスの完全なリストを取得することはありません。

ただし、使用できない予約済みアドレスがいくつかあります(たとえば、0x00は一般的な呼び出しアドレスです)。

一覧はこちら

7ビットスレーブがI2C標準に従い、10ビットアドレスを無視する限り、10ビットと7ビットのアドレス指定を組み合わせても問題ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.