Сигналы управления Bluetooth (DTR, DSR, RTS, CTS) на Android

Я хотел бы удаленно перепрограммировать свой Arduino через Android через Bluetooth SPP. Первым шагом является сброс микроконтроллера ATMEGA. Это достигается на Arduino путем переключения линии DTR. Есть ли какой-либо API для управления линиями управления Bluetooth SPP из среды Android?


person Troy Collinsworth    schedule 22.11.2010    source источник


Ответы (2)


Также SPP в целом поддерживает отправку или получение управляющих сигналов (DTR, DSR, RTS, CTS). Я не знаю никаких API или библиотек для Android, но поскольку вы просто хотите сбросить настройки контроллера...

Если это нормально для изменения прошивки вы также можете создать свою собственную команду сброса, которая может быть получена на ваш UART (через SPP).

Если вы получите эту команду, вы можете вызвать что-то вроде

asm("jmp 0x3800");

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

Или включите сторожевой таймер и позвоните

while(1);

Это также автоматически изменит вектор прерывания на вектор прерывания загрузчика и сбросит все SFR. - Но это немного медленнее, и вектор прерывания загрузчика должен быть выбран в Fuse Bits.

person Noctis    schedule 09.04.2014
comment
Такой подход может работать, но страдает от проблемы, заключающейся в том, что если скетч не может его реализовать или происходит сбой, который нарушает эту реализацию (без запуска сброса сторожевого таймера), то через этот интерфейс может не быть возможности войти в загрузчик. чтобы исправить это. - person Chris Stratton; 09.04.2014

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

Новый загрузчик Arduino (optiboot) занимает 512 байт (по сравнению с 2 КБ старого), поэтому у вас есть дополнительное место для ваших проектов; имеет интеллектуальное обнаружение загрузки, поэтому входит в загрузчик только при нажатии кнопки сброса; и вы можете увеличить время ожидания, изменив значение времени ожидания сторожевого таймера в исходном коде (около строки 267 в optiboot.c).

// Set up watchdog to trigger after 500ms (changed to 2s!)
watchdogConfig(WATCHDOG_2S);
person Peter Gibson    schedule 08.12.2010
comment
Интересно... Можно ли настроить мою программу так, чтобы она распознавала специальную команду и вручную входила в загрузчик? Например, после того, как время ожидания загрузчика истекло и запустилась пользовательская программа, можно ли повторно войти в загрузчик? Я предполагаю, что, безусловно, можно вручную запустить сброс через выходной контакт, подключенный к сбросу, что приведет к желаемому эффекту. - person Troy Collinsworth; 08.12.2010
comment
Должно работать, но вам придется включать этот код сброса во все ваши скетчи. Вывод RESET имеет активный низкий уровень, поэтому я бы просто оставил этот вывод сконфигурированным как вход, а затем вывел 0 для сброса. - person Peter Gibson; 08.12.2010