| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | /* * srm32sprog.h * *  Created on: Apr 12, 2016 *      Author: jesstr */#ifndef SRM32SPROG_H_#define SRM32SPROG_H_#include "stm32f4xx_usart.h"#include "gpio_io.h"#include "serial.h"#include "sys/types.h"#define MAX_CONNECT_RETRIES	3#define DEFAULT_BAUD 57600#define MAX_BLOCK_SIZE 256static const uint8_t ACK = 0x79;typedef enum {    CMD_GET_VERSION = 0x00,    CMD_GET_READ_STATUS = 0x01,    CMD_GET_ID = 0x02,    CMD_READ_MEM = 0x11,    CMD_GO = 0x21,    CMD_WRITE_MEM = 0x31,    CMD_ERASE = 0x43,    CMD_EXTENDED_ERASE = 0x44,    CMD_WRITE_PROTECT = 0x63,    CMD_WRITE_UNPROTECT = 0x73,    CMD_READ_PROTECT = 0x82,    CMD_READ_UNPROTECT = 0x92} Command;#define NUM_COMMANDS_KNOWN 12enum {    ID_LOW_DENSITY = 0x0412,    ID_MED_DENSITY = 0x0410,    ID_HI_DENSITY = 0x0414,    ID_CONNECTIVITY = 0x0418,    ID_VALUE = 0x0420,    ID_HI_DENSITY_VALUE = 0x0428,    ID_XL_DENSITY = 0x0430,    ID_MED_DENSITY_ULTRA_LOW_POWER = 0x0436,    ID_HI_DENSITY_ULTRA_LOW_POWER = 0x0416};typedef struct {    uint8_t bootloaderVer;    bool commands[NUM_COMMANDS_KNOWN];    uint32_t flashBeginAddr;    uint32_t flashEndAddr;    int flashPagesPerSector;    size_t flashPageSize;    useconds_t eraseDelay;    useconds_t writeDelay;} DeviceParameters;int stm32sprog_test(void);void usleep(uint32_t us);void stmRebootForFlash(void);void stmReboot(void);uint32_t stmCalcFlashCrc(void (* periodic_handler)(uint8_t));uint32_t stmReadFlashCrc(void);bool stmConnect(void);bool stmGetDevParams(void);bool stmEraseFlash(void);bool stmEraseFW(void);bool stmWriteBlock(uint32_t addr, const uint8_t *buff, size_t size);void stmProg( uint32_t* addr, uint8_t * ptr, uint32_t len);#endif /* SRM32SPROG_H_ */
 |