Корзина
(нет товаров)
 
(495) 500-7890
На главную Программаторы Панельки Загрузка ПО Магазин Поддержка Поиск панельки Карта сайта

В микросхеме USB драйвера FT232H имеется командный процессор, называемый Multi-Protocol Synchronous Serial Engine (MPSSE). Эта возможность позволяет эффективно взаимодействовать с микросхемами, использующими синхронные протоколы (такие как JTAG или SPI). Данный режим широко используется во многих программаторах. Его можно использовать и на программаторах Тритон V5.8TU. Более того, реализовать свой алгоритм работы может любой пользователь программатора, знакомый с программированием.

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

Рассмотрим, как это реализовано в программаторе на примере SPI Flash GD25LQ64C. Программируемая микросхема через преобразователи уровней подключается к матрице, которая коммутирует управляющие сигналы на внутреннюю шину программатора. К этой шине подключен процессор программатора и микросхема USB драйвера. В начале каждого цикла работы с микросхемой, процессор программатора конфигурирует матрицу, и затем отключается, передавая управление USB драйверу. Программа на компьютере, получив команду об отключении процессора, вызывает нужную функцию из внешней библиотеки, которая напрямую посылает данные через микросхему USB на программируемую микросхему.

Для работы используется стандартный конфиг, поэтому подключить можно любую микросхему. Чтобы передать управление внешней программе нужно в Параметрах микросхемы изменить следующие ячейки:

  1. В ячейке $12 - Алгоритм программирования, установить равным 1F.
  2. В ячейке $3D установить режим MPSSE = 60.
  3. В ячейке $7C ввести адрес сигнала CS (такой же как в ячейке $2C).
  4. В ячейке $BB отключить буферизацию при передаче данных = 01.
  5. В Редакторе Алгоритмов открыть и скомпилировать файл eSPI.asm или написать свой.
  6. В файле *.CFG подключить нужную библиотеку *.DLL (RLL = eSPI.dll).

Таким образом, внешняя программа может управлять микросхемой в панельке программатора.

 

В папке \Program Files\Triton\Scripts находятся файлы eSPI.asm - пример скрипта и eSPI.dpr - пример исходного кода библиотеки на Паскале.

Пример скрипта для вызова функции из внешней библиотеки:

;======================================
READ:   BGS           ;Включить питание
        PWX $10,$19   ;Set CS
        EXT $41       ;Check ID
        JLA L02       ;=1 - Ошибка
L01:    EXT $44       ;Чтение
        JNA L01       ;Проверка адреса
L02:    END           ;Выход
;======================================
PROG:   BGS           ;Включить питание
        PWX $10,$19   ;Set CS
        EXT $41       ;Check ID
        JLA L12       ;=1 - Ошибка
L11:    EXT $44       ;Запись
        JNA L11       ;Проверка адреса
L12:    END           ;Выход
;======================================
ERAS:   BGS           ;Включить питание
        PWX $10,$19   ;Set CS
        EXT $40       ;Стирание
        END           ;Выход
;======================================
LOCK:   BGS           ;Включить питание
        PWX $10,$19   ;Set CS
        EXT $47       ;Установка защиты
        END           ;Выход
;======================================

PWX $10,$19. При сбросе MPSSE, микросхема FT232H на всех выводах устанавливает единицы. Чтобы избежать перепадов уровней, перед вызовом EXT $XX необходимо установить в регистре USB_WRF (=$19) неактивное состояние сигналов. Такое же состояние сигналов устанавливается при инициализации MPSSE. Когда MPSSE переходит в режим RUN, программатор подключает выводы микросхемы FT232H к выводам микросхемы без случайных выбросов или провалов.

EXT $XX. Используется для вызова функции из внешней библиотеки. В зависимости от режима работы (READ или PROG) вызывается соответствующая функция.

EXT $40 FT_MPSSE_Eraseиспользуется в режиме ERAS для стирания всей микросхемы
EXT $41 FT_MPSSE_PreRead1 или FT_MPSSE_PreProg1 может использоваться для чтения и проверки ID
EXT $42 FT_MPSSE_PreRead2 или FT_MPSSE_PreProg2 используется для загрузки или выполнения команд перед чтением или записью.
EXT $43 FT_MPSSE_PreRead3 или FT_MPSSE_PreProg3 используется для загрузки или выполнения команд перед чтением или записью.
EXT $44 FT_MPSSE_ReadPrgm или FT_MPSSE_ProgPrgm чтение или запись основной памяти микросхемы.
EXT $45 FT_MPSSE_ReadData или FT_MPSSE_ProgData чтение или запись дополнительной памяти микросхемы.
EXT $46 FT_MPSSE_ReadUser или FT_MPSSE_ProgUser чтение или запись дополнительной памяти микросхемы.
EXT $47 FT_MPSSE_ReadLock или FT_MPSSE_ProgLock чтение или запись битов защиты.

Полный список функций, которые программа может вызывать из внешней библиотеки:

  EFT_MPSSE_Erase function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_PreRead1 function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_PreRead2 function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_PreRead3 function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_ReadPrgm function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_ReadData function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_ReadUser function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_ReadLock function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_PreProg1 function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_PreProg2 function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_PreProg3 function(hPort: THandle; Param: pointer): Integer; stdcall;
  EFT_MPSSE_ProgPrgm function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_ProgData function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_ProgUser function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_ProgLock function(hPort: THandle; Param, Bufer: pointer; Adres: int64; Count: Integer): Integer; stdcall;
  EFT_MPSSE_Finis function(hPort: THandle): Integer; stdcall;

  - hPort - handle открытого порта. USB порт открывает, настраивает и закрывает только оболочка программатора.
  - Param - указатель на копию блока параметров микросхемы.
  - Bufer - указатель на буфер с данными. При первом вызове указывает на физическое начало данных в памяти компьютера. При последующих вызовах сдвигается на Count байт.
  - Adres - текущий адрес в микросхеме.
  - Count - число байт в буфере. Программа подгружает данные блоками не более 64кБ.

   EFT_MPSSE_Finis не имеет прямого вызова из скрипта, а вызывается автоматически программой, когда заканчиваются данные в буфере.

   Result = $00 - Ok.
   Result = $FF - Повтор команды.
   Result = 30 - Загрузка программы успешно завершена (пропуск цикла верификации)
   Result > 0 - Ошибка: 020..029, 035..045 (Decimal).
   Ошибки 020..029 - определены в файле L_*.lng
   Ошибки 035..045 - можно самому задать в файле *.cfg (R35..R45)
   Число ошибок можно указать в ячейках Param[$24..$27] (Little endian)

ООО «ТЦ ТРИТОН»   (495) 500-7890