mcuが実行しているハードウェアバージョンを判断するための良い方法は何ですか?


13

私は新しい製品の設計に取り組んでおり、おそらく製品の耐用期間中に小規模または大規模なハードウェアの変更/修正が行われるでしょう。フィールドでの将来のファームウェア更新のために、ハードウェアリビジョンを決定する方法が必要です。良い戦略とは何ですか?

現在、外部抵抗を使用して2つの予備ピンを上下に引き、パターンをチェックしています。これは4つのハードウェアリビジョンのみを許可しますが、実用的な目的にはこれで十分かもしれません。将来のハードウェアリビジョンでこれらのピンの一方または両方が必要な場合、問題になる可能性があります。

より経済的な方法は、抵抗分割器をADCピンに接続することです。ハードウェアリビジョンごとに異なる値の抵抗器を使用できます。残念ながら、現在の設計には予備のADCはありません。

別の方法は、生産中にハードウェアのバージョン番号をEEPROMまたはmcuフラッシュにエンコードすることでしょうか?(現時点では、この機能はありません。)

柔軟で堅牢な方法の提案を探していると思います。

[編集]

Re。@ trav1sからの提案:アドレスバス自体はありませんが、I2Cバスに24LCxx EEPROMがあります。スレーブアドレスの下位3ビットはハードワイヤードです。起動時にアドレスビットを変更してEEPROMを検索できると思います。

回答:


7

これは私が継続的に取り組んでいるものです。さまざまなサブシステムの異なるバージョンを使用して、ほぼ10年間フィールドに存在する非常に複雑なハードウェアがあります。一部のサブシステムには2ビットコードがありますが、前述のように、それだけでは十分ではありません。

EEPROMの提案は良いものですが、EEPROMをプログラミングし、適切なバージョンをボードに実装する必要があります。

私が提案するのは、74HC166のような8ビットパラレルシリアルアウトシフトレジスタです。バージョン番号は、入力をHIGHまたはLOWに接続するPCボード自体によって入力に設定でき、MCUからシフトレジスタをロードして読み取るために必要なのは3ピンのみです。


ハードウェアバージョンがボードにハードワイヤードされているのが好きです。そのため、1つのファームウェアバージョンだけが必要で、事前にプログラムされたEEPROMを処理する必要はありません。シフトレジスタは約USD 0.1で見つけることができるように見えますが、それで問題ありません。
morten

2
同じ線に沿って、I2Cバスからぶら下がっているI2Cポートエクスパンダーを使用することもできます。ただし、もう少し高価かもしれません。
alex.forencich

8

マイクロコントローラーにプログラムされたバージョン番号は使用しません。ソフトウェアがボードのバージョンごとに異なる場合を除き、ボードのバージョンは私には不必要なようです。マイクロコントローラのソフトウェアのバージョンはできるだけ少なくし、理想的には1つだけにしてください。異なるバージョンはそれぞれ、ロジスティックの問題を引き起こす可能性があります。

EEPROMコードは、多くの異なるボードコードを使用できますが、別のデバイスのマイクロコントローラーから取り出すため、良いアイデアです。EEPROMは大容量の場合は高価ですが(フラッシュよりもビットあたりのコストがはるかに高くなります)、数バイトの場合は安価です。これは100秒でわずか16セントで、I / Oラインは1本しか必要ありません。

エラーの可能性を減らす方法は、ボードのバージョンごとに異なるパッケージを用意することです。したがって、SOT-23のバージョン番号1、MSOPの次のバージョン2などでプログラムされたEEPROMのバッチを用意します。その後、バージョン2ボードにバージョン1 EEPROMを置くことはできません。


THX。これはばかげた質問かもしれませんが、ボードに置く前にEEPROMのバッチをプログラムするにはどうすればよいですか?EEPROMをテープから取り出してプログラムし、テープに戻し、テープをPCBアセンブラに送る機能はありません。
morten

@morten-サプライヤはあなたのためにそれを行うことができます。ファイル(1バイト:-))を送信すると、選択したマーキングでマークされたパーツがプログラムされます。コストはバッチサイズに依存します。固定費+部品あたりの費用があります。プログラミングを自分で行う方が安くならないかどうかを一度計算しましたが、何千もの場合はそれだけの価値はありませんでした。
stevenvh

4

2つのデジタルピンのみを使用する1つのオプションは、次のようなものです。

回路図

R1とC1の値を変更することにより、ハードウェアのバージョンを判断するために測定できるコンデンサの充電時間を変えることができます。


ああ、かなり賢い解決策:-)
morten

2

アドレスバスに未使用のスペースがある場合は、MCUが読み取ることができるROMレジスタをバスに配置できます。レジスタには、ハードウェアのバージョン番号が含まれます。MCUがそのアドレスから読み取ると、レジスタはその値をデータバスに書き込みます。レジスタはボード上に配線されるか、素手でバージョン番号を変更できるようにしたい場合は、現在のようにピンを上下に固定できます。


EEPROM自体のアドレスを使用することもできます...質問の編集を参照してください。
morten

OK。I2Cバスがあることを知りませんでした。MCUがバージョン番号を読み取るときにバージョン番号を読み取る小さなI2Cスレーブを作成することもできます。
トラビスバートリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.