Я хотел бы удаленно перепрограммировать свой Arduino через Android через Bluetooth SPP. Первым шагом является сброс микроконтроллера ATMEGA. Это достигается на Arduino путем переключения линии DTR. Есть ли какой-либо API для управления линиями управления Bluetooth SPP из среды Android?
Сигналы управления Bluetooth (DTR, DSR, RTS, CTS) на Android
Ответы (2)
Также SPP в целом поддерживает отправку или получение управляющих сигналов (DTR, DSR, RTS, CTS). Я не знаю никаких API или библиотек для Android, но поскольку вы просто хотите сбросить настройки контроллера...
Если это нормально для изменения прошивки вы также можете создать свою собственную команду сброса, которая может быть получена на ваш UART (через SPP).
Если вы получите эту команду, вы можете вызвать что-то вроде
asm("jmp 0x3800");
где вам нужно изменить адрес jmp
, чтобы он указывал на ваш загрузчик. Вы также можете изменить свой вектор прерывания, чтобы он указывал на ваш загрузчик.
Или включите сторожевой таймер и позвоните
while(1);
Это также автоматически изменит вектор прерывания на вектор прерывания загрузчика и сбросит все SFR. - Но это немного медленнее, и вектор прерывания загрузчика должен быть выбран в Fuse Bits.
Я понимаю, что это не то, что вы хотели, но всегда можно было прошить новый загрузчик с более длительным таймаутом и вручную нажать кнопку сброса перед началом программирования.
Новый загрузчик Arduino (optiboot) занимает 512 байт (по сравнению с 2 КБ старого), поэтому у вас есть дополнительное место для ваших проектов; имеет интеллектуальное обнаружение загрузки, поэтому входит в загрузчик только при нажатии кнопки сброса; и вы можете увеличить время ожидания, изменив значение времени ожидания сторожевого таймера в исходном коде (около строки 267 в optiboot.c).
// Set up watchdog to trigger after 500ms (changed to 2s!)
watchdogConfig(WATCHDOG_2S);