Files
ESPC3-wireless/app/drivers/sertrf/protocol/stmisp.h

135 lines
3.0 KiB
C
Raw Normal View History

2025-10-07 17:49:20 +08:00
#ifndef STMISP_H
#define STMISP_H
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <termios.h>
#include <sys/time.h>
#define ACK 0x79
#define NACK 0x1F
#define SYNC_BYTE 0x7F
#define GET_CMD 0x00
#define GETID_CMD 0x02
#define ERASE_CMD 0x44
#define WRITE_UN_CMD 0x73
#define READ_UN_CMD 0x92
#define WRITE_CMD 0x31
#define GO_CMD 0x21
2025-10-07 17:49:20 +08:00
typedef struct
{
uint8_t version; //目标buildroot版本
uint8_t cmd_count; //支持命令数量
uint8_t cmd_data[64]; //所支持的命令
uint16_t pid; //产品ID
uint8_t num;
int (*send)(void* data, uint16_t len, int timeout); // 发送数据
int (*recv)(void* data, uint16_t len, int timeout); // 接收数据
int (*get_length )(void); // 获取数据长度
uint8_t flag; //启动标志位
uint32_t adder_offset; //地址偏移
2025-10-07 17:49:20 +08:00
}stmisp_device_t;
2025-10-23 18:40:19 +08:00
typedef struct
{
uint32_t stmisp_file_size;
}stmisp_parm_t;
2025-10-07 17:49:20 +08:00
/**
* @brief
*/
uint8_t xor_checksum(const uint8_t *buf, size_t len);
/**
* @brief stmisp
*/
int stmisp_init(stmisp_device_t *stmisp_device, int (*send)(void* data, uint16_t len, int timeout), int (*recv)(void* data, uint16_t len, int timeout), int (*get_length )(void));
/**
* @brief isp应答信号
*/
int wait_ack(stmisp_device_t *stmisp_device, uint32_t timeout);
/**
* @brief isp发送命令
*/
int send_cmd_wait(stmisp_device_t *stmisp_device, uint8_t cmd, uint32_t timeout);
/**
* @brief isp发送同步信号
*/
int send_sync(stmisp_device_t *stmisp_device, uint32_t retries);
/**
* @brief isp实现GET命令获取
*/
int cmd_get(stmisp_device_t *stmisp_device);
/**
* @brief isp获取ID
*/
int cmd_getid(stmisp_device_t *stmisp_device);
/**
* @brief isp实现go命令
*/
int cmd_go(stmisp_device_t *stmisp_device, uint32_t adder);
2025-10-07 17:49:20 +08:00
/**
* @brief isp设置写保护
*/
int cmd_write_protect(stmisp_device_t *stmisp_device);
/**
* @brief isp解除写保护
*/
int cmd_write_unprotect(stmisp_device_t *stmisp_device);
/**
* @brief isp设置读保护
*/
int cmd_read_protect(stmisp_device_t *stmisp_device);
/**
* @brief isp解除读保护
*/
int cmd_read_unprotect(stmisp_device_t *stmisp_device);
/**
* @brief isp进行全擦除
*/
int cmd_extended_erase_mass(stmisp_device_t *stmisp_device);
/**
* @brief isp进行指定扇区擦除
*/
int cmd_erase_sector(stmisp_device_t *stmisp_device, uint32_t sector, uint32_t count);
/**
* @brief isp进行指定扇区读取
*/
int cmd_read_memory(stmisp_device_t *stmisp_device, uint32_t addr, uint32_t length, uint8_t *outbuf);
/**
* @brief isp进行指定扇区写入
*/
int cmd_write_memory(stmisp_device_t *stmisp_device, uint32_t addr, const uint8_t *data, size_t len, bool verify);
/**
* @brief
*/
void Examples_run(void);
2025-10-07 17:49:20 +08:00
int stmisp_send(void* data, uint16_t len, int timeout);
int stmisp_recv(void* data, uint16_t len, int timeout);
int stmisp_get_length(void);
#endif