Open USB Programmer project for PIC MCU based on Arduino (ATMEGA328)
Программатор для микроконтроллеров PIC, основанный на atmega328 (arduino nano/uno) с минимальной внешней обвязкой.
Есть возможность добавления новых моделей самостоятельно, для этого необходимо редактировать файл "pic.xml". Он состоит из однотипных структур типа:
<name model="PIC16F1938">
<id>0x23A0</id>
<type>7</type>
<f_size>32768</f_size>
<f_psize>1</f_psize>
<ee_size>256</ee_size>
<f_start>0</f_start>
<ee_start>00F000</ee_start>
<ee_type>2</ee_type>
<conf1>008007</conf1>
<conf2>008008</conf2>
<conf3>none</conf3>
<conf4>none</conf4>
<conf5>none</conf5>
<conf6>none</conf6>
<conf7>none</conf7>
<oscal1>008009</oscal1>
<oscal2>00800A</oscal2>
<oscal3>none</oscal3>
<delay>3</delay>
<word>3FFF</word>
</name>
Для добавления нового чипа - копируем одну структуру от "name" до "/name" и исправляем значения тегов. Где:
id - devid + revid
type - семейство однотипно программируемых моделей pic, номера взяты абсолютно произвольно, просто находим по даташиту похожую по алгоритму программирования модель из уже поддерживаемых
f_size - размер code сегмента в байтах!
f_psize - размер страницы флеша
ee_size - размер eeprom в байтах
f_start - адрес начала code сегмента (обычно всегда равно нулю)
ee_start - адрес начала data (eeprom) сегмента памяти
ee_type - тип расположения данных eeprom в hex файле (1 - подряд, 2 - через пустой байт)
conf1-conf7 - адреса смещения данных conf битов в hex файле (несуществующие conf должны иметь значение "none")
oscal1-oscal3 - адреса смещения байтов калибровки генератора, аналогично conf
delay - задержка программирования слова/страницы
word - маска слова флеш памяти: 16 бит - FFFF, 14 бит - 3FFF и так далее.
Обратная связь приветствуется. Если у Вас есть модели pic, не поддерживаемые на данный момент, пишите мне: [email protected]. Буду пробовать добавлять, а Вы - тестировать.
На данный момент поддерживаются следующие модели PIC:
-PIC12: PIC12F1840,PIC12F629/675,PIC12F635,PIC12F683
-PIC16: PIC16F1512,PIC16F1513,PIC16F1516,PIC16F1517,PIC16F1518,PIC16F1519,PIC16F1526, PIC16F1527,PIC16F1847,PIC16F1933,PIC16F1934,PIC16F1936,PIC16F1937,PIC16F1938,PIC16F1939, PIC16F1946,PIC16F1947,PIC16F627A,PIC16F628A,PIC16F648A,PIC16F676/630,PIC16F631, PIC16F636,PIC16F639,PIC16F677,PIC16F684,PIC16F685,PIC16F687,PIC16F688,PIC16F689, PIC16F690,PIC16F73,PIC16F74,PIC16F76,PIC16F77,PIC16F84A
-PIC18: PIC18F2510,PIC18F2525,PIC18F2550,PIC18F2585,PIC18F25K80,PIC18F2610,PIC18F2620, PIC18F2680,PIC18F26K80,PIC18F4515,PIC18F4525,PIC18F4550,PIC18F45K80,PIC18F4585,PIC18F4610, PIC18F4620,PIC18F4680,PIC18F46K80
Тестирую обычно 1-2 модели PIC из линейки однотипно программируемых, остальные просто добавляю. Так что могут быть ошибки непротестированных моделей. Надо пробовать.
Изменён алгоритм записи со стороны хоста, теперь не нужно предварительно стирать чип перед записью. Добавлены некоторые оптимизации. Добавлена новые модели PIC: PIC10: PIC10F200, PIC10F202, PIC10F204, PIC10F206 PIC12: PIC12F510 PIC16F: PIC16F505, PIC16F506, PIC16F54, PIC16F57, PIC16F59
Исправлен крупный баг софта при чтении микроконтроллеров с объёмом FLASH 16KW и более. Добавлена и протестирована поддержка новых линеек PIC: PIC16F183xx Добавлены новые модели без тестирования: PIC10F32x, PIC16F150x, PIC16F88x
На этот раз были добавлены семейства: PIC16F170X, PIC16F18XX, PIC16F183XX, PIC16F184XX, PIC18FXXK22, PIC18FXXQ10 (у последней серии некоррекно читается или записывается EEPROM, проверить мне не чем).
Переписал софт на Qt. Теперь программа стала кроссплатформенной. Работа проверена на Windows x64, Linux Fedora 39 x64, Ubuntu 22.04 aarch64, FreeBSD 14.1 x64. Внешний вид программы и функционал остались прежними.
Список поддерживаемых моделей расположен всё в том же файле "pic.xml". Для обеих версий программы файлы идентичны. Для работы на Linux потребуется установить QSetialPort (libqt6-serialport-dev) и qt6-base-dev, возможно ещё какие-либо пакеты. Проверить можно при запуске из терминала. Если не появится или не будет доступа к /dev/ttyUSB0, то необходимо его предоставить: "sudo chmod a+rw /dev/ttyUSB0". На Ubuntu могут конфликтовать драйверы ch340 и brltty, поэтому последний можно удалить "sudo apt autoremove brltty". Qt версия для Windows скомпилирована со статическими библиотеками, должна работать "из коробки".
В С# и Qt версии программы добавлена функция сохранения ранее выбранной модели PIC. Теперь после закрытия или аварийной остановки программы нет необходимости выбирать модель снова из длинного списка.
Добавил поддержку PIC16F871/872/873/874/876/877 без проверки работоспособности. Тестируйте.
Добавил поддержку PIC16F873A/874A/876A/877A без проверки работоспособности. Теперь, чтобы не обновлять архивы с разными версиями программ, свежие файлы "pic.xml" буду выкладывать в папку software/new_devices. Достаточно просто скопировать этот файл в папку с программой (саму программу в ближайшее врямя менять не планирую).
Выложил в общий доступ исходники для атмеги крайней версии, так как не планирую в ближайшее время что-либо менять в них.
Добавил поддержку PIC16F627/628(без А). Протестировано пользователем под ником sollaris. Ему отдельное спасибо.
Внёс небольшие доработки в схему, изменения в прошивку. Добавил диод от вывода A4 (PC4) arduino к сигналу VPP (см. схему в папке hardware, диод любой, например 4148, но лучше шоттки). Теперь после программирования на выводе VPP программатора появляется логическая единица, а на вывод VDD программатора подаётся питание. Таким образом сигналы программатора не мешают запуску прошиваемого микроконтроллера. Платы без доработки также будут работать с новой прошивкой. Рисунок печатной платы обновлён.
Ради интереса переписал проект для STM32F030 (см. папку "firmware"). Подключение сигналов смотрите в файле "gpio.h". Для проверки использовал свою платку формата arduino nano с stm32f030k6t6 на борту (см. фото в папке "hardware"). Работает также как и с атмегой. Правда, места прошивка в STM-ке занимает намного больше (чуть болше 25 Кб), возможно, потому что проект написан с использованием SPL.