Pracuję nad nowym projektem produktu i prawdopodobnie będą istnieć małe lub duże zmiany / poprawki sprzętowe przez cały okres użytkowania produktu. W przypadku przyszłych aktualizacji oprogramowania układowego w terenie potrzebuję sposobu ustalenia wersji sprzętowej. Jaka jest dobra strategia?
Obecnie ciągnę dwa zapasowe piny w górę / w dół rezystorami zewnętrznymi i sprawdzam wzór. Pozwala to tylko na 4 wersje sprzętowe, ale może to wystarczyć do celów praktycznych. Może to stać się problemem, jeśli będę potrzebować jednego lub obu tych pinów w przyszłej wersji sprzętowej.
Wydaje mi się, że bardziej ekonomicznym sposobem może być podłączenie dzielnika rezystora do pinu ADC. Każda wersja sprzętu może mieć inne rezystory wartości. Niestety nie mam żadnych zapasowych ADC w moim obecnym projekcie.
Sądzę, że innym sposobem może być zakodowanie numeru wersji sprzętu w pamięci EEPROM lub pamięci flash mcu podczas produkcji? (W tej chwili nie mamy tego obiektu.)
Chyba szukam propozycji elastycznej i niezawodnej metody.
[EDYTOWAĆ]
Re. sugestia z @ trav1s: Nie mam magistrali adresowej jako takiej, ale mam EEPROM 24LCxx na magistrali I2C. Niskie 3 bity adresu podrzędnego są podłączone na stałe. Chyba mógłbym zmienić bity adresu i wyszukać EEPROM podczas uruchamiania.
Nie użyłbym numeru wersji zaprogramowanego w mikrokontrolerze. Chyba że oprogramowanie różni się dla różnych wersji planszowych, ale wersja planszowa wydaje mi się zbędna. Miej jak najmniej wersji oprogramowania mikrokontrolera, najlepiej tylko jedną. Każda inna wersja może powodować problemy logistyczne.
Kod EEPROM jest dobrym pomysłem, ponieważ pozwala na wiele różnych kodów kart, ale wyjmij go z mikrokontrolera, w osobnym urządzeniu. EEPROM jest drogi dla dużych pojemności (dużo droższy na bit niż Flash), ale dla kilku bajtów można je znaleźć tanio. Ten ma tylko 16 centów na 100 i potrzebuje tylko 1 linii We / Wy.
Sposobem zmniejszenia prawdopodobieństwa błędów jest posiadanie innego pakietu dla każdej wersji planszy. Więc miej partię pamięci EEPROM zaprogramowaną z wersją nr 1 w SOT-23, następną wersją 2 w MSOP itp. Wtedy nie możesz mieć EEPROM wersji 1 na płycie w wersji 2.
źródło
Jedną z opcji, która wykorzysta tylko dwa cyfrowe piny, jest mniej więcej taka:
Zmieniając wartości R1 i C1 można ustawić różne czasy ładowania kondensatora, które można zmierzyć w celu ustalenia wersji sprzętowej.
źródło
Jeśli na magistrali adresowej jest wolne miejsce, możesz umieścić w pamięci ROM rejestr, który może być odczytany przez MCU. Rejestr zawierałby numer wersji sprzętu. Gdy MCU odczytuje z tego adresu, rejestr zapisuje swoją wartość na szynie danych. Rejestr może być podłączony na płycie lub jeśli chcesz mieć możliwość zmiany numeru wersji gołymi rękami, możesz zrobić szpilki, które można wiązać w górę / w dół, tak jak teraz.
źródło