Как прошить LGT8F328P-SSOP20 через Arduino

Прошить LGT8F328P-SSOP20 как обычную Arduino Pro Mini через интерфейс SPI (MOSI, MISO, SCK, SS) сходу нельзя, но можно прошить по интерфейсу Serial Wire Debug (SWD: SWD, SWC).

Инструкция создана на основе вот этого документа на английском языке:
https://github.com/rickygai/arduino/blob/main/LGT8F328P.pdf

Превращать Ардуину в программатор будем с помощью специально написанного скетча для плат LGT  LarduinoISP.

Конечно же, предварительно должно быть установлено ядро для работы с этими МК. Читаем, устанавливаем:
https://github.com/dbuezas/lgt8fx

Итак, начнем

Видео по теме:

Версия Arduino IDE: 1.8.13

Подготовка Arduino

Подключаем Ардуину к компьютеру.

Открываем "Файл > Примеры > LarduinoISP > LarduinoISP".

Если в Примерах нет пункта LarduinoISP, то указываем в Инструментах > Плата: LGT8F328P




Настраиваем "Инструменты" как обычно для вашей Ардуины.

Далее необходимо внести небольшие изменения в один заголовочный файл ядра Ардуино. Придется изменить размер буфера SERIAL RX, это делается временно - только для прошивки скетча программатора в Ардуино, потом нужно будет вернуть как было. Данный параметр играет ключевую роль в процессе прошивки зеленки ардуиной, если его не выставить в 250, то зеленка просто не прошьется, а процесс прервется с ошибкой.

Файл, который нам нужен находится в папке с ядром Ардуино, например:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\

Открываем в любом текстовом редакторе файл HardwareSerial.h

Находим блок:

#if !defined(SERIAL_RX_BUFFER_SIZE)
#if ((RAMEND - RAMSTART) < 1023)
#define SERIAL_RX_BUFFER_SIZE 16
#else
#define SERIAL_RX_BUFFER_SIZE 64
#endif
#endif

И меняем значение на 250:

//#define SERIAL_RX_BUFFER_SIZE 64 // Default
#define SERIAL_RX_BUFFER_SIZE 250 // for programming LGT8F

Можно и так:

#define SERIAL_RX_BUFFER_SIZE 250 // for programming LGT8F. Comment after upload LarduinoISP is done
#if !defined(SERIAL_RX_BUFFER_SIZE)
#if ((RAMEND - RAMSTART) < 1023)
#define SERIAL_RX_BUFFER_SIZE 16
#else
#define SERIAL_RX_BUFFER_SIZE 64
#endif
#endif

Возвращаемся к Arduino IDE

Прошиваем LarduinoISP в Ардуину

Если в процессе компиляции возникла ошибка:

"Please change the macro SERIAL_RX_BUFFER_SIZE to 250"

Значит вы что-то сделали не так на предыдущем шаге.

Размер буфера serial RX устанавливается гораздо проще при использовании другой LGT8F в качестве программатора - прямо через меню. Но чтобы добавить такую опцию для Ардуины - нужно вносить гораздо больше изменений в файлы ядра, да и при любом обновлении они могут затереться, так что проще это сделать через HardwareSerial.h.

После успешной прошивки скетча LarduinoISP в Ардуино, возвращаем значение размера буффера serial RX как было.

Отключаем Ардуину от компьютера

Соединение Arduino и LGT8F328P

Небольшое отступление.
Когда на Ардуину подается питание, сначала запускается загрузчик (буттоадер/bootloader), который некоторое время ждет поступления внешних команд (на прошивку и пр.). Если команды не поступают, то запускается основная прошитая ранее программа. Когда Ардуина работает в режиме программатора, ей некогда "отвлекаться" на запуск загрузчика, ее цель - постоянное выполнение своей программы, т.е. все время оставаться программатором и ждать прошивку для пациента. В процессе прошивки в начале отправляется сигнал сброса на Ардуину (низкий уровень сигнала на RST), который игнорируется за счет конденсатора, удерживающего на RST высокий уровень. Именно поэтому иногда встречается рекомендация подключить RST к VCC через подтягивающий резистор, что в данном случае выполняет ту же функцию.

Подключаем конденсатор на 10 мкФ к плате Ардуино между RST и GND, чтобы плата-программатор не перезагружалась в процессе прошивки пациента и не возникало ошибок "not in sync".

Подключаем пациента к ардуине по следующей схеме:

LGT8F -> Ардуино
GND   -> GND
VCC   -> +5V
SWD   -> 12
RST   -> 10
SWC   -> 13

Прошивка LGT8F328P

Подключаем Ардуину к компьютеру.

Отрываем в Arduino IDE скетч, который необходимо прошить в зеленку.

Настраиваем "Инструменты":

  • Плата: "LGT8F328"
  • Variant: "328P-SSOP20 (e.g. green pseudo pro mini)"
  • Arduino as ISP: любое (этот параметр используется только при прошивке другой зеленкой в качестве программатора или USB-UART)
  • Программатор: "AVR ISP"



Прошиваем: "Скетч > Загрузить через программатор"

Готово! Вы восхитительны!

P.S.

Если необходимо зашить загрузчик, то при тех же настройках просто нажимаем "Записать загрузчик".


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


Комментариев нет:

Отправить комментарий

Normal distribution probability

  Objective Having a normal distribution with a mean (μ) and a standard deviation (σ). What is the probability that a random value will be...