Я пытаюсь получить доступ к загрузчику для "ведомой" платы Nucleo L476RG.
«Мастер» - это плата Nucleo L496ZG. В моей программе на главной плате определено DigitalOut
, которое называется extBoot0
, extReset
. Они выходят на контакты boot0
и NRST
на ведомой плате. Кроме того, у меня есть экземпляр Serial
с именем usart
на главном устройстве, который подключен к UART2 на ведомой плате. Кроме того, кажется, что там BOOT1 предустановлен для запуска загрузчика, то есть он имеет низкий уровень и не может быть изменен для запуска чего-либо в SRAM.
В настоящее время, в resetToBootloader
, я устанавливаю BOOT0 высоким и понижаю NRST на 0,1 секунды, а затем возвращаю его на высокий уровень. Я заметил, что запуск этой функции действительно сбрасывает устройство и препятствует запуску программы.
В initBootloader
я форматирую серийный номер для AN2606: 8-битный, четный, 1 стоповый бит. Затем я посылаю 0x7F через эту последовательную шину на ведомую плату. Я не получаю никакого ответа и использую логический анализатор, я подтвердил, что ведомое устройство получает его на правильном выводе, и нет никаких изменений на входе передачи ведомого устройства. Что еще нужно сделать, чтобы запустить загрузчик?
Вот мой соответствующий код:
DigitalOut extBoot0(D7);
DigitalOut extBoot1(D6);
DigitalOut extReset(D5);
Serial usart(/* tx, rx */ D1, D0);
uint8_t rxBuffer[1];
event_callback_t serialEventCb;
void serialCb(int events) {
printf("something happened!\n");
}
void initBootloader() {
wait(5); // just in case?
// Once initialized the USART1 configuration is: 8-bits, even parity and 1 Stop bit
serialEventCb.attach(serialCb);
usart.format(8, SerialBase::Even, 1);
uint8_t buffer[1024];
// write 0x7F
buffer[0] = 0x7F;
usart.write(buffer, 1, 0, 0);
printf("sending cmd\n");
// should ack 0x79
usart.read(rxBuffer, 1, serialEventCb, SERIAL_EVENT_RX_ALL, 0x79);
}
Если это вообще поможет, вот изображение моей настройки платы .