I2C IOエキスパンダをプリセットする方法

私は私がプロプライエタリのシリコンチップでいくつかの測定をするために使うPCBを持っています。いくつかの自動テストを可能にするために、PCB上にいくつかのテスト構造を含めています。たとえば、いくつかの接続を開閉するリレー、チップの特定のピンを検出できるアナログマルチプレクサなどです。

すべてのテスト構造は、「ダム」なI2C IOエキスパンダを介して制御され、I2Cを介してそれらを制御し、各ピン、入力または出力の方向を設定したり、論理状態を設定したり、それを読み取ることができます。

ボード上には、PC(USB)とボード自体(I2C)の間のインタフェースとして機能するマイクロコントローラがあります。

PORでは、すべてのエキスパンダピンが入力として設定されているので、ボードを使用するたびにボードをPCに接続し、小さなコードを実行して正しくプリセットしてから使用する必要があります。

これは、自動テストを実行する必要がある場合はもちろん許容できますが、電源を入れてすぐに使用したい場合、またはシリコンを評価したい顧客に送信したい場合は、あまり便利ではありません。現時点ではソフトウェアはオプションではありません。

この問題を解決するためのさまざまな方法があります。

Jumpers We have a number of them, but it becomes cumbersome quickly, we are talking of more than 100 IOs. Moreover, if you want to be able to bypass a relay entirely, i.e. forced open and forced closed, you need two jumpers.

pull up/down This is a bit more attractive, but it kinda defeats the purpose: I want a software reconfigurable hardware, I don't want to rework tens of boards if I find a bug.

The ideal solution I am dreaming of a very simple chip, like an I2C EEPROM or something like that, where you write a sort of boot sequence:

0xAE  0xAA
0xAE  0xBC
0x18  0x00

等々。上記のデータは、アドレス、データのペアを表します。この素晴らしいチップにはボタンを接続できるgpio入力があるはずです。ボタンを押すと、EEPROMはI2Cマスターとして機能し、データをI2Cバスに送信するはずです。たとえば、上のバイトは「Send 10101010その後0xAEに10111100を送信し、最後に0x18に00000000を送信します。

私の質問は:

  • I2C IOエクスパンダを初期化するためのより良い方法はありますか?
  • 私が想像したチップは存在しますか、それとも吸い込んでマイクロコントローラを使用するべきですか?
5
それはマイクロコントローラと呼ばれるでしょう!
追加された 著者 immibis,

5 答え

ボード上にすべてのI/Oエキスパンダを備えたマイクロコントローラがあることをすでに示しました。あなたはそれがすでにI2Cのものとすでに話し合っていると言いました!そのマイクロコントローラのファームウェアに、必要なデフォルトの初期化されたI/Oエクスパンダの状態を設定させるだけでは不十分です。

これらの初期化された状態のいくつかの異なるものが必要な場合は、必要な特定のプロファイルを選択するためにそのMCUにいくつかのジャンパを追加することもできます。

6
追加された
@VladimirCravero - ファームウェアの所有権/場所についてお聞きします。それにもかかわらず、それは問題に対処するための正しい方法です。他にパッチを当てようとするものは、ボード設計を台無しにする追加ハードウェアのバッチです。
追加された 著者 Keith,
こんにちはマイケル、提案をありがとう。メインMCUを使用するのは、ファームウェアが全社のためにまったく異なるチームからプログラムされているため、それほど簡単ではありません。
追加された 著者 Vietnhi Phuvan,

私はそのような装置を見たことがない。しかし、マイクロコントローラはこの機能を完全にうまく実行でき、デフォルトのアドレスと値を別のFlash/EEPROMチップまたは内部のFlash/EEPROMから読み取ります。

これを行うようにマイクロコントローラをプログラムしたら、それはあなたが夢見ていた不思議なチップと区別がつかないように見えるでしょう。

どのようなICメーカーの視点からも、需要が限られているカスタムICを設計することには意味がありません。彼らは、既存のICをプログラムすることによって同じ機能を実行できることを知っています。彼らは開発投資からの収益を望み、代わりに他のICを設計するでしょう。

余談ですが、「吸い上げる」ためにマイクロコントローラを使用しているのか、それとも良い設計上の選択をしたのかを知って満足しているのですか:-)

3
追加された

いいえ、私は安全にこれはあなたが望むことをする既製品のICを設計していないと言うことができます。あなたはこれをASICとして設計することができました、しかし、マイクロコントローラはより単純であなたのボリューム次第でより安いでしょう。あなたはまたあなたのUSB-I2Cマイクロコントローラにこれを実装することができるので、あなたは2番目のものを追加しないでしょう。

あるいは、財布に十分な大きさのボリュームや燃える穴がある場合は、エキスパンダーの製造元が希望の開始状態でカスタムバージョンを設計することができます。

1
追加された

私は@Michael Karasの回答が好きですが、オンボードのマイクロコントローラが混乱したくない場合(たとえば、曲線とプログラムのためのリソースの学習)、別の方法で大きなPCを次のような小さくてシンプルなものに置き換えることができます。ラズベリーパイまたは他の小さな組み込みコントローラ。

たとえば、この$ 20のLCD +スイッチハット Adafruitからを使用すると、テキストを表示してボタンを押すことができます。 。

SDカードのテキストファイルを読み取り、LCDに設定を表示し、ユーザーが選択項目をスクロールできるようにして、ボタンを押すだけでI2Cデータを送信できるPythonプログラムを自動実行することができます。

さらに小型で安価なものが必要な場合は、テストフィクスチャ用のフルサイズ(USB Type A)レセプタクルを入手するにはUSBケーブルアダプタが必要ですが、Raspberry Pi Zero(5ドルまたは10ドル)を使用できます。 LCD +スイッチの「帽子」もRPi Zeroに対応しています。

とにかく、安価で小さなLinuxコンピュータを使用することは、基本テスト用にテストベンチを事前設定するための簡単な方法です。正しい設定では、顧客にとって操作が簡単で安価になります。完全なOSを持っていれば、Pythonのような高級言語で書くことができます。開発ツールを購入する必要はなく(Linuxでは無料)、強力なネットワーク機能を利用でき、シンプルなテキストファイルを使って設定できます。 SDカード上のテキストファイルを編集するだけのことですが、USB-to-I2C MCUをRPi Zeroまたは他のLinux内蔵コンピュータ(これらのボードにはI2C、SPI、PWM、GPIO、ADCがあります)で置き換える必要もあります。などが組み込まれています。

ある時点で、強力でシンプル、そして安価なLinux、そしてこれらの小さな組み込みコンピュータが、大きなPCの代わりにテストを実行できるようになることに気付くかもしれません。それが私が終わったところです:)

1
追加された

さまざまな速度と低電圧範囲でサイズ1k ... 512kの範囲のそのようなチップがたくさんあります。

http://www.microchip.com/wwwproducts/en/24AA01
http://www.microchip.com/wwwproducts/en/24AA16
http://www.microchip.com/wwwproducts/en/24AA512

0
追加された
ああ、私はあなたがスレーブに必要な設定データを送信することができるかもしれないと思った。過去に私はハードウェアを初期化するためにシリアルEEPROMを使いました。
追加された 著者 user17574,
こんにちはトニー、あなたの助けをありがとう、しかし私はあなたが質問を誤解していると思います。私は単なる「受動的な」eepromチップではなく、自律的に設定を書き込むことができるデバイスを探しています。
追加された 著者 Vietnhi Phuvan,