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.
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.
sumber
Satu opsi yang hanya akan menggunakan dua pin digital adalah sesuatu seperti ini:
Dengan mengubah nilai R1 dan C1 Anda dapat memiliki waktu pengisian berbeda untuk kapasitor yang dapat Anda ukur untuk menentukan versi perangkat keras.
sumber
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.
sumber