Какой хороший способ для mcu определить, на какой версии аппаратного обеспечения он работает?


13

Я работаю над новым дизайном продукта, и, вероятно, будут небольшие или большие аппаратные изменения / исправления в течение срока службы продукта. Для будущих обновлений прошивки в полевых условиях мне нужен способ определения версии оборудования. Что такое хорошая стратегия?

В настоящее время я вытягиваю два запасных контакта вверх / вниз с помощью внешних резисторов и проверяю схему. Это позволяет использовать только 4 версии оборудования, но этого может быть достаточно для практических целей. Это может стать проблемой, если мне понадобится один или оба этих контакта в будущей версии оборудования.

Я предполагаю, что более экономичным способом может быть подключение резисторного делителя к выводу АЦП. Каждая ревизия оборудования может иметь разные значения резисторов. К сожалению, в моем текущем дизайне нет запасных АЦП.

Я предполагаю, что другим способом может быть кодирование номера версии аппаратного обеспечения в EEPROM или флэш-памяти mcu во время производства? (У нас нет такой возможности в данный момент.)

Я думаю, я ищу предложения для гибкого и надежного метода.

[РЕДАКТИРОВАТЬ]

Число рейнольдса предложение от @ trav1s: у меня нет адресной шины как таковой, но у меня есть 24LCxx EEPROM на шине I2C. 3 младших бита адреса ведомого устройства являются аппаратными. Я думаю, я мог бы изменить биты адреса и искать EEPROM во время запуска.

Ответы:


7

Это то, с чем я имею дело на постоянной основе. У нас очень сложное аппаратное обеспечение, которое используется уже почти 10 лет, с различными версиями различных подсистем. Некоторые подсистемы имеют 2-битный код, но, как вы упомянули, этого не всегда достаточно.

Предложение EEPROM является хорошим, но оно требует программирования EEPROM и заполнения платы правильной версией.

Я хотел бы предложить 8-битный параллельный последовательный сдвиговый регистр типа 74HC166. Номер версии может быть установлен на входе самой платой ПК, связывая входы ВЫСОКИЙ или НИЗКИЙ, и тогда вам нужно только 3 контакта для загрузки и считывания регистра сдвига из MCU.


Мне нравится, что версия hw встроена в плату, поэтому мне нужна только одна версия прошивки, и мне не нужно обрабатывать предварительно запрограммированные EEPROM. Похоже, что сдвиговый регистр можно найти примерно за 0,1 доллара США, и это нормально.
— умереть

2
В том же духе вы также можете использовать расширитель портов I2C, висящий на вашей шине I2C. Это может быть немного дороже, хотя.
— alex.forencich

8

Я бы не использовал номер версии, запрограммированный в микроконтроллере. Если программное обеспечение не отличается для разных версий плат, но тогда версия платы мне кажется излишней. Иметь как можно меньше версий программного обеспечения микроконтроллера, в идеале только одну. Каждая отдельная версия может вызвать проблемы с логистикой.

Код EEPROM является хорошей идеей, поскольку он допускает множество различных кодов плат, но вынимает его из микроконтроллера в отдельном устройстве. EEPROM дорог для больших емкостей (намного дороже, чем Flash), но за несколько байтов вы можете найти их дешевыми. Это только 16 центов в сотнях и требует только 1 линию ввода / вывода.

Чтобы уменьшить вероятность ошибок, используйте разные пакеты для каждой версии платы. Поэтому запрограммируйте партию EEPROM с номером версии 1 в SOT-23, следующей версией 2 в MSOP и т. Д. Тогда у вас не будет EEPROM версии 1 на плате версии 2.


Спасибо. Это может быть глупым вопросом, но как мне запрограммировать партию EEPROM до того, как поместить их на плату? У меня нет возможности снять ЭСППЗУ с ленты, запрограммировать их, положить обратно на ленту и отправить ленту сборщику печатных плат.
— умереть

@morten - Ваш поставщик может сделать это для вас. Вы отправляете им свой файл (этот один байт :-)) и получаете запрограммированные детали, помеченные выбранной вами маркировкой. Стоимость будет зависеть от размера партии; Вы будете иметь фиксированную стоимость + стоимость за часть. Однажды мы рассчитали, не будет ли дешевле заниматься программированием самостоятельно, но в любом случае для тысяч это не стоило того.
— Стивенв

4

Один вариант, который будет использовать только два цифровых вывода, выглядит примерно так:

Принципиальная электрическая схема

Изменяя значения R1 и C1, вы можете установить разное время зарядки конденсатора, которое можно измерить для определения версии аппаратного обеспечения.


Ага, довольно умное решение :-)
— morten

2

Если в адресной шине есть неиспользуемое пространство, вы можете поместить на нее регистр ПЗУ, который может быть прочитан MCU. Регистр будет содержать номер версии аппаратного обеспечения. Когда MCU читает с этого адреса, регистр записывает свое значение в шину данных. Регистр может быть встроен в плату или, если вы хотите иметь возможность менять номер версии своими руками, вы можете сделать выводы, которые можно привязать вверх / вниз, как вы делаете сейчас.


Может быть, я мог бы использовать адрес самой EEPROM ... см. Редактирование на вопрос.
— умереть

OK. Не знал, что там был автобус I2C. Может быть, вы могли бы просто сделать крошечное ведомое устройство I2C, которое считывает номер версии, когда MCU читает с него.
— Трэвисбартли
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.