| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912 |
- /* doxygen documentation */
- /*!
- * \file CubeProgrammer_API.h
- * \mainpage STM32CubeProgrammer API Documentation
- * \section intro1 Introduction
- * In addition to the graphical user interface and the commandline interface, STM32CubeProgrammer offers a C++ API
- * that you could use to develop your own application and benefit of wide range
- * of features to program STM32 microcontrollers memories (such as Flash, RAM, and OTP)
- * either over debug interface or bootloder interface (USB DFU, UART, I²C, SPI and CAN).
- *
- * This documentation details all types and functions API to use STM32CubeProgrammer functionalities. \n
- *
- * \section include STM32CubeProgrammer API package
- * The API package is based on the following resources that are ready for use : \n
- * <table>
- * <tr><th>File <th>Description
- * <tr><td>CubeProgrammer_API.h <td>header file contains functions declarations and macro definitions to be used by the CubeProgrammer_API.dll.
- * <tr><td>DeviceDataStructure.h <td>header file contains macro definitions to be shared between several functions.
- * <tr><td>CubeProgrammer_API.dll/.so/.dylib <td>Dynamic Link Library file contains a library of functions and other informations that can be accessed by windows, linux and MacOs programs.
- * <tr><td>CubeProgrammer_API.lib <td>import library for use with MSVC compiler.
- * </table>
- *
- * \section app Application System requirements
- * We offer various examples developed for use with Visual Studio and Qt Creator IDEs:
- * - Visual Studio project for windows applications under MSVC compiler.
- * - Qt project for Windows, Linux and MacOs applications under MinGW compiler.
- * \note The attached examples are tested on STM32F429, STM32L4R9 and STM32L452RE Nucleo Boards.
- *
- * \subsection windows Windows build settings
- * To ensure the correct environment for the provided examples, some constraints must be taken into account\n
- *
- * \subsubsection vs Visual studio
- * The code was developed with Microsoft Visual Studio Community 2017 version 15.6.6 with Windows SDK version : 10.0.16299.0
- * and it was tested also on Microsoft Visual Studio 2010 \n
- * - Verify that the api's lib directory is the default working directory.
- * - The debug command is to execute the application that is resided in the output directory.
- * - Insert the Additional Include Directories:\n
- * <HR>
- * \image html link1.jpg \n
- * <HR>
- * - Indicate the output name and path. \n
- * - Insert the Additional Library Directories. \n
- * - Insert the Additional Dependencies, The CubeProgrammer_API import library "CubeProgrammer_API.lib" must be added to Linker input\n
- * <HR>
- * \image html link2.jpg \n
- * <HR>
- * \note The provided Visual studio project is already configured like the description above and you can change it carefully according to your use case.
- * \subsubsection qt Qt creator
- * The Qt projects are developed with Qt Creator 4.7.1, Qt 5.11.2 and MinGW 32 bit compiler and also it can be compiled by MinGW x64.\n
- * <b> The shadow build option must be disable to inform Qt that the build should be located in the original Qt project directory. </b>
- * \note Verify that the following DLLs are placed to /lib in the api package directory :
- * <table>
- * <tr><td>CubeProgrammer_API.dll <td>FileManager.dll <td>STLinkUSBDriver.dll
- * <tr><td>HSM_P11_Lib.dll <td>libeay32.dll <td>libgcc_s_dw2-1.dll
- * <tr><td>stlibp11_SAM.dll <td>libstdc++-6.dll <td>libwinpthread-1.dll
- * <tr><td>mfc120.dll <td>msvcp120.dll <td>msvcr120.dll
- * <tr><td>Qt5Core.dll <td>Qt5SerialPort.dll <td>Qt5Xml.dll
- * </table>
- *
- * \subsection qtlinux Linux build settings
- * To correctly build the Qt project in linux platform, you should follow the next 3 steps:
- * 1. Select the build configuration in Projects field of the main view. \n
- * 2. Disable the Shadow build option. \n
- * 3. Go to build environment, add the System Environment variable LD_LIBRARY_PATH and set the path to ../../../../lib \n
- * <HR>
- * \image html LdLibraryPath.png \n
- * <HR>
- * * \note Verify that the following Shared Objects are placed to /lib in the STM32CubeProgrammer package directory :
- * <table>
- * <tr><td>libCubeProgrammer_API.so <td>libCubeProgrammer_API.so.1 <td>libSTLinkUSBDriver.so <td>libFileManager.so.1
- * <tr><td>libhsmp11.so <td>libQt5SerialPort.so.5 <td>libQtXml.so.5 <td>libQt5Core.so.5
- * <tr><td>libicudata.so.56 <td>libicui18n.so.56 <td>libicuuc.so.56 <td> -
- * </table>
- *
- * \subsection qtMacOS MacOS build settings
- * To get the default api folder that is integrated into the STM32CubeProgrammer package already installed, go to \n
- * /Application/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/contents/MacOs/api
- * \note Verify that the following Mach Objects are placed to /Application/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/contents/MacOs/bin in the STM32CubeProgrammer package directory:
- * <table>
- * <tr><td>libCubeProgrammer_API.dylib <td>libCubeProgrammer_API.1.dylib <td>libCubeProgrammer_API.1.0.dylib <td>libCubeProgrammer_API.1.0.0.dylib
- * <tr><td>libFileManager.dylib <td>libFileManager.1.dylib <td>libFileManager.1.0.dylib <td>libFileManager.1.0.0.dylib
- * <tr><td>libSTLinkUSBDriver.dylib <td>libhsmp11.dylib <td>libstP11_SAM.dylib <td>libusb-1.0.0.dylib
- * <tr><td>QtSerialPort.framework <td>QtXml.framework <td>QtCore.framework <td> -
- * </table>
- */
- #ifndef CUBEPROGRAMMER_API_H
- #define CUBEPROGRAMMER_API_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <stdint.h>
- #include "DeviceDataStructure.h"
- #if (defined WIN32 || defined _WIN32 || defined WINCE)
- # define CP_EXPORTS __declspec(dllexport)
- #else
- # define CP_EXPORTS
- #endif
- /* -------------------------------------------------------------------------------------------- */
- /* Errors Enumerations */
- /* -------------------------------------------------------------------------------------------- */
- /**
- * \enum cubeProgrammerVerbosityLevel
- * \brief List of verbosity levels.
- */
- enum cubeProgrammerVerbosityLevel {
- /** no messages ever printed by the library */
- CUBEPROGRAMMER_VER_LEVEL_NONE = 0,
- /** warning, error and success messages are printed (default) */
- CUBEPROGRAMMER_VER_LEVEL_ONE = 1,
- /** error roots informational messages are printed */
- CUBEPROGRAMMER_VER_LEVEL_TWO = 2,
- /** debug and informational messages are printed */
- CUBEPROGRAMMER_VER_LEVEL_DEBUG = 3,
- /** no progress bar is printed in the output of the library */
- CUBEPROGRAMMER_NO_PROGRESS_BAR = 4, /* progress bars are printed only with verbosity level one */
- };
- /**
- * \enum cubeProgrammerError
- * \brief List of errors that can be occured.
- */
- enum cubeProgrammerError {
- /** Success (no error) */
- CUBEPROGRAMMER_NO_ERROR = 0,
- /** Device not connected */
- CUBEPROGRAMMER_ERROR_NOT_CONNECTED = -1,
- /** Device not found */
- CUBEPROGRAMMER_ERROR_NO_DEVICE = -2,
- /** Device connection error */
- CUBEPROGRAMMER_ERROR_CONNECTION = -3,
- /** No such file */
- CUBEPROGRAMMER_ERROR_NO_FILE = -4,
- /** Operation not supported or unimplemented on this interface */
- CUBEPROGRAMMER_ERROR_NOT_SUPPORTED = -5,
- /** Interface not supported or unimplemented on this plateform */
- CUBEPROGRAMMER_ERROR_INTERFACE_NOT_SUPPORTED = -6,
- /** Insufficient memory */
- CUBEPROGRAMMER_ERROR_NO_MEM = -7,
- /** Wrong parameters */
- CUBEPROGRAMMER_ERROR_WRONG_PARAM = -8,
- /** Memory read failure */
- CUBEPROGRAMMER_ERROR_READ_MEM = -9,
- /** Memory write failure */
- CUBEPROGRAMMER_ERROR_WRITE_MEM = -10,
- /** Memory erase failure */
- CUBEPROGRAMMER_ERROR_ERASE_MEM = -11,
- /** File format not supported for this kind of device */
- CUBEPROGRAMMER_ERROR_UNSUPPORTED_FILE_FORMAT = -12,
- /** Refresh required **/
- CUBEPROGRAMMER_ERROR_REFRESH_REQUIRED = -13,
- /** Refresh required **/
- CUBEPROGRAMMER_ERROR_NO_SECURITY = -14,
- /** Changing frequency problem **/
- CUBEPROGRAMMER_ERROR_CHANGE_FREQ = -15,
- /* NB: Remember to update CUBEPROGRAMMER_ERROR_COUNT below. */
- /** Other error */
- CUBEPROGRAMMER_ERROR_OTHER = -99,
- };
- /* -------------------------------------------------------------------------------------------- */
- /* Bootloader Data Structures and Enumerations */
- /* -------------------------------------------------------------------------------------------- */
- /**
- * \enum usartParity
- * \brief The parity bit in the data frame of the USART communication tells the receiving device if there is any error in the data bits.
- */
- typedef enum usartParity
- {
- EVEN = 0, /**< Even parity bit. */
- ODD = 1, /**< Odd parity bit. */
- NONE = 2, /**< No check parity. */
- }usartParity;
- /**
- * \enum usartFlowControl
- * \brief UART Flow Control is a method for devices to communicate with each other over UART without the risk of losing data.
- */
- typedef enum usartFlowControl
- {
- OFF = 0, /**< No flow control. */
- HARDWARE = 1, /**< Hardware flow control : RTS/CTS. */
- SOFTWARE = 2, /**< Software flow control : Transmission is started and stopped by sending special characters. */
- }usartFlowControl;
- /**
- * \struct dfuDeviceInfo
- * \brief Get DFU device informations .
- */
- typedef struct dfuDeviceInfo
- {
- char usbIndex[10]; /**< USB index. */
- int busNumber; /**< Bus number. */
- int addressNumber; /**< Address number. */
- char productId[100]; /**< Product number. */
- char serialNumber[100]; /**< Serial number. */
- unsigned int dfuVersion; /**< DFU version. */
- }dfuDeviceInfo;
- /**
- * \struct usartConnectParameters
- * \brief Specify the USART connect parameters.
- */
- typedef struct usartConnectParameters
- {
- char portName[100]; /**< Interface identifier: COM1, COM2, /dev/ttyS0...*/
- unsigned int baudrate; /**< Speed transmission: 115200, 9600... */
- usartParity parity; /**< Parity bit: value in usartParity. */
- unsigned char dataBits; /**< Data bit: value in {6, 7, 8}. */
- float stopBits; /**< Stop bit: value in {1, 1.5, 2}. */
- usartFlowControl flowControl; /**< Flow control: value in usartFlowControl. */
- unsigned char noinitBits; /**< Set No Init bits: value in {0,1}. */
- }usartConnectParameters;
- /**
- * \struct spiConnectParameters
- * \brief Specify the SPI connect parameters.
- * \note Recommended SPI parameters : baudrate=375, crcPol=7, direction=0, cpha=0, cpol=0, crc=0, firstBit=1, frameFormat=0, dataSize=1, mode=1, nss=1, nssPulse=1, delay=1
- */
- typedef struct spiConnectParameters
- {
- uint32_t baudrate ; /**< Speed transmission 187, 375, 750, 1500, 3000, 6000, 12000 KHz. */
- uint16_t crcPol ; /**< crc polynom value. */
- int direction ; /**< 2LFullDuplex/2LRxOnly/1LRx/1LTx. */
- int cpha ; /**< 1Edge or 2Edge. */
- int cpol ; /**< LOW or HIGH. */
- int crc ; /**< DISABLE or ENABLE. */
- int firstBit ; /**< First bit: LSB or MSB. */
- int frameFormat ; /**< Frame format: Motorola or TI. */
- int dataSize ; /**< Size of frame data: 16bit or 8bit . */
- int mode ; /**< Operating mode: Slave or Master. */
- int nss ; /**< Selection: Soft or Hard. */
- int nssPulse ; /**< NSS pulse: No Pulse or Pulse. */
- int delay ; /**< Delay of few microseconds, No Delay or Delay, at least 4us delay is inserted */
- } spiConnectParameters;
- /**
- * \struct canConnectParameters
- * \brief Specify the CAN connect parameters.
- * \note Not all configurations are supported by STM32 Bootloader, such as CAN type is STANDARD and the filter should be always activated.
- * \note Recommended CAN parameters : br=125000, mode=0, ide=0, rtr=0, fifo=0, fm=0, fs=1, fe=1, fbn=0
- */
- typedef struct canConnectParameters
- {
- int br ; /**< Baudrate and speed transmission 125KHz, 250KHz, 500KHz... */
- int mode ; /**< CAN mode: NORMAL, LOOPBACK..., */
- int ide ; /**< CAN type: STANDARD or EXTENDED. */
- int rtr ; /**< Frame format: DATA or REMOTE. */
- int fifo ; /**< Memory of received messages: FIFO0 or FIFO1. */
- int fm ; /**< Filter mode: MASK or LIST. */
- int fs ; /**< Filter scale: 16 or 32. */
- int fe ; /**< Filter activation: DISABLE or ENABLE. */
- char fbn ; /**< Filter bank number: 0 to 13. */
- } canConnectParameters;
- /**
- * \struct i2cConnectParameters
- * \brief Specify the I2C connect parameters.
- * \warning The Bootloader Slave address varies depending on the device (see AN2606).
- * \note Not all configurations are supported by STM32 Bootloader, such as address in 7 bits form, analog filter: ENABLE, digital filter: DISABLE.
- * \note Recommended I2C parameters : add=0x??, br=400, sm=1, am=0, af=1, df=0, dnf=0, rt=0, ft=0
- */
- typedef struct i2cConnectParameters
- {
- int add ; /**< Device address in hex format. */
- int br ; /**< Baudrate and speed transmission : 100 or 400 KHz. */
- int sm ; /**< Speed Mode: STANDARD or FAST. */
- int am ; /**< Address Mode: 7 or 10 bits. */
- int af ; /**< Analog filter: DISABLE or ENABLE. */
- int df ; /**< Digital filter: DISABLE or ENABLE. */
- char dnf ; /**< Digital noise filter: 0 to 15. */
- int rt ; /**< Rise time: 0-1000 for STANDARD speed mode and 0-300 for FAST. */
- int ft ; /**< Fall time: 0-300 for STANDARD speed mode and 0-300 for FAST. */
- } i2cConnectParameters;
- /* -------------------------------------------------------------------------------------------- */
- /* STLINK Data Structures and Enumerations */
- /* -------------------------------------------------------------------------------------------- */
- /**
- * \enum debugResetMode
- * \brief Choose the way to apply a system reset.
- */
- typedef enum debugResetMode
- {
- SOFTWARE_RESET, /**< Apply a reset by the software. */
- HARDWARE_RESET, /**< Apply a reset by the hardware. */
- CORE_RESET /**< Apply a reset by the internal core peripheral. */
- }debugResetMode;
- /**
- * \enum debugConnectMode
- * \brief Choose the appropriate mode for connection.
- */
- typedef enum debugConnectMode
- {
- NORMAL_MODE, /**< Connect with normal mode, the target is reset then halted while the type of reset is selected using the [debugResetMode]. */
- HOTPLUG_MODE, /**< Connect with hotplug mode, this option allows the user to connect to the target without halt or reset. */
- UNDER_RESET_MODE, /**< Connect with under reset mode, option allows the user to connect to the target using a reset vector catch before executing any instruction. */
- PRE_RESET_MODE /**< Connect with pre reset mode. */
- }debugConnectMode;
- /**
- * \enum debugPort
- * \brief Select the debug port interface for connection.
- */
- typedef enum debugPort
- {
- JTAG = 0, /**< JTAG debug port. */
- SWD = 1, /**< SWD debug port. */
- }debugPort;
- /**
- * \struct frequencies
- * \brief Get supported frequencies for JTAG and SWD ineterfaces.
- */
- typedef struct frequencies
- {
- unsigned int jtagFreq[12]; /**< JTAG frequency. */
- unsigned int jtagFreqNumber; /**< Get JTAG supported frequencies. */
- unsigned int swdFreq[12]; /**< SWD frequency. */
- unsigned int swdFreqNumber; /**< Get SWD supported frequencies. */
- }frequencies;
- /**
- * \struct debugConnectParameters
- * \brief Get device characterization and specify connection parameters through ST-LINK interface.
- */
- typedef struct debugConnectParameters
- {
- debugPort dbgPort; /**< Select the type of debug interface #debugPort. */
- int index; /**< Select one of the debug ports connected. */
- char serialNumber[33]; /**< ST-LINK serial number. */
- char firmwareVersion[20]; /**< Firmware version. */
- char targetVoltage[5]; /**< Operate voltage. */
- int accessPortNumber; /**< Number of available access port. */
- int accessPort; /**< Select access port controller. */
- debugConnectMode connectionMode; /**< Select the debug CONNECT mode #debugConnectMode. */
- debugResetMode resetMode; /**< Select the debug RESET mode #debugResetMode. */
- int isOldFirmware; /**< Check Old ST-LINK firmware version. */
- frequencies freq; /**< Supported frequencies #frequencies. */
- int frequency; /**< Select specific frequency. */
- int isBridge; /**< Indicates if it's Bridge device or not. */
- int shared; /**< Select connection type, if it's shared, use ST-LINK Server. */
- }debugConnectParameters;
- /* -------------------------------------------------------------------------------------------- */
- /* General Data Structures and Enumerations */
- /* -------------------------------------------------------------------------------------------- */
- /**
- * \enum targetInterfaceType
- * \brief Indicates the supported interfaces.
- */
- typedef enum targetInterfaceType
- {
- STLINK_INTERFACE = 0, /**< STLINK used as connection interface. */
- USART_INTERFACE = 1, /**< USART used as connection interface. */
- USB_INTERFACE = 2, /**< USB DFU used as connection interface. */
- SPI_INTERFACE = 3, /**< SPI used as connection interface. */
- I2C_INTERFACE = 4, /**< I2C used as connection interface. */
- CAN_INTERFACE = 5 /**< CAN used as connection interface. */
- }targetInterfaceType;
- /**
- * \struct displayCallBacks
- * \brief Functions must be implemented to personalize the display of messages.
- */
- typedef struct displayCallBacks
- {
- void (*initProgressBar)(); /**< Add a progress bar. */
- void (*logMessage)(int msgType, const wchar_t* str); /**< Display internal messages according to verbosity level. */
- void (*loadBar)(int x, int n); /**< Display the loading of read/write process. */
- } displayCallBacks;
- typedef struct segmentData_C
- {
- int address; /**< Segment start address. */
- int size; /**< Memory segment size. */
- unsigned char* data; /**< Memory segment data. */
- }segmentData_C ;
- /**
- * \struct FileData_C
- * \brief Get file required informations.
- */
- typedef struct fileData_C
- {
- int Type; /**< File extension type. */
- int segmentsNbr; /**< Number of required segments. */
- segmentData_C* segments; /**< Segments description. */
- }fileData_C ;
- /**
- * \struct GeneralInf
- * \brief Get device general informations.
- */
- typedef struct generalInf
- {
- unsigned short deviceId; /**< Device ID. */
- int flashSize; /**< Flash memory size. */
- char type[4]; /**< Device MCU or MPU. */
- char cpu[20]; /**< Cortex CPU. */
- char name[100]; /**< Device name. */
- char series[100]; /**< Device serie. */
- char description[100]; /**< Take notice. */
- }generalInf ;
- /* -------------------------------------------------------------------------------------------- */
- /* Loaders Data Structures */
- /* -------------------------------------------------------------------------------------------- */
- /**
- * \struct deviceSector
- * \brief Get device sectors basic informations.
- */
- typedef struct deviceSector
- {
- uint32_t sectorNum; /**< Number of Sectors. */
- uint32_t sectorSize; /**< Sector Size in BYTEs. */
- }deviceSector;
- /**
- * \struct externalLoader
- * \brief Get external Loader parameters to launch the process of programming an external flash memory.
- */
- typedef struct externalLoader{
- char filePath[200]; /**< FlashLoader file path. */
- char deviceName[100]; /**< Device Name and Description. */
- int deviceType; /**< Device Type: ONCHIP, EXT8BIT, EXT16BIT, ... */
- uint32_t deviceStartAddress; /**< Default Device Start Address. */
- uint32_t deviceSize; /**< Total Size of Device. */
- uint32_t pageSize; /**< Programming Page Size. */
- // unsigned char EraseValue; /**< Content of Erased Memory. */
- uint32_t sectorsTypeNbr; /**< Type number. */
- deviceSector* sectors; /**< Device sectors. */
- }externalLoader;
- /**
- * \struct externalStorageInfo
- * \brief Get external storage informations useful for external Loader.
- */
- typedef struct externalStorageInfo
- {
- unsigned int externalLoaderNbr;
- externalLoader* externalLoader;
- }externalStorageInfo;
- /* -------------------------------------------------------------------------------------------- */
- /* STLINK functions */
- /* -------------------------------------------------------------------------------------------- */
- /*! \addtogroup STLINK
- * STLINK module groups debug ports JTAG/SWD functions together.
- * @{
- */
- /**
- * \brief This routine allows to get ST-LINK conneted probe(s).
- * \param stLinkList : Filled with the connected ST-LINK list and its default configurations.
- * \param shared : Enable shared mode allowing connection of two or more instances to the same ST-LINK probe.
- * \return Number of the ST-LINK probes already exists.
- * \warning The Share option is useful only with ST-LINK Server.
- * \note At the end of usage, #deleteInterfaceList must have been called.
- */
- int getStLinkList(debugConnectParameters** stLinkList, int shared);
- /**
- * \brief This routine allows to start connection to device through SWD or JTAG interfaces.
- * \param debugParameters : Indicates customized configuration for ST-LINK connection,
- * It is recommended to check [debugConnectParameters] fields before connection.
- * \return 0 if the connection successfully established, otherwise an error occurred.
- */
- int connectStLink(debugConnectParameters debugParameters);
- /**
- * \brief This routine used to apply a target reset.
- * \note Reset operation is only available with JTAG/SWD debug interface.
- * \param rstMode : Indicates the reset type Soft/Hard/Core #debugResetMode. \n
- * \return 0 if the reset operation finished successfully, otherwise an error occurred.
- */
- int reset(debugResetMode rstMode) ;
- /*! @} */
- /* -------------------------------------------------------------------------------------------- */
- /* Bootloader functions */
- /* -------------------------------------------------------------------------------------------- */
- /*! \addtogroup Bootloader
- * Bootloader module is a way to group Serial interfaces USB/UART/SPI/I2C/CAN functions together.
- * @{
- */
- /**
- * \brief This routine allows to get connected serial ports.
- * \param usartList : Receive serial ports list and its default configurations.
- * \return Number of serial ports already connected.
- * \note At the end of usage, #deleteInterfaceList must have been called.
- */
- int getUsartList(usartConnectParameters** usartList);
- /**
- * \brief This routine allows to start connection to device through USART interface.
- * \param usartParameters : Indicates customized configuration for USART connection.
- * \return 0 if the connection successfully established, otherwise an error occurred.
- */
- int connectUsartBootloader(usartConnectParameters usartParameters);
- /**
- * \brief This routine allows to send a single byte through the USART interface.
- * \param byte : The data to be written
- * \return 0 if the sending operation correctly achieved, otherwise an error occurred.
- */
- int sendByteUart(int byte);
- /**
- * \brief This routine allows to get connected DFU devices.
- * \param dfuList : Receive DFU devices list and its default configurations.
- * \return Number of DFU devices already connected.
- * \note At the end of usage, #deleteInterfaceList must have been called.
- */
- int getDfuDeviceList(dfuDeviceInfo** dfuList);
- /**
- * \brief This routine allows to start connection to device through USB DFU interface.
- * \param usbIndex : Indicates the index of DFU ports already connected.
- * \return 0 if the connection successfully established, otherwise an error occurred.
- */
- int connectDfuBootloader(char* usbIndex);
- /**
- * \brief This routine allows to start connection to device through SPI interface.
- * \param spiParameters : Indicates customized configuration for SPI connection
- * \return 0 if the connection successfully established, otherwise an error occurred.
- */
- int connectSpiBootloader(spiConnectParameters spiParameters);
- /**
- * \brief This routine allows to start connection to device through CAN interface.
- * \param canParameters : Indicates customized configuration for CAN connection
- * \return 0 if the connection successfully established, otherwise an error occurred.
- * \warning To have CAN full support, you must have St-Link firmware version at least v3JxMxB2.
- */
- int connectCanBootloader(canConnectParameters canParameters);
- /**
- * \brief This routine allows to start connection to device through I2C interface.
- * \param i2cParameters : Indicates customized configuration for I2C connection
- * \return 0 if the connection successfully established, otherwise an error occurred.
- */
- int connectI2cBootloader(i2cConnectParameters i2cParameters);
- /*! @} */
- /* -------------------------------------------------------------------------------------------- */
- /* General purposes functions */
- /* -------------------------------------------------------------------------------------------- */
- /*! \addtogroup General
- * General module groups general purposes functions used by any interface.
- * @{
- */
- /**
- * \brief This routine allows to choose your custom display.
- * \param c : Fill the struct to customize the display tool.
- * \note This function must be called first of all to ensure the display management.
- */
- void setDisplayCallbacks(displayCallBacks c);
- /**
- * \brief This routine allows to choose the verbosity level for display.
- * \param level : Indicates the verbosity number 0, 1 or 3.
- */
- void setVerbosityLevel(int level);
- /**
- * \brief This routine allows to check connection status [maintained or lost].
- * \return 1 if the device is already connected, otherwise the connection to device is lost.
- */
- int checkDeviceConnection();
- /**
- * \brief This routine allows to get general device informations.
- * \return Structure #GeneralInf in which the informations are stored.
- */
- generalInf* getDeviceGeneralInf();
- /**
- * \brief This routine allows to receive memory data on the used interface with the configration already initialized.
- * \param address : The address to start reading from.
- * \param data : Pointer to the data buffer.
- * \param size : It indicates the size for read data.
- * \return 0 if the reading operation correctly finished, otherwise an error occurred.
- * \warning Unlike ST-LINK interface, the Bootloader interface can access only to some specific memory regions.
- */
- int readMemory(unsigned int address, unsigned char** data, unsigned int size);
- /**
- * \brief This routine allows to write memory data on the user interface with the configration already initialized.
- * \param address : The address to start writing from.
- * \param data : Pointer to the data buffer.
- * \param size : It indicates the size for write data.
- * \return 0 if the writing operation correctly finished, otherwise an error occurred.
- * \warning Unlike ST-LINK interface, the Bootloader interface can access only to some specific memory regions.
- */
- int writeMemory(unsigned int address, char* data, unsigned int size);
- /**
- * \brief This routine allows to download data from a file to the memory.
- * File formats that are supported : hex, bin, srec
- * \param filePath : Indicates the full path of the considered file.
- * \param address : The address to start downloading from.
- * \param skipErase : In case to win in term time and if we have a blank device, we can skip erasing memory before programming [skipErase=0].
- * \param verify : To add verification step after downloading.
- * \param binPath : Path of the binary file.
- * \return 0 if the downloading operation correctly finished, otherwise an error occurred.
- */
- int downloadFile(const wchar_t* filePath, unsigned int address, unsigned int skipErase, unsigned int verify, const wchar_t* binPath);
- /**
- * \brief This routine allows to run the application.
- * \param address : The address to start executing from.
- * In most cases, the program will run from the Flash memory starting from 0x08000000.
- * \return 0 if the execution correctly started, otherwise an error occurred.
- */
- int execute(unsigned int address);
- /*!
- * \brief This routine allows to erase the whole Flash memory.
- * \return 0 if the operation finished successfully, otherwise an error was occurred.
- * \note Depending on the device, this routine can take a particular period of time.
- */
- int massErase();
- /**
- * \brief This routine allows to erase specific sectors of the Flash memory.
- * \param sectors : Indicates the indexs of the specific sectors to be erased.
- * \param sectorNbr : The number of chosen sectors.
- * \return 0 if the operation finished successfully, otherwise an error occurred.
- * \note Each circuit has a specific number of Flash memory sectors.
- */
- int sectorErase(unsigned int sectors[],unsigned int sectorNbr);
- /**
- * \brief This routine allows to disable the readout protection.
- * If the memory is not protected, a message appears to indicate that the device is not
- * under Readout protection and the command has no effects.
- * \return 0 if the disabling correctly accomplished, otherwise an error occurred.
- * \note Depending on the device used, this routine take a specific time.
- */
- int readUnprotect();
- /**
- * \brief This routine allows to know the interface what is in use.
- * \return The target interface type #targetInterfaceType, otherwise -1.
- */
- int getTargetInterfaceType();
- /**
- * \brief This routine allows to drop the current read/write operation.
- * \return 0 if there is no call for stop operation, otherwise 1.
- */
- volatile int* getCancelPointer();
- /**
- * \brief This routine allows to open and get data from any supported file extension.
- * \param filePath : Indicates the full path of the considered file.
- * \return Pointer to #fileData_C if the file has hex, bin, srec or elf as extension, otherwise a null pointer to indicate that the file type is not supported.
- */
- void *fileOpen(const wchar_t* filePath);
- /**
- * \brief This routine allows to clean up the handled file data.
- * \param data
- */
- void freeFileData(fileData_C* data);
- /**
- * \brief This routine allows to verfiy if the indicated file data is identical to Flash memory content.
- * \param fileData : Input file name.
- * \param address : The address to start verifying from, it's considered only if the file has .bin or .binary as extension.
- * \return 0 if the file data matching Flash memory content, otherwise an error occurred or the data is mismatched.
- */
- int verify(fileData_C* fileData, unsigned int address);
- /**
- * \brief This routine allows to save the data file content to another file.
- * \param fileData : Input file name.
- * \param sFileName : Output file name.
- * \return 0 if the output file was created successfully, otherwise an error occurred.
- */
- int saveFileToFile(fileData_C *fileData, const wchar_t* sFileName);
- /**
- * \brief This routine allows to save Flash memory content to file.
- * \param address : The address to start saving from.
- * \param size : Data size to be saved.
- * \param sFileName : Indicates the file name.
- * \return 0 if the data copy was acheived successfully, otherwise an error occurred.
- * \note The file name must finish with an extension ".hex", ".bin" or ".srec"
- */
- int saveMemoryToFile(int address, int size, const wchar_t* sFileName);
- /**
- * \brief This routine allows to clean up and disconnect the current connected target.
- * \note This routine disconnect the target and delete the loaded Flash Loaders.
- */
- void disconnect();
- /**
- * \brief This routine allows to clear the list of each created interface.
- * \note The list is filled by #getStlinkList, #getDfuDeviceList or #getUsartList.
- */
- void deleteInterfaceList();
- /**
- * \brief This routine allows to enter and make an automatic process for memory management through JTAG/SWD, UART, DFU, SPI, CAN and I²C interfaces.
- * \param filePath : Indicates the full file path.
- * \param address : The address to start downloading from.
- * \param skipErase : If we have a blank device, we can skip erasing memory before programming [skipErase=0].
- * \param verify : Add verification step after downloading.
- * \param isMassErase : Erase the whole Flash memory.
- * \param obCommand : Indicates the option bytes commands to be loaded "-ob [optionbyte=value] [optionbyte=value]..."
- * \param run : Start the application.
- * \warning Connection to target must be established before performing automatic mode.
- */
- void automaticMode(const wchar_t* filePath, unsigned int address, unsigned int skipErase, unsigned int verify, int isMassErase, char* obCommand, int run);
- /*! @} */
- /* -------------------------------------------------------------------------------------------- */
- /* Option Bytes functions */
- /* -------------------------------------------------------------------------------------------- */
- /*! \addtogroup OB
- * OB module groups option bytes functions used by any interface.
- * @{
- */
- /**
- * \brief This routine allows program the given Option Byte.
- * The option bytes are configured by the end user depending on the application requirements.
- * \param command : Indicates the command to execute.
- * \return 0 if the programming Option Byte correctly executed, otherwise an error occurred.
- * \note The command must written as: -ob [optionbyte=value] [optionbyte=value] ...
- * \code
- * int ob = sendOptionBytesCmd("–ob rdp=0x0 BOR_LEV=0");
- * \endcode
- */
- int sendOptionBytesCmd(char* command);
- /**
- * \brief This routine allows to get option bytes values of the connected target.
- * \return Structure #Peripheral_C in which the option bytes descriptions are stored.
- */
- peripheral_C* initOptionBytesInterface();
- /*! @} */
- /* -------------------------------------------------------------------------------------------- */
- /* Loaders functions */
- /* -------------------------------------------------------------------------------------------- */
- /*! \addtogroup Loaders
- * Loaders module groups loaders functions.
- * @{
- */
- /**
- * \brief This routine allows to specify the location of Flash Loader.
- * \param path : Indicates the full path of the considered folder.
- */
- void setLoadersPath(const char* path);
- /**
- * \brief This routine allows to specify the path of the external Loaders to be loaded.
- * \param path : Indicates the full path of the folder containing external Loaders.
- * \param externalLoaderInfo : Structure in which the external Loaders informations are stored.
- */
- void setExternalLoaderPath(const char* path, externalLoader** externalLoaderInfo);
- /**
- * \brief This routine allows to get available external Loaders in th mentioned path.
- * \param path : Indicates the full path of the external Loader file ready for loading.
- * \param externalStorageNfo : Structure in which we get storage information.
- * \return 1 if the External loaders cannot be loaded from the path, otherwise 0.
- * \warning All external Loader files should have the extension "stldr".
- */
- int getExternalLoaders(const char* path, externalStorageInfo** externalStorageNfo);
- /**
- * \brief This routine allows to unload an external Loaders.
- * \param path : Indicates the full path of the external Loader file ready for unloading.
- */
- void removeExternalLoader(const char* path);
- /**
- * \brief This routine allows to delete all target Flash Loaders.
- */
- void deleteLoaders();
- /*! @} */
- #ifdef __cplusplus
- }
- #endif
- #endif // CUBEPROGRAMMER_API_H
|