Введение

 Top Next

В этой главе содержатся общие сведения об Интерфейсе Управления Приложением, разработанном фирмой Фитон.


Что такое Интерфейс Управления Приложением

 Top Previous Next

Интерфейс Управления Приложением (Application Control Interface), далее - ACI, это средства, предоставляемые программаторами фирмы Фитон для управления аппаратурой программаторов из других приложений. ACI предназначен для разработчиков, которым нужно использовать программатор фирмы Фитон, управляя им не с помощью предоставляемой фирмой Фитон оболочки, а с помощью собственных средств.

Разработчику предоставляется DLL с именем ACI.DLL и заголовочный файл aciprog.h на языке C/C++, который содержит объявления функций, которые экспортирует ACI.DLL, а также объявления необходимых структур и констант. Предполагается, что перед включением в исходный текст файла aciprog.h будет включен файл windows.h. Для работы ACI нужна операционная система не хуже Windows 98.


Реализация

Чтобы управлять аппаратурой программатора, управляющее приложение вызывает соответствующие функции из ACI.DLL. Для работы ACI требуется, чтобы на компьютере был установлен полный пакет программного обеспечения программатора, который можно взять здесь: http://www.phyton.ru/download/.

ACI.DLL запускает оболочку программатора (UProgNT2.exe или UProgNT.exe) с помощью функции ACI_Launch() и управляет ей. Окно оболочки может быть по желанию разработчика как скрытым, так и видимым, что можно использовать в отладочных целях. Управляющее приложение может частично использовать графический интерфейс оболочки программатора, отображая, например, диалоги настроек, выбора микросхемы, загрузки файла и другие.

Все функции ACI возвращают целое число - код возврата. Константы для кодов возврата ACI_ERR_* определены в файле aciprog.h, который входит в комплект поставки ACI.

Функции ACI могут либо получать один параметр - указатель на структуру, либо не получать никаких параметров. Каждая структура-параметр в качестве первого члена имеет размер этой структуры, благодаря чему обеспечивается совместимость между разными версиями ACI.DLL. Исключение составляет функция ACI_IDECommand(), которая нарушает единообразие, но ей пришлось пожертвовать для упрощения объявлений псевдо-функций. Структуры, указатели на которые функции ACI получают в качестве параметров, также объявлены в aciprog.h.

Все объекты ACI имеют имена, структурированные определенным образом. Имена всех объектов ACI начинаются с префикса ACI_. Имена шаблонов структур, указатели на которые передаются функциям в качестве параметров, заканчиваются постфиксом _Params.

Во всех структурах номера буферов и подслоев начинаются с 0. Все адреса имеют размер 64 бита и представлены младшей и старшей частью размером 32 бита, поскольку определение данных размером 64 бита зависит от компилятора. Если, например, компилятор "понимает" тип uint64, то для присвоения 64-битного адреса буфера в структуре ACI_Memory_Params можно написать:

ACI_Memory_Params mparams;

*((uint64 *)&mparams.AddressLow) = 0x123456789ABC;

Буфер номер 0 распределяется программатором автоматически и всегда существует. Создавать его явно не нужно.

Все адреса указываются как адреса, естественные для микросхемы. Если память микросхемы представляется 16-битными словами, то адрес будет адресом слова, а не адресом байта.


Контактная информация

web: http://www.phyton.ru/

Техническая поддержка: vkrasnov@phyton.ru. Предложения по доработке ACI и сообщения об ошибках принимаются!


Документация ACI

В этой главе содержится детальное описание функций и структур ACI.


Функции ACI

В этой главе содержится детальное описание функций ACI.

Название функции | Краткое описание
ACI_Launch | Запуск оболочки программатора. Эта функция должна вызываться самой первой.
ACI_Exit | Завершение работы оболочки программатора. Эта функция должна вызываться последней.
ACI_LoadConfigFile | Загрузить параметры конфигурации программатора.
ACI_SaveConfigFile | Сохранить параметры конфигурации программатора.
ACI_SetDevice | Выбрать для работы указанную микросхему.
ACI_GetDevice | Получить название используемой в данный момент для работы микросхемы и ее производителя.
ACI_GetLayer | Получить параметры указанного буфера и подслоя.
ACI_CreateBuffer | Создать буфер.
ACI_ReallocBuffer | Изменить размер нулевого подслоя буфера.
ACI_ReadLayer | Прочитать данные из буфера.
ACI_WriteLayer | Записать данные в буфер.
ACI_FillLayer | Заполнить весь подслой указанного буфера значением.
ACI_GetProgrammingParams | Получить параметры программирования.
ACI_SetProgrammingParams | Установить параметры программирования.
ACI_GetProgOption | Получить текущее значение опции или алгоритма программирования.
ACI_SetProgOption | Установить значение опции или алгоритма программирования.
ACI_AllProgOptionsDefault | Установить значения всех опций и алгоритмов программирования в значения по умолчанию.
ACI_ExecFunction | Выполнить указанную функцию программирования.
ACI_StartFunction | Запустить указанную функцию программирования.
ACI_GetStatus | Получить информацию о состоянии программатора.
ACI_TerminateFunction | Прервать выполнение функции программирования.
ACI_FileLoad | Загрузить файл в подслой буфера.
ACI_FileSave | Сохранить файл из подслоя буфера.
ACI_SettingsDialog | Отобразить диалог настроек оболочки.
ACI_SelectDeviceDialog | Отобразить диалог выбора микросхемы.
ACI_BuffersDialog | Отобразить диалог настройки буферов.
ACI_LoadFileDialog | Отобразить диалог загрузки файла в буфер.
ACI_SaveFileDialog | Отобразить диалог сохранения файла из буфера.


ACI_Launch

ACI_FUNC ACI_Launch(ACI_Launch_Params * params);

Описание

Запускает оболочку программатора, может передавать ей параметры командной строки, а также загружать файл конфигурации программатора.

Эта функция должна вызываться первой в ACI-сеансе.


ACI_Exit

ACI_FUNC ACI_Exit();

Описание

Завершить работу исполняемого файла программатора. Делается попытка корректно завершить работу оболочки программатора, что удается не всегда или не сразу. В конечном итоге оболочка программатора сама завершит работу, когда обнаружит отсутствие процесса, который ее запустил (процесса, частью которого является ACI.DLL).

Существует вероятность, что оболочка программатора все же не завершит работу при завершении управляющего процесса. Индикатором этого может быть неудачная попытка установить связзь с аппаратурой программатора при последующем запуске оболочки. В этом случае нужно вручную завершить работу оболочки с помощью диспетчера задач Windows.


ACI_LoadConfigFile

ACI_FUNC ACI_LoadConfigFile(ACI_Config_Params * params);

Описание

Загрузить параметры конфигурации программатора. Загружаются настройки, которые можно определить в оболочке в диалоге "Настройки", опции закладки "Опции" окна "Программирование" (тест присутствия микросхемы в колодке, ...) и конфигурация буферов.

Адреса программирования (начальный/конечный в микросхеме, начальный в буфере), параметры микросхемы и алгоритмов программирования, а также список функций автоматического программирования сохраняются и восстанавливаются автоматически при смене типа микросхемы.

См. также: ACI_SetProgrammingParams, ACI_SetProgOption, ACI_GetProgrammingParams, ACI_GetProgOption, ACI_SaveConfigFile


ACI_SaveConfigFile

ACI_FUNC ACI_SaveConfigFile(ACI_Config_Params * params);

Описание

Сохранить параметры конфигурации программатора. Сохраняются настройки, которые можно определить в оболочке в диалоге "Настройки", опции закладки "Опции" окна "Программирование" (тест присутствия микросхемы в колодке, ...) и конфигурация буферов.

Адреса программирования (начальный/конечный в микросхеме, начальный в буфере), параметры микросхемы и алгоритмов программирования, а также список функций автоматического программирования сохраняются и восстанавливаются автоматически при смене типа микросхемы.

См. также: ACI_SetProgrammingParams, ACI_SetProgOption, ACI_GetProgrammingParams, ACI_GetProgOption, ACI_LoadConfigFile


ACI_SetDevice

ACI_FUNC ACI_SetDevice(ACI_Device_Params * params);

Описание

Выбрать для работы указанную микросхему. При выборе микросхемы загружаются адреса программирования (начальный/конечный в микросхеме, начальный в буфере), параметры микросхемы и алгоритмов программирования, а также список функций автоматического программирования, если микросхема уже использовалась ранее и указанные параметры были изменены.


ACI_GetDevice

ACI_FUNC ACI_GetDevice(ACI_Device_Params * params);

Описание

Получить название используемой в данный момент для работы микросхемы и ее производителя.


ACI_GetLayer

ACI_FUNC ACI_GetLayer(ACI_Layer_Params * params);

Описание

Получить параметры указанного буфера и подслоя. См. описание структуры ACI_Layer_Params.


ACI_CreateBuffer

ACI_FUNC ACI_CreateBuffer(ACI_Buffer_Params * params);

Описание

Создать буфер с указанными параметрами. См. описание структуры ACI_Buffer_Params.

Буфер номер 0 распределяется программатором автоматически и всегда существует. Создавать его явно не нужно.


ACI_ReallocBuffer

ACI_FUNC ACI_ReallocBuffer(ACI_Buffer_Params * params);

Описание

Изменить размер нулевого подслоя буфера с указанными параметрами. См. описание структуры ACI_Buffer_Params.


ACI_ReadLayer

ACI_FUNC ACI_ReadLayer(ACI_Memory_Params * params);

Описание

Прочитать данные из буфера. Максимальный размер данных - 16 мегабайт.

Заметьте, что эта функция читает данные из буфера программатора, а не из микросхемы. Чтобы прочитать данные из микросхемы в буфер программатора, нужно выполнить функцию (операцию) программирования, которая обычно называется "Read" (см. ACI_ExecFunction, ACI_StartFunction).


ACI_WriteLayer

ACI_FUNC ACI_WriteLayer(ACI_Memory_Params * params);

Описание

Записать данные в буфер. Максимальный размер данных - 16 мегабайт.

Заметьте, что эта функция записывает данные в буфер программатора, а не сразу в микросхему. Чтобы запиать данные из буфера программатора в микросхему, нужно выполнить функцию (операцию) программирования, которая обычно называется "Program" (см. ACI_ExecFunction, ACI_StartFunction).


ACI_FillLayer

ACI_FUNC ACI_FillLayer(ACI_Memory_Params * params);

Описание

Заполнить весь подслой указанного буфера значением. Для больших буферов эта функция работает гораздо быстрее, чем запись данных в подслой с помошью ACI_WriteLayer.

Заметьте, что эта функция заполняет только буфер программатора, а не микросхему. См. комментарии к ACI_WriteLayer.


ACI_GetProgrammingParams

ACI_FUNC ACI_GetProgrammingParams(ACI_Programming_Params * params);

Описание

Получить текущие параметры программирования. Параметры программирования в оболочке программатора находятся в закладке "Опции" окна "Программирование". См. описание структуры ACI_Programming_Params.


ACI_SetProgrammingParams

ACI_FUNC ACI_SetProgrammingParams(ACI_Programming_Params * params);

Описание

Установить текущие параметры программирования. Параметры программирования в оболочке программатора находятся в закладке "Опции" окна "Программирование". См. описание структуры ACI_Programming_Params.


ACI_GetProgOption

ACI_FUNC ACI_GetProgOption(ACI_ProgOption_Params * params);

Описание

Получить текущее значение опции или алгоритма программирования. Опции программирования и алгоритма в оболочке программатора находятся в окне "Редактор параметров микросхемы и алгоритма программирования". См. описание структуры ACI_ProgOption_Params.

Заметьте, что эта функция не осуществляет доступа к микросхеме. Если запрашиваемая опция связана с памятью микросхемы (например, Fuses), то для получения реального значения опции из памяти микросхемы нужно сначала выполнить соответствующую функцию (операцию) чтения, которая может иметь различные имена для разных типов микросхем, но обычно называется "Read" (см. ACI_ExecFunction, ACI_StartFunction).


ACI_SetProgOption

ACI_FUNC ACI_SetProgOption(ACI_ProgOption_Params * params);

Описание

Установить значение опции или алгоритма программирования. Опции программирования и алгоритма в оболочке программатора находятся в окне "Редактор параметров микросхемы и алгоритма программирования". См. описание структуры ACI_ProgOption_Params.

Заметьте, что эта функция не осуществляет доступа к микросхеме. Если устанавливаемая опция связана с записью в микросхему (например, программирование Fuses), то для реального программирования микросхемы нужно выполнить соответствующую функцию (операцию) программирования, которая имеет различные имена для разных типов микросхем и может называться, например, "Program Fuses" (см. ACI_ExecFunction, ACI_StartFunction).


ACI_AllProgOptionsDefault

ACI_FUNC ACI_AllProgOptionsDefault();

Описание

Установить значения всех опций и алгоритмов программирования в значения по умолчанию, определенные разработчиками программатора.

Заметьте, что эта функция не осуществляет доступа к микросхеме. Если опции связаны с записью в микросхему (например, программирование Fuses), то для реального программирования микросхемы нужно выполнить соответствующую функцию (операцию) программирования, которая имеет различные имена для разных типов микросхем и может называться, например, "Program Fuses" (см. ACI_ExecFunction, ACI_StartFunction).


ACI_ExecFunction

ACI_FUNC ACI_ExecFunction(ACI_Function_Params * params);

Описание

Выполнить указанную функцию программирования (Read, Erase, Verify, ...). ACI_ExecFunction не возвращает управление, пока указанная функция не завершит работу, в отличие от ACI_StartFunction.


ACI_StartFunction

ACI_FUNC ACI_StartFunction(ACI_Function_Params * params);

Описание

Запустить указанную функцию программирования (Read, Erase, Verify, ...). В отличие от ACI_ExecFunction, эта функция возвращает управление немедленно. Определить момент окончания выполнения функции можно с помощью ACI_GetStatus. Это позволяет контролировать процесс выполнения функций, если он занимает длительное время.


ACI_GetStatus

ACI_FUNC ACI_GetStatus(ACI_PStatus_Params * params);

Описание

Получить информацию о состоянии программатора: состояние микросхемы в колодке (только для программаторов с USB-интерфейсом при включенной опции распознавания микросхемы в колодке), а также состояние выполняющейся функции программирования, запущенной с помощью ACI_StartFunction.


ACI_TerminateFunction

ACI_FUNC ACI_TerminateFunction();

Описание

Прервать выполнение функции программирования, запущенной с помощью ACI_StartFunction.


ACI_FileLoad

ACI_FUNC ACI_FileLoad(ACI_File_Params * params);

Описание

Загрузить файл в подслой буфера. Оболочка программатора берет на себя разбор формата файла.


ACI_FileSave

ACI_FUNC ACI_FileSave(ACI_File_Params * params);

Описание

Сохранить файл из подслоя буфера. Оболочка программатора умеет сохранять файлы в нескольких популярных форматах.


ACI_SettingsDialog

ACI_SettingsDialog();

Описание

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


ACI_SelectDeviceDialog

ACI_SelectDeviceDialog();

Описание

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


ACI_BuffersDialog

ACI_BuffersDialog();

Описание

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


ACI_LoadFileDialog

ACI_LoadFileDialog();

Описание

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


ACI_SaveFileDialog

ACI_SaveFileDialog();

Описание

Этот макрос дает оболочке программатора команду отобразить диалог сохранения файла из буфера. Диалог отображается независимо от того, является ли окно оболочки скрытым.


Структуры ACI

В этой главе содержится детальное описание структур, используемых функциями ACI.

Имя структуры | Какими функциями используется
ACI_Launch_Params | ACI_Launch
ACI_Config_Params | ACI_LoadConfigFile, ACI_SaveConfigFile
ACI_Device_Params | ACI_SetDevice, ACI_GetDevice
ACI_Layer_Params | ACI_GetLayer
ACI_Buffer_Params | ACI_CreateBuffer, ACI_ReallocBuffer
ACI_Memory_Params | ACI_ReadLayer, ACI_WriteLayer, ACI_FillLayer
ACI_Programming_Params | ACI_SetProgrammingParams, ACI_GetProgrammingParams
ACI_ProgOption_Params | ACI_GetProgOption, ACI_SetProgOption
ACI_Function_Params | ACI_ExecFunction, ACI_StartFunction
ACI_PStatus_Params | ACI_GetStatus
ACI_File_Params | ACI_FileLoad, ACI_FileSave


ACI_Launch_Params

typedef struct tagACI_Launch_Params

{

UINT Size; // (in) Size of structure, in bytes

LPCSTR ProgrammerExe; // (in) Programmer executable file name

LPCSTR CommandLine; // (in) Optional programmer command-line parameters

BOOL DebugMode; // (in) Debug mode. Programmer window is not hidden

} ACI_Launch_Params;

ProgrammerExe

Имя исполняемого файла программатора. Имя файла может не содержать пути; в этом случае поиск исполняемого файла программатора производится в той директории, где находится ACI.DLL.

Информацию о директории, куда был установлен программатор, можно получить из реестра. Оно хранится в параметре "Folder" ключа "HKLM\SOFTWARE\Phyton\Phyton ChipProgUSB Programmer\x.yy.zz" для программаторов с USB-интерфейсом и "HKLM\SOFTWARE\Phyton\Phyton ChipProgLPT Programmer\x.yy.zz" для программаторов с LPT-интерфейсом. "x.yy.zz" здесь - номер версии программатора. Следует иметь в виду, что на одном компьютере может быть установлено несколько версий ПО программатора.

CommandLine

Необязательные параметры командной строки программатора (см. руководство программатора). Этот параметр может быть равным NULL. Использование в командной строке параметра /N<серийный номер> - для программаторов с USB-интерфейсом - единственный способ указать, с каким экземпляром программатора установить связь, если к компьютеру одновременно подключено несколько программаторов.

Для программаторов с LPT-интерфейсом в командной строке можно указать параметр /B (пропустить диалог параметров связи), т. к. по умолчанию диалог выдается.

DebugMode

Если этот параметр равен TRUE, то главное окно программатора будет видимым. В промежутке между вызовами функций ACI с программатором можно производить любые манипуляции с помощью оболочки: открывать окна, просматривать и изменять любые ресурсы, выполнять функции и т.п.

См. также: ACI_Launch


ACI_Config_Params

typedef struct tagACI_Config_Params

{

UINT Size; // (in) Size of structure, in bytes

LPCSTR FileName; // (in) Options file name to load/save configuration

} ACI_Config_Params;

FileName

Имя файла настроек.

См. также: ACI_LoadConfigFile, ACI_SaveConfigFile


ACI_Device_Params

typedef struct tagACI_Device_Params

{

UINT Size; // (in) Size of structure, in bytes

CHAR Manufacturer[64]; // (in || out) Device Manufacturer

CHAR Name[64]; // (in || out) Device Name

} ACI_Device_Params;

Manufacturer | Имя производителя микросхемы.
Name | Название микросхемы.

См. также: ACI_SetDevice, ACI_GetDevice


ACI_Layer_Params

typedef struct tagACI_Layer_Params

{

UINT Size; // (in) Size of structure, in bytes

UINT BufferNumber; // (in) Number of buffer of interest, the first buffer number is 0

UINT LayerNumber; // (in) Number of layer of interest, the first layer number is 0

DWORD LayerSizeLow; // (out) Low 32 bits of layer size, in bytes

DWORD LayerSizeHigh; // (out) High 32 bits of layer size, in bytes

DWORD DeviceStartAddrLow; // (out) Low 32 bits of device start address for this layer

DWORD DeviceStartAddrHigh; // (out) High 32 bits of device start address for this layer

DWORD DeviceEndAddrLow; // (out) Low 32 bits of device end address for this layer

DWORD DeviceEndAddrHigh; // (out) High 32 bits of device end address for this layer

DWORD DeviceBufStartAddrLow; // (out) Low 32 bits of device memory start address in buffer for this layer

DWORD DeviceBufStartAddrHigh; // (out) High 32 bits of device memory start address in buffer for this layer

UINT UnitSize; // (out) Size of layer unit, in bits (8, 16 or 32)

BOOL FixedSize; // (out) Size of layer cannot be changed with ACI_ReallocBuffer()

CHAR BufferName[64]; // (out) Buffer name

CHAR LayerName[64]; // (out) Layer name, cannot be changed

UINT NumBuffers; // (out) Total number of currently allocated buffers

UINT NumLayers; // (out) Total number of layers in a buffer

} ACI_Layer_Params;

BufferNumber | Номер буфера, о котором запрашивается информация. Буфера нумеруются с 0.
LayerNumber | Номер подслоя, о котором запрашивается информация. Подслои нумеруются с 0.
LayerSizeLow, LayerSizeHigh | При возврате из функции содержит размер подслоя, в байтах.
DeviceStartAddrLow, DeviceStartAddrHigh | При возврате из функции содержит начальный адрес подслоя в микросхеме. Этот адрес является свойством микросхемы, его не надо путать с начальным адресом, который можно установить для операций с микросхемой. Обычно это 0.
DeviceEndAddrLow, DeviceEndAddrHigh | При возврате из функции содержит конечный адрес подслоя в микросхеме. Этот адрес является свойством микросхемы, его не надо путать с конечным адресом, который можно установить для операций с микросхемой. Размер памяти в микросхеме, таким образом, равен конечному адресу минус начальный плюс 1.
DeviceBufStartAddrLow, DeviceBufStartAddrHigh | При возврате из функции содержит начальный адрес подслоя в буфере. Обычно это 0.
UnitSize | Размер единицы памяти подслоя. Для микросхем с байтовой организацией памяти это будет 8, со словной организацией памяти это будет 16, для двухсловной - 32.
FixedSize | TRUE, если размер подслоя не может быть изменен функцией ACI_ReallocBuffer. Для подслоя 0 это всегда FALSE, т.е. размер нулевого подслоя всегда можно изменить.
BufferName | Имя буфера, как оно было задано в оболочке программатора или функцией ACI_CreateBuffer.
LayerName | Имя подслоя, предопределено разработчиками программатора и изменено быть не может.
NumBuffers | Общее количество буферов, распределенных в настоящее время.
NumLayers | Количество подслоев в буфере, оно предопределено и одно и то же для всех буферов.

См. также: ACI_GetLayer


ACI_Buffer_Params

typedef struct tagACI_Buffer_Params

{

UINT Size; // (in) Size of structure, in bytes

DWORD Layer0SizeLow; // (in/out) Low 32 bits of layer 0 size, in bytes

DWORD Layer0SizeHigh; // (in/out) High 32 bits of layer 0 size, in bytes

// Layer size is rounded up to a nearest value supported by programmer.

LPCSTR BufferName; // (in) Buffer name

UINT BufferNumber; // For ACI_CreateBuffer(): out: Created buffer number

// For ACI_ReallocBuffer(): in: Buffer number to realloc

UINT NumBuffers; // (out) Total number of currently allocated buffers

UINT NumLayers; // (out) Total number of layers in a buffer

} ACI_Buffer_Params;

Layer0SizeLow, Layer0SizeHigh | Размер нулевого подслоя буфера, в байтах. Этот размер не может быть менее 128 килобайт и более (на текущий момент) 32 гигабайт. Можно создавать буфера только фиксированных размеров, эти размеры можно узнать в оболочке программатора, в диалоге настройки буферов. Если необходимо, указанный в структуре размер автоматически преобразуется в ближайший подходящий больший фиксированный размер.
BufferName | Для ACI_CreateBuffer: имя создаваемого буфера. Для ACI_ReallocBuffer: игнорируется.
BufferNumber | Для ACI_CreateBuffer: при возврате из функции содержит номер созданного буфера. Для ACI_ReallocBuffer: номер буфера, размер которого следует изменить.
NumBuffers | Общее количество буферов, распределенных в настоящее время.
NumLayers | Количество подслоев в буфере, оно предопределено и одно и то же для всех буферов.

См. также: ACI_CreateBuffer, ACI_ReallocBuffer


ACI_Memory_Params

typedef struct tagACI_Memory_Params

{

UINT Size; // (in) Size of structure, in bytes

UINT BufferNumber; // (in) Number of buffer of interest, the first buffer number is 0

UINT LayerNumber; // (in) Number of layer of interest, the first layer number is 0

DWORD AddressLow; // (in) Low 32 bits of address, in layer units (natural to device address)

DWORD AddressHigh; // (in) High 32 bits of address, in layer units (natural to device address)

PVOID Data; // (in || out) Buffer to data to read to or write from

DWORD DataSize; // (in) Size of data to read or write, in layer units, max. 16 MB (0x1000000)

DWORD FillValue; // (in) Value to fill buffer with, used by ACI_FillLayer() only

} ACI_Memory_Params;

BufferNumber | Номер буфера, из которого прочитать данные или куда записать. Буфера нумеруются с 0.
LayerNumber | Номер подслоя, из которого прочитать данные или куда записать. Подслои нумеруются с 0.
AddressLow, AddressHigh | Адрес в подслое, начиная с которого прочитать данные или куда записать, в единицах, естественных для микросхемы. ACI_FillLayer: Игнорируется.
Data | ACI_ReadLayer: Указатель, по которому записываются прочитанные данные. ACI_WriteLayer: Указатель на данные, которые следует записать в буфер.ACI_FillLayer: Игнорируется.
DataSize | Размер данных, которые нужно прочитать или записать, в единицах, естественных для микросхемы. ACI_FillLayer: Игнорируется.
FillValue | Значение, которым заполняется буфер, используется только ACI_FillLayer. Для подслоев с байтной организацией используются только младшие 8 бит значения, со словной - 16 бит, с двухсловной - все 32 бита значения.

См. также: ACI_ReadLayer, ACI_WriteLayer, ACI_FillLayer


ACI_Programming_Params

typedef struct tagACI_Programming_Params

{

UINT Size; // (in) Size of structure, in bytes

BOOL InsertTest; // (in || out) Test if device is attached

BOOL CheckDeviceId; // (in || out) Check device identifier

BOOL ReverseBytesOrder; // (in || out) Reverse bytes order in buffer

BOOL BlankCheckBeforeProgram; // (in || out) Perform blank check before programming

BOOL VerifyAfterProgram; // (in || out) Verify after programming

BOOL VerifyAfterRead; // (in || out) Verify after read

BOOL SplitData; // (in || out) Split data: see ACI_SP_... constants

BOOL DeviceAutoDetect; // (in || out) Auto detect device in socket (not all of the programmers provide this feature)

BOOL DialogBoxOnError; // (in || out) On error, display dialog box

UINT AutoDetectAction; // (in || out) Action to perform on device autodetect or 'Start' button, see ACI_AD_... constants

DWORD DeviceStartAddrLow; // (in || out) Low 32 bits of device start address for programming operation

DWORD DeviceStartAddrHigh; // (in || out) High 32 bits of device start address for programming operation

DWORD DeviceEndAddrLow; // (in || out) Low 32 bits of device end address for programming operation

DWORD DeviceEndAddrHigh; // (in || out) High 32 bits of device end address for programming operation

DWORD DeviceBufStartAddrLow; // (in || out) Low 32 bits of device memory start address in buffer for programming operation

DWORD DeviceBufStartAddrHigh; // (in || out) High 32 bits of device memory start address in buffer for programming operation

} ACI_Programming_Params;

InsertTest

Перед любой манипуляцией с микросхемой производить тестирование наличия микросхемы в колодке, при этом тестируется наличие контакта на каждом выводе микросхемы.

CheckDeviceId

Контролировать внутренний идентификатор микросхемы.

ReverseBytesOrder

При работе с микросхемой (программирование, чтение, сравнение) байты в 16-битном слове меняются местами. В дампе буфера данные местами не меняются и соответствуют загруженному файлу.

BlankCheckBeforeProgram

Каждое выполнение процедуры Program будет предварять процедура Blank check.

VerifyAfterProgram

Каждое выполнение процедуры Program будет заканчиваться процедурой Verify.

VerifyAfterRead

Каждое выполнение процедуры Read будет заканчиваться процедурой Verify.

SplitData

Позволяет использовать восьмиразрядные микросхемы памяти в системах с 16- и 32-разрядной организацией памяти. См. описание констант ACI_SP_... в файле aciprog.h.

DeviceAutoDetect

Программатор сканирует все выводы микросхемы на наличие контакта каждого вывода и, при наличии контакта, запускает выбранную функцию, сценарий,либо Автоматическое программирование, в зависимости от значения AutoDetectAction.

DialogBoxOnError

При ошибке операции с микросхемой выдавать диалог с сообщением об ошибке. Если FALSE, то диалог не выдается.

AutoDetectAction

Только программаторы с USB-интерфейсом: действие, которое будет выполняться при нажатии кнопки Start на корпусе программатора или при обнаружении микросхемы в колодке (если DeviceAutoDetect не равно FALSE). См. описание констант ACI_AD_... в файле aciprog.h:

Значение AutoDetectAction | Описание действия
ACI_AD_EXEC_FUNCTION | Выполнить функцию, выбранную в оболочке программатора в списке функций программирования.
ACI_AD_EXEC_AUTO | Выполнить автоматическое программирование.
ACI_AD_EXEC_SCRIPT | Выполнить файл сценария. Имя файла задается в оболочке программатора.
ACI_AD_DO_NOTHING | Не выполнять ничего. В этом случае запустить какую-либо функцию можно только с помощью ACI_ExecFunction или ACI_StartFunction.

DeviceStartAddrLow,

DeviceStartAddrHigh

Начальный адрес в микросхеме для выполнения операции (функции). Не все функции программирования используют этот параметр.

DeviceEndAddrLow,

DeviceEndAddrHigh

Конечный адрес в микросхеме для выполнения операции (функции). Не все функции программирования используют этот параметр.

DeviceBufStartAddrLow,

DeviceBufStartAddrHigh

Начальный адрес в подслое буфера для выполнения операции (функции). Не все функции программирования используют этот параметр.

См. также: ACI_SetProgrammingParams, ACI_GetProgrammingParams


ACI_ProgOption_Params

typedef struct tagACI_ProgOption_Params

{

UINT Size; // (in) Size of structure, in bytes

LPCSTR OptionName; // (in) Name of the option. For lists, it should be in the form "List array name^List Name", e.g. "Configuration Bits^Oscillator"

CHAR Units[32]; // (out) Option measurement units ("kHz", "V", etc.)

CHAR OptionDescription[64]; // (out) Description of the option

CHAR ListString[64]; // (out) For ACI_PO_LIST option: Option string for Value.ListIndex

UINT OptionType; // (out) Option type: see ACI_PO_... constants

BOOL ReadOnly; // (out) Option is read-only

union // (in || out) Option value

{

LONG LongValue; // (in || out) Value for ACI_PO_LONG option

FLOAT FloatValue; // (in || out) Value for ACI_PO_FLOAT option

LPSTR String; // (in || out) Pointer to string for ACI_PO_STRING option

ULONG CheckBoxesValue; // (in || out) Value for ACI_PO_CHECKBOXES option

UINT StateIndex; // (in || out) State index for ACI_PO_LIST option

LPBYTE Bitstream; // (in || out) Pointer to bitstream data for ACI_PO_BITSTREAM option

} Value;

UINT VSize; // For ACI_SetProgOption():

// in: Size of Bitstream if OptionType == ACI_PO_BITSTREAM

// For ACI_GetProgOption():

// in: Size of buffer pointed by Bitstream if OptionType == ACI_PO_BITSTREAM

// in: Size of buffer pointed by String if OptionType == ACI_PO_STRING

// out: Size of buffer needed for storing Bitstream data if OptionType == ACI_PO_BITSTREAM.

// Set Value.Bitstream to NULL to get buffer size without setting the bitstream data

// out: Size of buffer needed for storing String if OptionType == ACI_PO_STRING, including the terminating NULL character.

// Set Value.String to NULL to get buffer size without setting the string

UINT Mode; // (in) For ACI_SetProgOption(): SEE ACI_PP_MODE_... constants

} ACI_ProgOption_Params;

OptionName

Имя опции программирования, например, "Vcc". Для опций типа "список" (ACI_PO_LIST), где собственно опции находятся внутри списка, нужно указать конструкцию <Имя списка>^<Имя опции>, например, "Биты конфигурации^Генератор".

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

Units

ACI_GetProgOption: При возврате из функции содержит строку, представляющую собой единицы, в которых иззмеряется значение опции. Если это, например, напряжение, то здесь будет строка "В" (Вольты).

OptionDescription

ACI_GetProgOption: При возврате из функции содержит строку, описывающую опцию.

ListString

ACI_GetProgOption: Для списков: содержит строку, описывающую текущее значение опции. Например, для опции "Биты конфигурации^Генератор" это может быть "XT - Standard Crystal".

OptionType

ACI_GetProgOption: Тип опции (целое значение, число с плавающей точкой, список и т.п.) См. описание констант ACI_PO_... в файле aciprog.h.

ReadOnly

ACI_GetProgOption: Опция не может быть изменена пользователем.

Value

Значение опции. Использование этого союза зависит от типа опции:

Тип опции | Использование союза Value
ACI_PO_LONG | Значение опции в Value.LongValue
ACI_PO_FLOAT | Значение опции в Value.FloatValue
ACI_PO_STRING | Значение опции является строкой символов, указатель на строку в Value.String. См. примечания ниже.
ACI_PO_CHECKBOXES | Опция представляет собой 32-битное целое число, в котором можно манипулировать каждым битом. Для примера можно в оболочке программатора выбрать микросхему Atmel ATtiny45 и посмотреть на опцию "Конфигурация". Значение опции - в Value.CheckBoxesValue.
ACI_PO_LIST | Опция представляет собой список параметров, каждый из которых может находиться в одном из состояний от 0 до некоторого N. Для примера можно в оболочке программатора выбрать микросхему Microchip PIC12F509 и посмотреть на опцию "Биты конфигурации^Генератор". Значение опции - в Value.StateIndex.
ACI_PO_BITSTREAM | Поток бит. В настоящее время пока не используется.

VSize

Размер буфера, требуемый для хранения строки, если тип опции - ACI_PO_STRING. См. примечания ниже.

Mode

Режим использования значения (См. описание констант ACI_PP_... в файле aciprog.h):

Значение Mode | Использование союза Value
ACI_PP_MODE_VALUE | Использовать Value для получения или установки значения опции.
ACI_PP_MODE_DEFAULT_VALUE | ACI_GetProgOption: Поместить в Value значение опции по умолчанию. ACI_SetProgOption: Игнорировать Value и установить значение опции по умолчанию, определенное разработчиками программатора.
ACI_PP_MODE_MIN_VALUE | ACI_GetProgOption: Поместить в Value минимальное значение опции. ACI_SetProgOption: Игнорировать Value и установить опцию в минимальное значение, определенное разработчиками программатора, если это возможно для опции указанного типа.
ACI_PP_MODE_MAX_VALUE | ACI_GetProgOption: Поместить в Value максимальное значение опции. ACI_SetProgOption: Игнорировать Value и установить опцию в максимальное значение, определенное разработчиками программатора, если это возможно для опции указанного типа.

Примечание для ACI_GetProgOption :

Чтобы получить размер буфера, необходимый для хранения значения опции типа ACI_PO_STRING, при первом вызове ACI_GetProgOption установите Value.String в NULL. После возврата VSize будет равен размеру буфера, включая 0 в конце строки. Распределите в своей программе буфер этого размера, установите Value.String в указатель на этот буфер и вызовите ACI_GetProgOption повторно.

См. также: ACI_GetProgOption, ACI_SetProgOption


ACI_Function_Params

typedef struct tagACI_Function_Params

{

UINT Size; // (in) Size of structure, in bytes

LPCSTR FunctionName; // (in) Name of a function to execute. If a function is under a sub-menu, use '^' to separate menu name from function name, e.g. "Lock Bits^Bit 0"

// To execute Auto Programming, set FunctionName to NULL, empty string or "Auto Programming".

UINT BufferNumber; // (in) Buffer number to use

BOOL Silent; // (in) On error, do not display error message box, just copy error string to ErrorMessage

CHAR ErrorMessage[512]; // (out) Error message string if ACI_ExecFunction() fails

} ACI_Function_Params;

FunctionName

Имя функции программирования, например, "Read". Для функций, которые находятся на втором уровне дерева в списке функций, нужно указать конструкцию <Имя списка>^<Имя функции>, например, "Биты защиты^Бит 0".

Имена функций можно указывать как на русском, так и на английском языке, буквами как верхнего, так и нижнего регистра.

Для запуска автоматического программирования установите FunctionName в NULL, пустую строку или "Auto Programming".

BufferNumber

Номер буфера, который используется при выполнении функции.

Silent

Если TRUE, то при ошибке диалог с сообщением об ошибке не выдается, функция немедленно завершается с кодом ACI_ERR_FUNCTION_FAILED, а сообщение об ошибке копируется в ErrorMessage.

ErrorMessage

Для ACI_ExecFunction(): сюда копируется сообщение об ошибке, если функция программирования завершилась с ошибкой.

См. также: ACI_ExecFunction, ACI_StartFunction, ACI_GetStatus


ACI_PStatus_Params

typedef struct tagACI_PStatus_Params

{

UINT Size; // (in) Size of structure, in bytes

BOOL Executing; // (out) Device function started by ACI_StartFunction() is executing

UINT PercentComplete; // (out) Function complete percent, valid id Executing != FALSE

UINT DeviceStatus; // (out) Device/socket status, see ACI_DS_... constants

BOOL NewDevice; // (out) New device inserted, no function has been executed yet. Valid if DeviceAutoDetect is ON.

BOOL FunctionFailed; // (out) TRUE if last function failed

CHAR FunctionName[128]; // (out) Name of a function being executed if Executing != FALSE. If a function is under a sub-menu, function name will be like this: "Lock Bits^Bit 0"

CHAR ErrorMessage[512]; // (out) Error message string if FunctionFailed != FALSE

} ACI_PStatus_Params;

Executing

TRUE, если функция, запущенная с помощью ACI_StartFunction, выполняется.

PercentComplete

Процент завершения текущей функции, если Executing == TRUE, от 0 до 100.

DeviceStatus

Только для программаторов с USB-интерфейсом при включенной опции распознавания микросхемы в колодке: Состояние микросхемы. См. описание констант ACI_DS_... в файле aciprog.h:

Состояние | Описание
ACI_DS_OK | Микросхема в колодке, контакты ножек надежны.
ACI_DS_OUT_OF_SOCKET | Микросхемы нет колодке.
ACI_DS_SHIFTED | Микросхема в колодке, контакты ножек надежны, но микросхема вставлена неправильно. Это состояние может также возникнуть, когда выбранный тип микросхемы не соответствует реальному.
ACI_DS_BAD_CONTACT | Микросхема в колодке, но контакты ножек плохие. Такое состояние может ненадолго возникнуть при вставке микросхемы в колодку или ее извлечении оттуда.
ACI_DS_UNKNOWN | Состояние микросхемы определить нельзя. Либо опция распознавания микросхемы в колодке выключена, либо не поддерживается программатором.

NewDevice

Только для программаторов с USB-интерфейсом при включенной опции распознавания микросхемы в колодке: Если FALSE, то микросхема не была иззвлечена из колодки после выполнения функции программирования. Этот флажок становится TRUE после смены микросхемы.

FunctionFailed

Этот флажок устанавливается в FALSE при запуске функции программирования с помощью ACI_StartFunction. Если функция завершилась с ошибкой, флажок устанавливается в TRUE, когда Executing устанавливется в FALSE.

FunctionName

Имя функции, выполняющейся в данный момент, или имя функции, в которой произошла ошибка, если FunctionFalied == TRUE.

ErrorMessage

Сюда копируется сообщение об ошибке, если функция программирования завершилась с ошибкой (FunctionFalied == TRUE).

См. также: ACI_ExecFunction, ACI_StartFunction, ACI_GetStatus


ACI_File_Params

typedef struct tagACI_File_Params

{

UINT Size; // (in) Size of structure, in bytes

LPCSTR FileName; // (in) File name

UINT BufferNumber; // (in) Buffer number

UINT LayerNumber; // (in) Layer number

UINT Format; // (in) File format: see ACI_PLF_... and ACI_PSF_... constants

DWORD StartAddressLow; // (in) Low 32 bits of start address for ACI_FileSave().

// For ACI_FileLoad(): Ignored if Format != ACI_PLF_BINARY

DWORD StartAddressHigh; // (in) High 32 bits of start address for ACI_FileSave().

// For ACI_FileLoad(): Ignored if Format != ACI_PLF_BINARY

DWORD EndAddressLow; // (in) ACI_FileSave(): Low 32 bits of end address

DWORD EndAddressHigh; // (in) ACI_FileSave(): High 32 bits of end address

DWORD OffsetLow; // (in) Low 32 bits of address offset for ACI_FileLoad()

DWORD OffsetHigh; // (in) High 32 bits of address offset for ACI_FileLoad()

} ACI_File_Params;

FileName | Имя загружаемого файла.
BufferNumber | Номер буфера, куда загрузить файл. Буфера нумеруются с 0.
LayerNumber | Номер подслоя, куда загрузить файл. Подслои нумеруются с 0.
Format | Формат загружаемого файла. См. описание констант ACI_PLF_... в файле aciprog.h.
StartAddressLow, StartAddressHigh | ACI_FileSave: Начальный адрес в подслое, с которого сохранить файл. ACI_FileLoad: Для файлов в двоичном формате (Format == ACI_PLF_BINARY), которые не содержат внутри себя информации об адресах: Начальный адрес загрузки.
EndAddressLow, EndAddressHigh | ACI_FileSave: Конечный адрес в подслое, до которого сохранить файл, включительно.
OffsetLow, OffsetHigh | Смещение, которое будет прибавляться к адресам, в которые загружается файл. Смещение может быть как положительным, так и отрицательным. Это позволяет при необходимости переместить загружаемые данные в другие адреса.

См. также: ACI_FileLoad, ACI_FileSave


Примеры

 Top Previous

В комплект пакета ACI входят примеры, демонстрирующие использование ACI. Примеры находятся в поддиректории ACI\Programmer ACI Examples установочной директории пакета программатора.

Примеры написаны на языке Си, предназначены для компиляции с помощью Microsoft Visual Studio 2008 и оформлены как проекты в едином решении (Solution). Исходный текст примеров может быть откомпилирован и другими компиляторами C/C++ с минимальными переделками или вообще без них. В результате сборки примеров создаются исполняемые файлы, которые являются консольными приложениями Windows.

Чтобы примеры работали в реальной системе, в исходных текстах примеров нужно подправить в функции main() пути к файлам, которые используются в тексте примеров. Это каcается пути к исполняемому файлу программатора и файлам данных, которые загружаются в буфер программатора или сохраняются из буфера на диск. Нужно также задать в исходном тексте функции main() тип выбираемой в программаторе микросхемы в соответствии с реально используемой микросхемой.

Все примеры используют динамическую библиотеку ACI.DLL, поэтому файл ACI.DLL должен либо находиться в той же директории, что и исполняемый файл примера, либо в директории, указанной в переменной окружения PATH. В примерах пакета ACI.DLL уже скопирована в директории, где Visual Studio создает исполняемые файлы примеров.

Описание примеров

Во всех примерах прежде всего запускается программатор с помощью функции ACI_Launch(). Вам нужно будет подправить путь к исполняемому файлу программатора, который передается функции Attach() в качестве параметра. Затем производится установка типа используемой микросхемы, который тоже нужно установить в соответствии с реально используемым типом.

Тексты примеров содержат краткие комментарии к коду.

AutoProgramming.c

Самый простой пример использования ACI. Пример загружает в буфер .hex-файл, устанавливает значения всех опций и алгоритмов программирования в значения по умолчанию, после чего выполняет автоматическое программирование микросхемы (набор предопределенных разработчиками программатора операций: стирание, проверка на стертость, программирование...).

SaveMemory.c

Этот пример считывает данные из микросхемы в фиксированном диапазоне и сохраняет их в двоичном файле на диске. Таким образом, в сохраненном файле будет находиться образ памяти микросхемы.

Перед считыванием данных проверяется, находится ли микросхема в колодке. Это будет работать только для программаторов с USB-интерфейсом, которые поддерживают распознавание наличия микросхемы в колодке. Если ваш программатор этого не поддерживает, удалите из текста примера соответствующий код (см. комментарии в тексте примера).

Checksum.c

Этот пример выясняет размер памяти микросхемы, распределяет соответствующий размеру буфер в памяти, считывает туда весь нулевой подслой микросхемы и вычисляет контрольную сумму данных. Перед считыванием данных проверяется, находится ли микросхема в колодке. См. пояснения к примеру SaveMemory.

LongProgramming.c

Этот пример демонстрирует, как можно следить за процессом программирования микросхемы, если процесс занимает значительное время. Программирование запускается с помощью ACI_StartFunction и контролируется с помощью ACI_GetStatus.

ProgrammingOptions.c

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