Не так давно узнал про Bus Pirate — устройство для эмуляции и анализа различных протоколов управления электронными устройствами. Ну типа там SPI, I2 °C и прочих. Решил пощупать, что за зверь такой и купил у братьев-китайцев это устройство. Сегодня получил на почте заветную посылку и решил проверить как оно работает.
Для начала должен отметить, что в данный момент есть 2 версии этого устройства 3-я и 4-я. Третья версия является стабильной и наиболее отлаженной, но я купился на магию циферок и купил 4-ю, которая обладает более продвинутым железом и потенциально имеет больше возможностей.
Изначально хотел купить на старом добром AliExpress-е. Там есть как Bus Pirate v3.6 так и 4-й bus pirate, но что-то не захотелось покупать голую плату и в итоге приобрёл на ebay.com Bus Pirate v4
Вот такую штуку я в итоге получил:

Подключение
Эта штука работает через USB-> COM порт, поэтому, чтобы не разбираться с номером порта, который ему присвоит система я традиционно задействую классическую линуксовую методику по созданию именованной ссылки на нужное мне устройство. Для этого нужно прописать определённые правила в udev.
Итак для начала посмотрим как же у нас подключилась эта штуковина. Для этого подключим её по USB и выполнима команду:
1 | $ lsusb |
Как мы видим устройство в списке появилось под именем Microchip Technology, Inc. С помощью команды dmesg
посмотрим какое имя присвоилось устройству:
1 | $ dmesg |
И запросим у udev
для этого устройства подробную информацию:
1 | $ udevadm info --attribute-walk -n /dev/ttyACM0 |
на основе которой создадим файл с правилами для udev
1 | $ sudo nvim /etc/udev/rules.d/99-bus-pirate.rules |
Добавляем туда правило которое для заданного набора аттрибутов создаст нам ссылку на созданное устройство.
1 | SUBSYSTEM=="tty", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f7ea", ATTRS{serial}=="00000001" GROUP="users", MODE="0666", SYMLINK+="buspirate" |
Вытаскиваем устройство и вставляем обратно — в папке /dev/
у нас теперь появилась ссылка на устройство /dev/buspirate
, которую мы и будем использовать для доступа к устройству.

Ещё раз повторюсь — нужно это, чтобы не гадать какое устройство использовать для подключения, а чётко знать что воткнув именно это устройство я получу конкретное уникальное для него имя в /dev/.
Работа с устройством
Убедившись, что устройство распознано системой попробуем поиграться с ним. Для подключения буду использовать программу screen
, хотя подойдёт любой эмулятор терминала. Фактически мы просто подключаемся по RS232 терминалу к bus pirate через COM-порт /dev/buspirate
1 | $ screen /dev/buspirate 115200 8N1 |
Ну что — видим приглашение, что означает, что устройство откликается и готово принимать наши команды.
Тестирование
Запустим процедуру самотестирования устройства
1 | HiZ>~ |
После чего видим кучу самопроверок, оканчивающихся на OK
из чего я делаю вывод, что самодиагностика работает и устройство не имеет каких-либо проблем.
Ну и посмотрим, что у нас за прошивка:
1 | HiZ>i |
Увы — не самое новьё, но и не совсем уж старая. Похоже на последнюю официальную, в то время как есть уже Community Edition 7-й версии. Будет время — прошьюсь на что-то более новое, а пока и так сойдёт.
Подробнее о командах Bus Pirate можно почитать тут
По прошивке можно почитать тут
AVR программатор
Тесты это конечно здорово, но хотелось бы каких-то более конкретных примеров. Поэтому решил попробовать bus pirate в качестве AVR программатора — тем более, что под рукой как раз есть проект на attiny13a.
Итак для начала подсоединяем bus pirate к контроллеру согласно таблице:
Bus Pirate | Attiny13A | Примечение |
---|---|---|
CS | NRST | |
+5V | Vcc | |
GND | GND | |
MOSI | MOSI | |
MISO | MISO | |
CLK | SCK | |
AUX | XTAL1 | необязательно |
У меня в итоге получился вот такой франкенштейн. Нужно будт конечно на будущее сделать более подходящий шнурок и разъём.

В качестве софта для прошивки используем старый добрый avrdude
…, а собственно под linux у нас вроде как больше-то вариантов и нет. По счастью avrdude
прекрасно умеет работать с bus pirate. Пробуем:
1 | $ avrdude -c buspirate -P /dev/buspirate -p t13 -v |
В общем получили фигу — ничего не работает. По счастью нашлись страдальцы, которые поимели похожую проблему, но в отличие от меня смогли решить её. Я лишь воспользуюсь чужим опытом. Какой-то индонезийский умелец предложил решение, которое действительно работает. Нужно лишь добавить несколько ключей к avrdude
, а именно — -x ascii -x nopagedread -x nopagedwrite
и типа всё должно заработать. Итак пробуем:
1 | $ avrdude -c buspirate -P /dev/buspirate -p t13 -v -x ascii -x nopagedread -x nopagedwrite |
Всё получилось! Я так-же попробовал заливать в контроллер настоящую прошивку и всё получилось тоже без проблем.
Более подробно про использование bus pirate в качестве программатора vожно почитать тут
Первые итоги
Ну во первых как минимум я получил живое и работающее устройство с относительно новой прошивкой — братья китайцы не обманули и это уже хорошо.
Как минимум я могу использовать его в качестве программатора для атмеловских контроллеров. Пока что он работает стабильнее, чем китайский usbasp (у меня вот такой), который периодически не может прошить фьюзы, пока не выполнишь стирание чипа, в результате чего в моём Makefile-е для прошивки используется 2 команды — очистка, а потом прошивка. Bus pirate в этом плане работает стабильно и таких проблем не имеет.
Правда в качестве программатора он имеет нюанс — питание подаётся только на время прошивки и в остальное время выключается. Я как-то привык запитывать контроллер прямо от программатора и такое поведение немного необычно, но может оно и к лучшему — отучусь от этой дурацкой привычки.
В общем в дальнейшем попробую использовать эту эту железяку в различных применениях о чём конечно же отпишусь в очередной статье.
Комментарии