Я работаю над новым дизайном продукта, и, вероятно, будут небольшие или большие аппаратные изменения / исправления в течение срока службы продукта. Для будущих обновлений прошивки в полевых условиях мне нужен способ определения версии оборудования. Что такое хорошая стратегия?
В настоящее время я вытягиваю два запасных контакта вверх / вниз с помощью внешних резисторов и проверяю схему. Это позволяет использовать только 4 версии оборудования, но этого может быть достаточно для практических целей. Это может стать проблемой, если мне понадобится один или оба этих контакта в будущей версии оборудования.
Я предполагаю, что более экономичным способом может быть подключение резисторного делителя к выводу АЦП. Каждая ревизия оборудования может иметь разные значения резисторов. К сожалению, в моем текущем дизайне нет запасных АЦП.
Я предполагаю, что другим способом может быть кодирование номера версии аппаратного обеспечения в EEPROM или флэш-памяти mcu во время производства? (У нас нет такой возможности в данный момент.)
Я думаю, я ищу предложения для гибкого и надежного метода.
[РЕДАКТИРОВАТЬ]
Число рейнольдса предложение от @ trav1s: у меня нет адресной шины как таковой, но у меня есть 24LCxx EEPROM на шине I2C. 3 младших бита адреса ведомого устройства являются аппаратными. Я думаю, я мог бы изменить биты адреса и искать EEPROM во время запуска.
Я бы не использовал номер версии, запрограммированный в микроконтроллере. Если программное обеспечение не отличается для разных версий плат, но тогда версия платы мне кажется излишней. Иметь как можно меньше версий программного обеспечения микроконтроллера, в идеале только одну. Каждая отдельная версия может вызвать проблемы с логистикой.
Код EEPROM является хорошей идеей, поскольку он допускает множество различных кодов плат, но вынимает его из микроконтроллера в отдельном устройстве. EEPROM дорог для больших емкостей (намного дороже, чем Flash), но за несколько байтов вы можете найти их дешевыми. Это только 16 центов в сотнях и требует только 1 линию ввода / вывода.
Чтобы уменьшить вероятность ошибок, используйте разные пакеты для каждой версии платы. Поэтому запрограммируйте партию EEPROM с номером версии 1 в SOT-23, следующей версией 2 в MSOP и т. Д. Тогда у вас не будет EEPROM версии 1 на плате версии 2.
источник
Один вариант, который будет использовать только два цифровых вывода, выглядит примерно так:
Изменяя значения R1 и C1, вы можете установить разное время зарядки конденсатора, которое можно измерить для определения версии аппаратного обеспечения.
источник
Если в адресной шине есть неиспользуемое пространство, вы можете поместить на нее регистр ПЗУ, который может быть прочитан MCU. Регистр будет содержать номер версии аппаратного обеспечения. Когда MCU читает с этого адреса, регистр записывает свое значение в шину данных. Регистр может быть встроен в плату или, если вы хотите иметь возможность менять номер версии своими руками, вы можете сделать выводы, которые можно привязать вверх / вниз, как вы делаете сейчас.
источник