Який спосіб mcu визначити, на якій апаратній версії він працює?


13

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

Я зараз тягну два запасні штифти вгору / вниз із зовнішніми резисторами і перевіряю схему. Це дозволяє лише 4 апаратні зміни, але це може бути достатньо для практичних цілей. Це може стати проблемою, якщо мені знадобиться одне або обидва ці штифти в майбутньому перегляді обладнання.

Я думаю, більш економічним способом може бути поділ резистора, підключений до штифта АЦП. Кожна апаратна версія може мати різні резистори значення. На жаль, у мене в поточному дизайні немає запасних АЦП.

Я думаю, іншим способом може бути кодування номера версії обладнання в EEPROM або флеш-пам'яті mcu під час виробництва? (На даний момент у нас немає цього закладу.)

Я думаю, я шукаю пропозиції щодо гнучких та надійних методів.

[EDIT]

Re. пропозиція від @ trav1s: У мене немає шини адреси, але у мене на шині I2C є 24LCxx EEPROM. Низькі 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 центів за 100 секунд, і потрібно лише 1 рядок вводу / виводу.

Спосіб зменшити ймовірність помилок - це мати різний пакет для кожної версії плати. Отже, запрограмуйте партію EEPROM, запрограмовану з версією №1 в SOT-23, наступною версією 2 в MSOP і т.д.


Дякую. Це може бути дурним питанням, але як я можу отримати партію EEPROM, запрограмовану до того, як розмістити їх на дошці? У мене немає можливості зняти EEPROMS зі стрічки, запрограмувати їх, повернути їх на магнітофонну стрічку та надіслати стрічку на монтажник друкованої плати.
ранок

@morten - Ваш постачальник може зробити це за вас. Ви надсилаєте їм свій файл (той байт :-)), і ви отримуєте запрограмовані деталі назад, позначені позначкою на ваш вибір. Вартість буде залежати від розміру партії; у вас буде фіксована вартість + вартість за деталь. Ми колись підраховували, чи не буде дешевше робити програмування самостійно, але в будь-якому випадку тисячам цього не варто.
stevenvh

4

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

Кругова діаграма

Змінюючи значення R1 і C1, ви можете мати різний час заряду конденсатора, який можна виміряти для визначення апаратної версії.


Ага, досить розумне рішення :-)
ранок

2

Якщо в адресної шині є незадіяне місце, ви можете розмістити на шині регістр ПЗУ, який може бути прочитаний MCU. Реєстр міститиме номер версії обладнання. Коли MCU читає з цієї адреси, регістр записує його значення на шину даних. Реєстр може бути прокладений на дошці або, якщо ви хочете мати можливість змінити номер версії голими руками, ви можете зробити шпильки, які можна зав'язати / вниз, як ви робите зараз.


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

ДОБРЕ. Не знав, що є автобус I2C. Можливо, ви могли б просто зробити крихітну рабу I2C, яка зчитує номер версії, коли MCU читає з неї.
travisbartley
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.