Чим відрізняється ATtiny2313A від ATtiny2313?
Ще одна група запитань, що доволі часто зустрічаються в логах, це запитання про відмінності нових «А-версій» мікроконтроллерів AVR від їх попередників. Шукають «в чому різниця між atmega48p та atmega48pa», «різниця програмування atmega8a та atmega8», або взагалі «перехід з atmega16 на atmega16A».
Вираз «програмування мікроконтроллера» може мати різні значення і лише іноді запитання поставлено хай з використанням сленгу, але однозначно — «прошивка atmega32 та atmega32A».
Якщо термін «програмування» розуміти як «написання та компіляція програми», то для пошуку відповіді потрібно звернутися до відповідних документів від фірми Atmel — описам обох мікроконтроллерів та до розділу Migration Notes (сюрприз! сюрприз! «migration» в даному випадку якраз і є той «перехід», про який питають). З точки зору написання програми в більшості випадків відмінностей нема зовсім. В AVR523: Migration from ATmega8 to ATmega8A написано
The ATmega8A is a functionally identical, drop-in replacement for the ATmega8. All devices are subject to the same qualification process and same set of production tests, but as the manufacturing process is not the same some electrical characteristics differ.
і далі по тексту видно, що різниця дійсно лише в електричних характеристиках. Зменшено струм споживання та тепер одна модель перекриває той діапазон напруг живлення і тактових частот, який накривався двома моделями, ATmega8 та ATmega8L. Дещо збільшився вихідний рівень ‘0’ UOL.
Але слід бути уважним.
В деяких випадках, наприклад, для ATtiny261/461/861 та ATtiny261A/461A/861A чи ATtiny2313 та ATtiny2313A написано так само, але відмінності значно більші — додалися нові можливості і разом з ними нові регістри чи біти в регістрах. Тут теж все «повинно» бути нормально, бо нові функції з метою сумісності після скидання мікроконтроллера вимкнені, але як мінімум є ризик не використати якусь нову можливість на зразок Sleeping BOD і отримати гірші параметри системи, ніж було б можна.
Детальніше про відмінності між мікроконтроллерами написано пізніше.
Що ж стосується «програмування» як запису зкомпільованої програми у флеш-пам’ять мікроконтроллера, то тут все зовсім просто.
Мікроконтроллери «A» та «не-A» з точки зору avreal (або іншого програматора) не відрізняються нічим. Відповідні кристали мають однаковий набір «ф’юзів» (fuses) та однакові сигнатури. Програматор взагалі не може їх розрізнити, тому зараз avreal і в переліку підтримуваних мікросхем, і в повідомленнях при роботі програми видає всі можливі імена для даної сигнатури через вертикальну риску ‘|’ (pipe symbol), наприклад:
Device connected, tiny2313|tiny2313A detected.
Якщо ж в А-версії якогось чергового мікроконтроллера відрізнятимуться сигнатура чи «ф’юзи», avreal їх показуватиме в переліку окремо.