AVReAl/Linux та права адміністратора

Від самого початку AVReAl/Linux працював з LPT напряму, командами процесора для доступу до портів вводу/виводу. Для цього потрібні права адміністратора і avreal встановлюється з параметрами власника та групи root та піднятим SUID-бітом. Пізніше було дописано підтримку роботи з пристроями /dev/parport, для доступу до яких достатньо включити користувача в групу lp. Все це описано у публікації AVReAl та LPT в Linux.

Коли в програму додалася підтримка роботи з FTDI MPSSE, я помітив, що без прав рута не виходить з’єднатися з мікросхемою FT2232. Але у мене на комп’ютері всі версії AVReAl працюють від імені адміністратора, бо час від часу робиться перевірка роботи з прямим доступом до LPT. Тому програма працювала з FT2232 і у мене не було потреби копати глибше.

Нарешті вирішив розібратися з цим питанням. Як це часто буває, щоб зробити правильно, досить лише зупинитися, знайти час трохи почитати та подумати.

Для того, щоб обійтися без привілеїв адміністратора при роботі з програматорами на базі мікросхем FTDI, потрібно в каталог /etc/udev/rules.d/ додати файл з іменем, наприклад, 55-ftdi.rules та наступним вмістом:

# FTDI-based devices
#
# FTDI vid=0403
# FT2232, FT2232H: pid=6010
# FT4232H:  pid=6011
# FT232H:   pid=6014
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010|6011|6014", OWNER="root", GROUP="root", MODE="0666"

Якщо програматор було підключено, його слід відключити та знову підключити до комп’ютера. Перезавантажуватися непотрібно.

Правила написано з розрахунку на мікросхему FTDI, якій записом в конфігураційній EEPROM не замінено vid/pid за умовчанням. Якщо використовується адаптер з іншими vid/pid, треба додати відповідний рядок в цей файл.

Пакет OpenOCD містить в собі файл правил для всіх адаптерів, які він підтримує. При використанні з AVReAl з адаптером на мікросхемі FTDI з цього списку можна просто перенести файл правил OpenOCD в каталог /etc/udev/rules.d/. В правилах OpenOCD використано GROUP="plugdev", MODE="0664". Але я не бачу принципової різниці між цими двома варіантами на «десктопі», де всіх користувачів за умовчанням включено в групу plugdev, щоб вони могли підключати USB-флешки та переносні диски.

Звісно, щоб записати цей файл, права адміністратора знадобляться. Але після цього AVReAl працюватиме від імені будь-якого користувача.

Attached Files:

AVReAl та MPSSE

Деякі з мікросхем фірми FTDI мають вбудований апаратний блок послідовних інтерфейсів MPSSE, який призначено для реалізації інтерфейсів JTAG, SPI, I2C. FT2232D та її старіші версії FT2232C, FT2232L підтримують Full-Bandwidth USB та мають верхню межу частоти сигналу TCK/SCK 6 МГц. Для мікросхем, що працюють в стандарті USB 2.0 Hi-Speed, тобто FT2232H, FT4232H, FT232H, межа вища — 30 МГц.

MPSSE визначає використання ліній DBUS0..DBUS2 як сигналів TCK/SCK, TDI/MOSI та TDO/MISO. Для програмування мікроконтролерів AVR потрібен сигнал RESET, для якого можна використати лінію DBUS3 (TMS/CS), що і зроблено в AVReAl за замовчуванням.

Використання MPSSE з AVReAl » » »

AVReAl update — 1.28r9

Вийшла нова версія програматора avreal — v1.28r9 (Tue 2011-12-20).

  • Додано підтримку FT232H (режим MPSSE)
  • Змінено обробку затримок у Windows-версії: зменшено завантаження процесора при роботі з ключами -k/-K.
  • Для всіх мікроконтролерів змінено метод пересинхронізації (resync). Спочатку робиться одна спроба синхронізації імпульсом RESET, після чого виконується спосіб з додатковим імпульсом SCK.
    Більше про методи синхронізації.

Синхронізація ISP-програматора з AVR

Робота ISP-програматора з мікроконтролером AVR починається з активації сигналу скидання мікроконтролера, за якою йде передача по SPI команди входу в режим програмування. На момент активації сигналу RESET на вході SCK обов’язково має бути низький рівень. Якщо ця умова з якоїсь причини не виконується, то спад сигналу SCK вже після встановлення низького рівня на RESET призводить до непередбаченої зміни стану автомату програмування.

AVR programming waveforms

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

Синхронізацію може бути втрачено і під час програмування, про це можна почитати в публікації про повідомлення «synchronisation lost» в AVReAl.

В документації на мікроконтролери AVR різних років розробки описано два способи відновлення синхронізації у випадку, якщо перша команда входу у режим програмування закінчилася невдачею.

»»» Дізнатися більше про способи пересинхронізації

AVReAl beta — 1.28r9b1

Вийшла бета-версія програматора avreal 1.28r9b1 з підтримкою FT232H.
Прохання до власників плат з мікросхемою FT232H перевірити роботу.


Доповнення: тестування закінчено, всім дякую.

AVReAl 1.28r8 / FreeBSD

Я дійсно сильно затримався на FreeBSD 6.4, бо сам я не користуюся цією операційною системою і забув слідкувати за виходом нових версій.
Мене довелося підштовхнути до переходу на FreeBSD 8.2.

Перезібрав avreal-1.28r8 для 8.2 та після перевірки виклав на сторінці завантаження avreal поруч зі збіркою для 6.4.

Всі наступні версії збиратимуться вже лише для 8.2.

AVReAl update — 1.28r8

Вийшла нова версія програматора avreal — v1.28r8 (Sat 2011-08-13).

  • Додано підтримку двійкового формату файлів (raw binary).
    Формат задається префіксом :bin: в імені файлу.
  • Змінено поведінку ключа -r.
    При використанні ключа з модифікатором -r+ у вихідний файл записується весь вміст відповідного регіону пам’яті мікроконтролера, тобто поведінка відповідає «старій» поведінці ключа.
    Без модифікатора, у формі -r, у вихідний файл формату :ihex: не записуються рядки, які в полі даних мають лише байти FF. У файли формату :bin: не записується «хвіст», що складається лише з FF.

Як встановити дві версії libftd2xx

Як вже писалося, 64-бітні бібліотеки libftd2xx.so версії 1.0.0 та новіші не сумісні по розміру змінних зі старішими бібліотеками, останньою з яких була версія 0.4.16. З 32-бітними бібліотеками такої проблеми нема.
Для роботи 64-бітної версії avreal/Linux необхідно встановити стару версію libftd2xx, яку можна взяти на сторінці download.
Може виникнути необхідність на одному комп’ютері встановити обидві версії бібліотеки. Для цього avreal, починаючи з версії 1.28r6, завантажує бібліотеку по імені libftd2xx.so.0, а не libftd2xx.so.
Розглянемо рекомендований процес встановлення бібліотеки.

Continue reading ‘Як встановити дві версії libftd2xx’ »

AVReAl update — 1.28r7

Вийшла нова версія програматора avreal – v1.28r7 (Sun 2011-02-27).

Помилка в обробці ключа -v+

В avreal версій з 1.28r2 по 1.28r6 є помилка в обробці ключа -v+, тобто ключа -v з модифікатором +.
Помилково виконується перевірка на чистоту всього обсягу пам’яті мікроконтролера, а не лише адрес, не зайнятих вмістом hex-файлу. В результаті після першої ж верифікації робота припиняється і подальші операції, наприклад, запис fuses, не виконуютьcя.

Ключ -v без модифікатора працює нормально, тому рекомендується використовувати його.
Помилка не критична, буде виправлена в черговій версії avreal.

Чесно кажучи, я вже і не пам’ятаю з яких міркувань в avreal було додано можливість перевірки на 0xFF не задіяних у вхідному HEX-файлі позицій. Чи хтось колись просив зробити, чи мені самому раптом захотілося. Зараз от думаю, що особливої потреби в цьому і нема — при записові після стирання вони і так мали б бути стерті, а якщо дуже хочеться, можна ключ -b додати. При дозаписові якихось таблиць без стирання нема сенсу перевіряти на чистоту, бо в незайнятих цим HEX-файлом позиціях розміщено основний код.
А місце для внесення помилок додалося. Кажуть же, що «простота — запорука здоров’я» 🙂
Може, пізніше я цей модифікатор приберу зовсім.


Помилку виправлено у версії 1.28r7.

[flagcounter image]