Skip to content

AndrejChoo/USB-PIC-Programmer-on-Arduino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

USB_PIC_Programmer_on_Arduino

Open USB Programmer project for PIC MCU based on Arduino (ATMEGA328)

Программатор для микроконтроллеров PIC, основанный на atmega328 (arduino nano/uno) с минимальной внешней обвязкой.

screenshot

Есть возможность добавления новых моделей самостоятельно, для этого необходимо редактировать файл "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]. Буду пробовать добавлять, а Вы - тестировать.

06.02.2023

На данный момент поддерживаются следующие модели 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 из линейки однотипно программируемых, остальные просто добавляю. Так что могут быть ошибки непротестированных моделей. Надо пробовать.

10.02.2023

Изменён алгоритм записи со стороны хоста, теперь не нужно предварительно стирать чип перед записью. Добавлены некоторые оптимизации. Добавлена новые модели PIC: PIC10: PIC10F200, PIC10F202, PIC10F204, PIC10F206 PIC12: PIC12F510 PIC16F: PIC16F505, PIC16F506, PIC16F54, PIC16F57, PIC16F59

17.02.2023

Исправлен крупный баг софта при чтении микроконтроллеров с объёмом FLASH 16KW и более. Добавлена и протестирована поддержка новых линеек PIC: PIC16F183xx Добавлены новые модели без тестирования: PIC10F32x, PIC16F150x, PIC16F88x

29.03.2023

На этот раз были добавлены семейства: PIC16F170X, PIC16F18XX, PIC16F183XX, PIC16F184XX, PIC18FXXK22, PIC18FXXQ10 (у последней серии некоррекно читается или записывается EEPROM, проверить мне не чем).

23.02.2024

Переписал софт на Qt. Теперь программа стала кроссплатформенной. Работа проверена на Windows x64, Linux Fedora 39 x64, Ubuntu 22.04 aarch64, FreeBSD 14.1 x64. Внешний вид программы и функционал остались прежними.

screenshot1

Список поддерживаемых моделей расположен всё в том же файле "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 скомпилирована со статическими библиотеками, должна работать "из коробки".

7.03.2024

В С# и Qt версии программы добавлена функция сохранения ранее выбранной модели PIC. Теперь после закрытия или аварийной остановки программы нет необходимости выбирать модель снова из длинного списка.

12.03.2024

Добавил поддержку PIC16F871/872/873/874/876/877 без проверки работоспособности. Тестируйте.

14.03.2024

Добавил поддержку PIC16F873A/874A/876A/877A без проверки работоспособности. Теперь, чтобы не обновлять архивы с разными версиями программ, свежие файлы "pic.xml" буду выкладывать в папку software/new_devices. Достаточно просто скопировать этот файл в папку с программой (саму программу в ближайшее врямя менять не планирую).

15.03.2024

Выложил в общий доступ исходники для атмеги крайней версии, так как не планирую в ближайшее время что-либо менять в них.

19.03.2024

Добавил поддержку PIC16F627/628(без А). Протестировано пользователем под ником sollaris. Ему отдельное спасибо.

25.03.2024

Внёс небольшие доработки в схему, изменения в прошивку. Добавил диод от вывода A4 (PC4) arduino к сигналу VPP (см. схему в папке hardware, диод любой, например 4148, но лучше шоттки). Теперь после программирования на выводе VPP программатора появляется логическая единица, а на вывод VDD программатора подаётся питание. Таким образом сигналы программатора не мешают запуску прошиваемого микроконтроллера. Платы без доработки также будут работать с новой прошивкой. Рисунок печатной платы обновлён.

4.04.2024

Ради интереса переписал проект для STM32F030 (см. папку "firmware"). Подключение сигналов смотрите в файле "gpio.h". Для проверки использовал свою платку формата arduino nano с stm32f030k6t6 на борту (см. фото в папке "hardware"). Работает также как и с атмегой. Правда, места прошивка в STM-ке занимает намного больше (чуть болше 25 Кб), возможно, потому что проект написан с использованием SPL.