Files
E502_ADC_BF_PC_companion/lib/e502/e502_cm4_defs.h

165 lines
9.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef E502_LPC_CMD_DEFS_H
#define E502_LPC_CMD_DEFS_H
#define E502_CM4_SUPPORT_OUT_CYCLE_SETUP_CHECK(ver) (ver >= 0x01000200)
/***************************************************************************//**
@addtogroup e502proto_defs Определения протокола обмена с модулем E502
@{
*******************************************************************************/
/** Коды ошибок, возвращаемые модулем при завершении управляющей команды */
typedef enum {
E502_CM4_ERR_OK = 0, /**< Команда выполнена успешно */
E502_CM4_ERR_FPGA_NSTATUS_TOUT = -1001, /**< При загрузке ПЛИС не удалось дождаться сигнала перехода в режим загрузки */
E502_CM4_ERR_FPGA_CONF_DONE_TOUT = -1002, /**< При загрузке ПЛИС не удалось дождаться сигнала завершения загрузки */
E502_CM4_ERR_FPGA_FW_NOT_PRESENT = -1003, /**< Не обнаружена прошивка ПЛИС во flash-памяти модуля */
E502_CM4_ERR_FPGA_REG_NACK = -1004, /**< Обращение к регистру ПЛИС вернуло ответ NACK */
E502_CM4_ERR_FPGA_REG_ERROR = -1005, /**< Обращение к регистру ПЛИС вернуло ответ ERROR */
E502_CM4_ERR_FPGA_REG_WT_TOUT = -1006, /**< Не удалось дожлаться ответ на обращение к регистру ПЛИС */
E502_CM4_ERR_TEST_INVALID_NUM = -1007, /**< Неподдерживаемый номер теста */
E502_CM4_ERR_HARD_FAULT = -1007, /**< Восстановление после hard fault */
E502_CM4_ERR_TEST_VALUE_MISMATH = -1008, /**< Несовпадение ожидаемых значений при проходе теста */
E502_CM4_ERR_TEST_NOT_RUNNING = -1009, /**< Тест не запущен */
E502_CM4_ERR_TEST_ALREADY_RUNNING = -1010, /**< Tест уже запщен */
E502_CM4_ERR_BF_LDR_FILE_SIZE = -1011, /**< Не удалось найти конец файла прошивки BlackFin */
E502_CM4_ERR_LDR_FILE_FORMAT = -1012, /**< Неверный формат файла прошивки BlackFin */
/** Используются возможность LDR-файла, недоступные при записи прошивки
BlackFin по HDMA */
E502_CM4_ERR_LDR_FILE_UNSUP_FEATURE = -1013,
/** Неверный стартовый адрес программы в прошивке BlackFin */
E502_CM4_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -1014,
/** Истек таймаут выполнения запроса на чтения/запись памяти BlackFin */
E502_CM4_ERR_BF_REQ_TIMEOUT = -1015,
/** Команда для BlackFin все еще находится в процессе обработки */
E502_CM4_ERR_BF_CMD_IN_PROGRESS = -1016,
/** Истекло время выполнения управляющей команды процессором BlackFin */
E502_CM4_ERR_BF_CMD_TIMEOUT = -1017,
/** Возвращено недостаточно данных в ответ на команду к BlackFin */
E502_CM4_ERR_BF_CMD_RETURN_INSUF_DATA = -1018,
/** Истек таймаут ожидания готовности процессора BlackFin к записи прошивки */
E502_CM4_ERR_BF_LOAD_RDY_TOUT = -1019,
/** Попытка выполнить операцию для которой нужен сигнальный процессор при
отсутствии сигнального процессора в модуле */
E502_CM4_ERR_BF_NOT_PRESENT = -1020,
/** Неверный адрес памяти BlackFin при записи или чтении по HDMA */
E502_CM4_ERR_BF_INVALID_ADDR = -1021,
/** Неверный размер данных, передаваемых с управляющей командой в BlackFin */
E502_CM4_ERR_BF_INVALID_CMD_DATA_SIZE = -1022,
E502_CM4_ERR_UNKNOWN_CMD = -1023, /**< Неподдерживаемый код команды */
E502_CM4_ERR_INVALID_CMD_PARAMS = -1024, /**< Неверные параметры переданной команды */
E502_CM4_ERR_FIRM_BUF_OVERFLOW = -1025, /**< Переполнение буфера для приема прошивки */
E502_CM4_ERR_CMD_SIGNATURE = -1026, /**< Неверный признак начала команды */
E502_CM4_ERR_INVALID_CMD_DATA_SIZE = -1027, /**< Неверное количество данных в команде */
E502_CM4_ERR_FLASH_PROT_CODE = -1028, /**< Неверный код настройки защиты Flash-памяти */
E502_CM4_ERR_FLASH_OP = -1029, /**< Ошибка выполнения операции с Flash-памятью */
E502_CM4_ERR_FLASH_DATA_COMPARE = -1030, /**< Ошибка сравнения записанных данных во Flash-память */
E502_CM4_ERR_INVALID_PASSWORD = -1031, /**< Неверный пароль для изменения сетевых настроек */
E502_CM4_ERR_FPGA_NOT_LOADED = -1032, /**< ПЛИС не был загружен */
E502_CM4_ERR_FLASH_SET_PROT_BITS = -1033, /**< Не удалось изменить занчения битов защиты Flash-памяти */
E502_CM4_ERR_FPGA_FW_INVALID_TEMP_RANGE = -1034, /**< Загруженная прошивка ПЛИС предназначена для другого темп. исполнения */
E502_CM4_ERR_M0_STREAM_START_REQ = -1035, /**< Нет ответа на запрос запуска потока от ядра Cortex-M0 */
E502_CM4_ERR_M0_STREAM_STOP_REQ = -1036, /**< Нет ответа на запрос останова потока от ядра Cortex-M0 */
E502_CM4_ERR_OUT_STREAM_RUNNING = -1037, /**< Уже запущен вывод в потоковом режиме */
E502_CM4_ERR_OUT_NO_CYCLE_BUF = -1038, /**< Нет свободного буфера для циклического режима. Не произошла смена страниц */
E502_CM4_ERR_OUT_CYCLE_BUF_SIZE = -1039, /**< Задан слишком большой размер циклического буфера */
E502_CM4_ERR_OUT_CYCLE_NOT_LOADED = -1040, /**< Не был полностью загружен циклический буфер перед сменой */
} t_e502_cm4_errs;
/** @} */
typedef enum {
E502_STREAM_CH_IN = 0,
E502_STREAM_CH_OUT = 1
} t_e502_stream_ch;
typedef enum {
E502_IFACE_USB = 0,
E502_IFACE_TCP = 1
} t_e502_ifaces;
/** Коды команды протокола обмена с модулем E502 */
typedef enum {
E502_CM4_CMD_GET_USB_SPEED = 6,
E502_CM4_CMD_GET_MODULE_NAME = 11,
E502_CM4_CMD_BOOT = 0x0F,
E502_CM4_CMD_FPGA_REG_READ = 0x10,
E502_CM4_CMD_FPGA_REG_WRITE = 0x11,
E502_CM4_CMD_STREAM_START = 0x12,
E502_CM4_CMD_STREAM_STOP = 0x13,
E502_CM4_CMD_STREAM_SET_STEP = 0x14,
E502_CM4_CMD_STREAM_IS_RUNNING = 0x15,
E502_CM4_CMD_FIRM_BUF_WRITE = 0x16,
E502_CM4_CMD_FLASH_RD = 0x17,
E502_CM4_CMD_FLASH_WR = 0x18,
E502_CM4_CMD_FLASH_ERASE = 0x19,
E502_CM4_CMD_FLASH_SET_PROTECT = 0x1A,
E502_CM4_CMD_FLASH_RELOAD_INFO = 0x1B,
E502_CM4_CMD_ETH_CFG_SET = 0x1C,
E502_CM4_CMD_ETH_CFG_GET = 0x1D,
E502_CM4_CMD_BF_MEM_WRITE = 0x20,
E502_CM4_CMD_BF_MEM_READ = 0x21,
E502_CM4_CMD_BF_FIRM_LOAD = 0x22,
E502_CM4_CMD_DROP_DATA_CON = 0x23,
E502_CM4_CMD_RELOAD_FPGA = 0x24,
E502_CM4_CMD_GET_DEVFLAGS = 0x25,
E502_CM4_CMD_OUT_CYCLE_LOAD = 0x26,
E502_CM4_CMD_OUT_CYCLE_SETUP = 0x27,
E502_CM4_CMD_OUT_CYCLE_STOP = 0x28,
E502_CM4_CMD_OUT_CYCLE_SETUP_CHECK = 0x29,
E502_CM4_CMD_TEST_START = 0x40,
E502_CM4_CMD_TEST_STOP = 0x41,
E502_CM4_CMD_TEST_GET_STATE = 0x42,
E502_CM4_CMD_GET_MODULE_INFO = 0x80,
E502_CM4_CMD_GET_MODULE_MODE = 0x81,
E502_CM4_CMD_GET_LAST_ERROR = 0x82
} t_e502_cm4_cmd_codes;
/** @internal */
typedef enum {
E502_CM4_TEST_NONE=0,
E502_CM4_TEST_SRAM_BUF_RING,
E502_CM4_TEST_SRAM_SDRAM_RING_DMA,
E502_CM4_TEST_USB_TX_CNTR,
E502_CM4_TEST_USB_RING,
E502_CM4_TEST_SPI_SLAVE,
E502_CM4_TEST_SDRAM,
E502_CM4_TEST_ETH_PHY_LOOPBACK,
E502_CM4_TEST_DAC_CNTR,
E502_CM4_TEST_GD_SDIO,
E502_CM4_TEST_DCI_CNTR,
E502_CM4_TEST_FPGA_RING
} t_test_number;
/** @internal */
/** Параметры теста */
typedef struct {
uint32_t test; /**< Номер выполняемого теста */
uint32_t run; /**< Признак, запущен ли сейчас тест */
uint32_t stage; /**< Этап выполнения теста */
uint32_t cntr; /**< Счетчик - сколько раз прошел тест */
int32_t err; /**< Код ошибки выполнения теста */
uint32_t last_addr; /**< Последний используемый адрес */
uint32_t last_wr; /**< Последнее записанное значение */
uint32_t last_rd; /**< Последнее считанное значение */
} t_e502_cm4_test_state;
#endif // E502_LPC_CMD_DEFS_H