Почему командная строка BOSSA не распознает Arduino Due?

Запуская Ubuntu 12.04.4 LTS (64-разрядная версия), я пытаюсь загрузить свой код в Arduino Due через собственный порт. Я пробовал как bossac, поставляемый с Arduino IDE (который является модифицированной версией BOSSA), так и главную ветку BOSSA.

Выполнение этой команды:

sudo ./bossac -p /dev/ttyACM0

Я получаю эту ошибку:

No device found on /dev/ttyACM0

Тем не менее, он отлично работает внутри Arduino IDE.

В чем может быть проблема?

, 👍4


3 ответа


Лучший ответ:

5

из меню IDE вы можете активировать режим подробной загрузки (и компиляции), в котором будут напечатаны все выполненные команды; Вероятно, вы упускаете необходимость открыть последовательный порт на скорости 1200 бод, что приведет к перезагрузке и последующему запуску загрузчика на чипе DUE, а боссаку нужно найти загрузчик. см. автоматический сброс

изменить: теперь у меня есть компьютер с физическим серийным номером, поэтому я попытался загрузить его в подробном режиме:

Sketch uses 10,380 bytes (1%) of program storage space. Maximum is 524,288 bytes.
Forcing reset using 1200bps open/close on port /dev/ttyS0
/home/xxx/arduino-1.5.6-r2/hardware/tools/bossac -i -d --port=ttyS0 -U false -e -w -v -b /tmp/build8035422101690460839.tmp/sketch_apr14a.cpp.bin -R 

как вы можете видеть, он сбрасывает плату, открывая COM порт на 1200, заставляя стартовать загрузчик. Вы должны сделать то же самое в своем скрипте перед запуском боссака. Как это можно сделать, зависит от вашей ОС

Обратите внимание, что сброс запускается чипом 8u2, используемым в качестве USB-адаптера последовательного порта на плате Arduino, поэтому его можно обойти, подключившись через контакт tx/rx (например, используя собственный преобразователь, как в моем примере с аппаратным последовательным портом). не будет работать, если вы не сделаете ручной сброс в нужное время

,

Я не вижу, что он делает, потому что выводится слишком много строк. Первые строки, где он звонит BOSSA, обрезаются., @Friend of Kim

Я нашел путь. Нажмите кнопку загрузки в процессе загрузки. Он потерпит неудачу и больше не будет выводить слишком много строк. Я собираюсь попробовать это сейчас., @Friend of Kim

вы также можете попробовать с незавершенным (или физическим последовательным портом, к которому ничего не подключено), @Lesto

Я считаю, что проблема заключалась либо в аргументах командной строки, либо в том, что перед подключением к плате необходимо было перезагрузить плату. Я не могу подключиться к нему через master bossash.exe, поэтому, похоже, они что-то изменили в Due, сделав мастер BOSSA бесполезным. Я еще не совсем знаю, но я постараюсь оставить комментарий позже, когда я во всем этом разобрался., @Friend of Kim

отредактировал мой ответ, как и ожидалось, сброс, открывающий серийный порт со скоростью 1200 бод, является фундаментальным проходом. Также обратите внимание, что загрузка, вероятно, как небольшой тайм-аут, поэтому вам нужно написать сценарий выполнения сброса + загрузки, чтобы сделать это во временном интервале., @Lesto

Сбрасывается ли он при подключении к 1200 из-за кода, написанного Arduino? Если бы я запрограммировал Due без библиотеки Arduino, этот метод перестал бы работать? Сохраняется ли загрузчик Arduino, который запускается автоматически, в памяти, отличной от кода, который мы обычно прошиваем в чип?, @Friend of Kim

никакого специального кода не требуется, достаточно открыть последовательный порт на скорости 1200 бод, и да, загрузчик находится в специальной области, как в UNO! Пока вы не получите этот сброс, вы можете программировать, используя все, что хотите., @Lesto

Хм, а как он узнает, что серийный номер открыт на скорости 1200 бод? Разве это не тот номер, который обе части должны знать заранее?, @Friend of Kim

возможно автоматическое определение скорости передачи данных. Кстати, вы забываете, что это виртуальный последовательный порт через USB, может применяться какой-то трюк. см. /hardware/arduino/sam/cores/arduino/USB/CDC.cpp, @Lesto

Хорошо, я могу загрузить его сейчас. Проблема только в том, что после загрузки Arduino не перезагружается, и подключиться к ней без перезагрузки компьютера невозможно., @Friend of Kim

перезагрузить комп?? просто отключить/переподключить USB не работает? вы закрываете последовательное соединение?, @Lesto

Виноват. Перезагрузка компьютера сработала только один раз. Теперь даже Arduino IDE не распознает его, используя родной порт. Он находит Due в порту программирования, но не может загрузить с него код. Да, я закрыл соединение., @Friend of Kim

это другой вопрос, я думаю. USB для разработчиков работает, а для пользователей нет? Как вы компилируете код? ПК обнаруживает usb?, @Lesto

ПК не обнаруживает USB при прямом подключении к SAM (собственный), но распознает при подключении к порту программирования. Все с использованием Arduino IDE, он не может загружать код через USB для программирования. Может ли быть что-то не так с Arduino Due? При подключении RESET к GND ничего не происходит., @Friend of Kim

давайте [продолжим это обсуждение в чате](http://chat.stackexchange.com/rooms/13936/discussion-between-lesto-and-friend-of-kim), @Lesto

Извините, но этот ответ в корне ошибочен. Открытие порта на скорости 1200 бод специально **не может ничего сделать** для истинного последовательного порта, как указано здесь. Это только «волшебство» с последовательным USB-устройством, где скорость передачи данных является параметром, передаваемым аппаратному обеспечению. Но во многих конфигурациях простое открытие последовательного порта (настоящего или USB) *изменит* состояние линий управления, которые могут быть подключены для запуска сброса., @Chris Stratton

@ChrisStratton мой ответ остается в силе, поскольку он открывает драйвер acm ttyACM0 с ведьмой IS (виртуальный последовательный порт через USB), и драйвер usb на должном уровне был специально написан для использования его в качестве запроса на перезагрузку. Странно, но факт: см. «программирование » на http://arduino.cc/en/Main/arduinoBoardDue., @Lesto

Я в курсе про спецкожух - но тут он не применяется. Ваш ответ ошибочен, поскольку ** в вашем ответе ** вы, как по описанию, так и по цитируемой команде, получаете доступ к настоящему последовательному порту /dev/ttyS0, а не к USB. То, что вы предлагаете, не будет работать для настоящего последовательного порта., @Chris Stratton

Я понимаю. Это потому, что этот вывод исходит от arduino ide, и поскольку у меня не было Due, я сказал ide использовать порт hw. Теперь я понимаю, что вы говорите, и я укажу на это, @Lesto

Ваше описание и пример команды по-прежнему ссылаются на аппаратный последовательный порт, где этот трюк не сработает., @Chris Stratton

Исправлено, я думаю. Не стесняйтесь редактировать, если вам это не нравится, @Lesto


3

Самый простой способ сделать это исключительно из терминала:

stty -f /dev/cu.usbmodemfa121 1200;stty stop /dev/cu.usbmodemfa121;./bossac -i -d --port=tty.usbmodemfa121 -U false -e -w -v -b Blink.cpp.bin -R

Замените последовательное устройство любым устройством /dev, которое вы используете; в Linux вам может понадобиться sudo, чтобы получить прямой доступ к устройству. Предполагается, что вы находитесь в каталоге, где живет боссак, и ваш файл .bin тоже находится там. Отрегулируйте в соответствии с вашими потребностями. Если вы используете собственный порт USB, вы должны изменить -U на true

,

1

В интерфейсе командной строки Arduino используется версия bossa, немного отличающаяся от той, что находится на мастере:

https://github.com/shumatech/BOSSA/tree/arduino

В Linux я смог сделать следующее:

$ git clone [email protected]:shumatech/BOSSA.git
$ cd BOSSA
$ make bin/bossac -j4
$ stty -F /dev/ttyACM0 1200
$ ./bin/bossac --port=/dev/ttyACM0 --force_usb_port=true -e -w -v -b /path/to/my/firmware.bin -R

(Я получил ответ из этой ветки форума Arduino.)

,