Як прошити 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, то зеленка просто не прошьется, а процесс прервется с ошибкой.

Далі необхідно внести невеликі зміни до одного заголовкового файлу ядра Ардуїно. Доведеться змінити розмір буфера 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

Коли живлення подається на Arduino, спочатку запускається завантажувач (bootloader), який деякий час очікує на отримання зовнішніх команд (для прошивки та інше). Якщо команди не надходять, то запускається основна вбудована програма. Коли Arduino працює в режимі програматора, їй немає часу "відволікатися" на запуск завантажувача; її мета - постійне виконання своєї програми, тобто завжди залишатися програматором і чекати прошивку для пацієнта. Під час прошивки спочатку надсилається сигнал скидання (низький рівень сигналу на 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.

Якщо необхідно зашити завантажувач, то при тих самих налаштуваннях просто натискаємо "Записать загрузчик".


Якщо бутлоадер успішно записався, то плата буде періодично двічі блимати світлодіодом.


No comments:

Post a Comment