Apa cara yang baik bagi MCU untuk menentukan versi perangkat keras yang digunakannya?

13

Saya sedang mengerjakan desain produk baru dan mungkin akan ada perubahan / perbaikan perangkat keras kecil atau besar selama masa pakai produk. Untuk pembaruan firmware di masa depan, saya perlu cara untuk menentukan revisi perangkat keras. Apa strategi yang baik?

Saat ini saya menarik dua pin cadangan ke atas / ke bawah dengan resistor eksternal dan memeriksa polanya. Ini hanya memungkinkan untuk 4 revisi perangkat keras, tetapi itu mungkin cukup untuk tujuan praktis. Mungkin menjadi masalah jika saya memerlukan satu atau kedua pin tersebut di revisi perangkat keras di masa depan.

Saya kira cara yang lebih ekonomis mungkin untuk memiliki pembagi resistor yang terhubung ke pin ADC. Setiap revisi perangkat keras dapat memiliki nilai resistor yang berbeda. Sayangnya saya tidak memiliki ADC cadangan dalam desain saya saat ini.

Saya kira cara lain bisa dengan menyandikan nomor versi perangkat keras dalam EEPROM atau mcu flash selama produksi? (Kami tidak memiliki fasilitas itu saat ini.)

Saya kira saya sedang mencari saran untuk metode yang fleksibel dan kuat.

[EDIT]

Kembali. saran dari @ trav1s: Saya tidak memiliki bus alamat per se tetapi saya memiliki EEPROM 24LCxx pada bus I2C. Rendahnya 3 bit dari Alamat Slave sudah tertanam. Saya kira saya bisa mengubah bit alamat dan mencari EEPROM saat startup.

Morten
sumber

Jawaban:

7

Ini adalah sesuatu yang saya tangani secara berkelanjutan. Kami memiliki perangkat keras yang sangat kompleks yang telah ada di lapangan selama hampir 10 tahun, dengan berbagai versi berbagai subsistem. Beberapa subsistem memiliki kode 2-bit, tetapi seperti yang Anda sebutkan, itu tidak selalu cukup.

Saran EEPROM adalah saran yang bagus, tetapi membutuhkan pemrograman EEPROM dan mengisi papan dengan versi yang tepat.

Apa yang saya sarankan adalah 8-bit parallel out-serial register geser seperti 74HC166. Nomor versi dapat diatur pada input oleh papan PC itu sendiri mengikat input TINGGI atau RENDAH dan kemudian Anda hanya perlu 3 pin untuk memuat dan membaca register geser dari MCU.

lyndon
sumber
Saya suka bahwa versi hw tertanam di papan, dengan cara itu saya hanya perlu satu versi firmware dan saya tidak perlu menangani EEPROM yang sudah diprogram. Sepertinya register geser dapat ditemukan sekitar USD 0,1 dan itu OK.
morten
2
Di sepanjang jalur yang sama, Anda juga bisa menggunakan expander port I2C yang tergantung dari bus I2C Anda. Ini mungkin sedikit lebih mahal.
alex.forencich
8

Saya tidak akan menggunakan nomor versi yang diprogram dalam mikrokontroler. Kecuali jika perangkat lunaknya berbeda untuk versi papan yang berbeda, tetapi kemudian versi papan tampaknya berlebihan bagi saya. Miliki sesedikit versi perangkat lunak mikrokontroler, mungkin hanya satu. Setiap versi yang berbeda dapat menyebabkan masalah logistik.

Kode EEPROM adalah ide yang baik, karena memungkinkan banyak kode papan yang berbeda, tetapi mengeluarkannya dari mikrokontroler, di perangkat terpisah. EEPROM mahal untuk kapasitas besar (jauh lebih mahal per bit daripada Flash), tetapi untuk beberapa byte Anda dapat menemukannya murah. Yang ini hanya 16 sen dalam 100-an dan hanya membutuhkan 1 jalur I / O.

Cara untuk mengurangi kemungkinan kesalahan adalah memiliki paket yang berbeda untuk setiap versi papan. Jadi, minta batch EEPROM diprogram dengan nomor versi 1 di SOT-23, versi 2 berikutnya di MSOP, dll. Maka Anda tidak bisa memiliki EEPROM versi 1 di papan versi 2.

stevenvh
sumber
Terima kasih. Ini mungkin pertanyaan yang bodoh, tetapi bagaimana saya bisa membuat batch EEPROM diprogram sebelum meletakkannya di papan tulis? Saya tidak memiliki fasilitas untuk melepas EEPROM dari kaset, memprogramnya, memasangnya kembali dan mengirimnya ke assembler PCB.
morten
@morten - Pemasok Anda dapat melakukannya untuk Anda. Anda mengirimi mereka file Anda (satu byte itu :-)) dan Anda mendapatkan bagian-bagian yang diprogram kembali, ditandai dengan tanda pilihan Anda. Biaya akan tergantung pada ukuran batch; Anda akan memiliki biaya tetap + biaya per bagian. Kami pernah menghitung jika tidak akan lebih murah untuk melakukan pemrograman sendiri, tetapi dalam kasus apa pun untuk ribuan itu tidak layak.
stevenvh
4

Satu opsi yang hanya akan menggunakan dua pin digital adalah sesuatu seperti ini:

Diagram sirkuit

Dengan mengubah nilai R1 dan C1 Anda dapat memiliki waktu pengisian berbeda untuk kapasitor yang dapat Anda ukur untuk menentukan versi perangkat keras.

Bruno Ferreira
sumber
Aha, solusi yang cukup pintar :-)
morten
2

Jika ada ruang yang tidak terpakai di dalam bus alamat Anda bisa menempatkan register ROM di bus yang dapat dibaca oleh MCU. Register akan berisi nomor versi perangkat keras. Ketika MCU membaca dari alamat itu register akan menuliskan nilainya ke bus data. Register bisa tertanam di papan tulis atau jika Anda ingin dapat mengubah nomor versi dengan tangan kosong, Anda dapat membuat pin yang dapat diikat ke atas / bawah seperti yang Anda lakukan sekarang.

travisbartley
sumber
Mungkin saya bisa menggunakan alamat EEPROM itu sendiri ... lihat edit untuk pertanyaan.
morten
BAIK. Tidak tahu ada bus I2C. Mungkin Anda bisa membuat budak I2C kecil yang membaca kembali nomor versi ketika MCU membacanya.
travisbartley