如题,请问使用MSP-Gang.dll进行下载时,如何配置Secure Device?需要使用哪个指令?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
关于Secure Device您可以看一下

的 2.1.6 Secure Device Setup and Memory Protection 以及第4章内dll文件的描述
在MSP-GANG.h内可以查看相关的定义
#define SECURE_DEV_EN 0xA9
具体文件如下
/*
* Copyright (c) 2003 - 2015 Texas Instruments Incorporated
*
* All rights reserved not granted herein.
* Limited License.
*
* Texas Instruments Incorporated grants a world-wide, royalty-free,
* non-exclusive license under copyrights and patents it now or hereafter
* owns or controls to make, have made, use, import, offer to sell and sell ("Utilize")
* this software subject to the terms herein. With respect to the foregoing patent
*license, such license is granted solely to the extent that any such patent is necessary
* to Utilize the software alone. The patent license shall not apply to any combinations which
* include this software, other than combinations with devices manufactured by or for TI ("TI Devices").
* No hardware patent is licensed hereunder.
*
* Redistributions must preserve existing copyright notices and reproduce this license (including the
* above copyright notice and the disclaimer and (if applicable) source code license limitations below)
* in the documentation and/or other materials provided with the distribution
*
* Redistribution and use in binary form, without modification, are permitted provided that the following
* conditions are met:
*
* * No reverse engineering, decompilation, or disassembly of this software is permitted with respect
* to any software provided in binary form.
* * any redistribution and use are licensed by TI for use only with TI Devices.
* * Nothing shall obligate TI to provide you with source code for the software licensed and provided
* to you in object code.
* If software source code is provided to you, modification and redistribution of the source code are permitted
* provided that the following conditions are met:
*
* * any redistribution and use of the source code, including any resulting derivative works, are licensed by
* TI for use only with TI Devices.
* * any redistribution and use of any object code compiled from the source code and any resulting derivative
* works, are licensed by TI for use only with TI Devices.
*
* Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or
* promote products derived from this software without specific prior written permission.
*
* DISCLAIMER.
*
* THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
//*****************************************************************
/*========================================================================*\
| |
| MSP-GANG.h |
| |
| Definitions for MSP-GANG.DLL |
|--------------------------------------------------------------------------|
| Project: MSP-GANG Programmer |
| Developed using: MS Visual Studio C++ 8.0 (2005) |
|--------------------------------------------------------------------------|
| Author: GCZA |
| Version: 1.00 |
| Initial Version: 10/2010 |
|--------------------------------------------------------------------------|
| Version history: |
| 1.0.0.0 10/2010 GCZA Initial Version |
| 1.0.3.0 09/2011 GCZA Release version |
| 1.0.8.0 05/2012 GCZA Release version |
| 1.1.3.0 15/2013 GCZA Release version |
|--------------------------------------------------------------------------|
| Designed 2010 by Elprotronic Canada |
\*========================================================================*/
/*------------------------------------------------------------------------*\
| Remarks: |
| |
\*------------------------------------------------------------------------*/
#pragma once
#define GUI_SW_PN "MSP-Gang-GUI"
#define GUI_SW_REV "G430: 01.03.01.00"
#define GUI_SW_DATE "Feb.22.2019"
#define DLL_ID 0xD430 //DLL for MSP-GANG
#define DLL_REV 0x01030100 //rev 1.03.01.00
#define DLL_REL_DATE "Feb.22.2019"
#define DLL_NAME "MSP-Gang-DLL"
#define IMAGE_TYPE_MSPGANG_ID 0xA430
#define IMAGE_TYPE_MSPGANG_ID_REV 0x0100
// 123456789abcde
#define IMAGE_TYPE_MSPGANG_ID_TXT "MSP-GANG" //do not modify TYPE description, as long as type is the same
#define LABEL_SIZE_IN_BYTES 256
// Error Codes reported by MSP-GANG.DLL and MSP-GANG programmer's firmware functions
#define ERR_NONE 0 // Operation successful *** must be the first entry ***
// errors reported by MSP-GANG adapter
// -errors 1..9 - reserved for BOOT errors
//
#define ERR_NO_FIRMWARE 1
#define ERR_FW_NO_CRC 2
#define ERR_FW_CRC_ERR 3
#define ERR_BOOT_CRC_ERR 4
// -errors 1..9 - reserved for BOOT errors
#define ERR_ACCESS_KEY_CRC 10
#define ERR_INVALID_ACCESS_KEY 11
#define ERR_UNKNOWN_INTERFACE 12
#define ERR_VCC_TOO_LOW 13
#define ERR_VCC_TOO_HIGH 14
#define ERR_VTIO_TOO_LOW 15
#define ERR_VTIO_TOO_HIGH 16
#define ERR_HEADER_PSA 17
#define ERR_SCRIPT_PSA 18
#define ERR_EXCEED_SCRIPT_NO 19
#define ERR_UNKNOWN_SCRIPT_CMD 20
#define ERR_FETCH_SYNCH 21
#define ERR_CPU_JTAG_SYNCH 22
#define ERR_TARGET_DEV_INIT_ERR 23
#define ERR_RAM_FW_DOWNLOAD 24
#define ERR_BLANK_CHECK 25
#define ERR_RD_VERIFY 26
#define ERR_FLASH_WRITE 27
#define ERR_FLASH_WR_INIT 28
#define ERR_FLASH_BP_LOCKED 29
#define ERR_INVALID_SCRIPT_TYPE 30
#define ERR_SIZE_TOO_HIGH 31
#define ERR_TARGET_DEV_ID_ERR 32
#define ERR_TARGET_IR_INTERRUPTED 33
#define ERR_WRONG_INFO_PAGE 34
#define ERR_ADDR_TOO_HIGH 35
#define ERR_INVALID_TARGET_NO 36
#define ERR_ADDRESS_NOT_EVEN 37
#define ERR_SIZE_NOT_EVEN 38
#define ERR_DCO_FREQ_OUT_OF_RANGE 39
#define ERR_DCO_CALIBRATION_FAILED 40
#define ERR_GANG_FLASH_WRITE 41
#define ERR_SD_READ_INVALID_RESPONSE 42
#define ERR_SD_BOUNDARY_ADDRESS 43
#define ERR_SD_INIT_TIMEOUT 44
#define ERR_SD_READ_TIMEOUT 45
#define ERR_SD_INIT 46
#define ERR_SD_CRC7 47
#define ERR_SD_CRC16 48
#define ERR_SD_WRITE_CRC 49
#define ERR_SD_DATA_WRITE 50
#define ERR_SD_WRITE_TIMEOUT 51
#define ERR_SD_READ_MBR 52
#define ERR_SD_VOLUME 53
#define ERR_ADDR_IN_FILE 54
#define ERR_READ_FILE 55
#define ERR_FILE_NOT_FOUND 56
#define ERR_NOT_SUPPORTED_REV0 57
#define ERR_VERIFY 58
#define ERR_INTERACTIVE_RX_DATA 59
#define ERR_SECURE_VPP_TOO_LOW 60
#define ERR_SECURE_KEY 61
#define ERR_SECURE_DEVICE 62
#define ERR_TARGET_NOT_OPEN 63
#define ERR_WRONG_INDEX 64
#define ERR_BSL_RX_TIMEOUT 65
#define ERR_FBSL_FW_LOAD 66
#define ERR_WRONG_COMMAND 67
#define ERR_FBSL_INIT 68
#define ERR_TOTAL_CURRENT_OVERLOAD 69
#define ERR_WRONG_BSL_PASSWORD 70
#define ERR_NOT_SUPPORTED_BY_BSL 71
#define ERR_CLR_LOCKED_MCU 72
#define TASK_IN_PROGRESS 0xB0
//errors from MSP-GANG DLL
#define ERR_COMM_START 301
#define ERR_COMM 301 // Communication - Frame has errors
#define ERR_OPEN_COMM 302 // Unable to open COM port - already in use?
#define ERR_CLOSE_COMM 303 // Unable to close COM port
#define ERR_SET_COMM_STATE 304 // Unable to modify COM port state
#define ERR_SYNC 305 // Synchronization failed. Programmer connected?
#define ERR_RX_HDR_TIMEOUT 306 // Timeout during operation - Correct COM port selected?
#define ERR_WRONG_BAUDRATE 307 // Wrong baud rate specified
#define ERR_COMM_BAUDRATE_CHANGE 308 // Comm port baud rate change error
#define ERR_COMM_DIAGNOSTIC_RESPONSE 309 // Comm port - diagnostic response error
#define ERR_OPEN_COMM_INVALID_HANDLE 310 // Open Comm port - invalid handle va;ue
#define ERR_OPEN_SETUP_COMM 311 // Invalid Comm Port Setup
#define ERR_OPEN_COMM_TIMEOUT 312 // Open Comm Port timeout
#define ERR_GET_COMM_STATE 313 // Get Comm Port state error
//from 301-320 - communication errors that can reinitialize communication in GUI
#define ERR_COMM_END 320
// Error Codes reported additionally by GangGetResult() function
#define ERR_CMD_NOT_COMPLETED 321 // Command did not complete correctly
#define ERR_CMD_FAILED 322 // Command failed, is not defined, or is not allowed
#define ERR_READ_INI 323 // Could not read default.mspgangcfg
#define ERR_BAD_RECORD 324 // File contains invalid record
#define ERR_FILE_END 325 // Unexpected end of file
#define ERR_FILE_IO 326 // Error during file I/O
#define ERR_FILE_DETECT 327 // Selected file is of unrecognizable format
#define ERR_FILE_OPEN 328 // Unable to open file
#define ERR_ARGUMENT 329 // Function argument(s) out of range
#define NOTE_BOOT_DOWNLOADED 330 // Note: Boot downloaded
#define ERR_BUSY_USED_POLLING 331 // Temporary function blocked, due to used main polling
#define ERR_IMAGE_CORRUPTED 332 // Image Memory corrupted or erased
#define ERR_TARGET_NOACCESS 333 // Target not accessible
#define ERR_VERIFY_FAILED 334 // Verification failed
#define ERR_NO_PARMS 335 // Main Process Parameters not yet set
#define ERR_IMAGE_ERASE 336 // Could not erase Image Buffer
#define ERR_IMAGE_LOAD 337 // Could not load Image Buffer
#define ERR_PARMS_LOAD 338 // Could not load Main Process Parameters
#define ERR_SEL_BAUDRATE 339 // Could not select Baud Rate
#define ERR_SET_VCC 340 // Could not set target voltage - Short circuitry or settling time too small
#define ERR_WRONG_CMD 341 // Invalid firmware command
#define ERR_POWER_SUPPLY 342 // Power supply voltage too low
#define ERR_EXT_VCC_IN 343 // Sense voltage out of range - Check pin MSP_VCC_IN of target connector
#define ERR_WRONG_DEVICE 344 // Wrong target device connected (the ID of device dosn't match)
#define ERR_NO_DEVICE 345 // No target device connected to MSP-GANG
#define ERR_IMAGE_OVERWRITTEN 346 // Code data saved to already used location (overwritten)
#define ERR_IMAGE_NO 347
#define ERR_CFG_FILE_OPEN_ERR 348 //Config file open error
#define ERR_SCRIPT_HEADER_SIZE_ERR 349
#define ERR_IMAGE_ID 350
#define ERR_IMAGE_CONTENTS 351
#define ERR_IMAGE_VERIFICATION 352
#define ERR_CODE_OVERWRITTEN 353
#define ERR_CODE_FILE_CONTENTS 354
#define ERR_OPEN_FILE 355
#define ERR_FILE_NAME 356
#define ERR_IMAGE_FILE_PASSWORD 357
#define ERR_IMAGE_FILE_PCHW 358
#define ERR_IMAGE_FILE_ID 359
#define ERR_IMAGE_FILE_CS 360
#define ERR_IMAGE_FILE_HEADER 361
#define ERR_IMAGE_FILE_NOT_MSPGANG 362
#define ERR_IMAGE_FILE_CONTENTS 363
#define ERR_IMAGE_FILE_MODE 364
#define ERR_IMAGE_FILE_OFFSET 365
#define ERR_IMAGE_FILE_HEX 366
#define ERR_IMAGE_FILE_CORRUPTED 367
#define ERR_IMAGE_FILE_UNLOCK 368
#define ERR_CUSTOMIZED_MCU_LICENSE_FILE_OPEN 369
#define ERR_BSL_CODE_WITHIN_BSL_DISABLED 370
#define ERR_INFO_PAGE_OUT_OF_RANGE 371
#define ERR_COM_PORT_SCAN_SIZE 372
#define ERR_SELFTEST_SIZE 373
#define ERR_DATA_SIZE_TOO_HIGH 374
#define ERR_DATA_SIZE_TOO_LOW 375
#define ERR_SIZE_DEFINITION 376
#define ERR_GANG_MASK_ZERO 377
#define ERR_ADDRESS_DEFINITION 378
#define ERR_DATA_SIZE_ZERO 379
#define ERR_DCO_NO_OUT_OF_RANGE 380
#define ERR_CODE_NOT_IMPLEMENTED 381
#define ERR_TARGET_NO 382
#define ERR_CODE_FILE_ERR 383
#define ERR_PASSWORD_FILE_ERR 384
#define ERR_NOTHING_TO_PROGRAM 385
#define ERR_CODE_OUT_OF_RANGE 386
#define ERR_INVALID_NAME_INDEX 387
#define ERR_IGNORED_PART_OF_THE_CODE 388
#define ERR_SCRIPT_SIZE_TOO_HIGH 389
#define ERR_BSL_NOT_SUPPORTED 390
#define ERR_IMAGE_DATA_TOO_HIGH 391
#define ERR_TERMINATED_BY_USER 392
#define ERR_CODE_WITHIN_RETAIN_DATA_SPACE 393
#define ERR_NO_OF_TASKS_OUT_OF_RANGE 394
#define ERR_TASK_DATA_SIZE_OUT_OF_RANGE 395
#define ERR_CODE_OUT_OF_SPACE 396
#define ERR_NOT_SUPPORTED_FOR_SELECTED_MCU 397
#define ERR_DESTINATION_DEF 398
#define ERR_LOCKING_OPTIONS_OUT_OF_SPACE 399
#define ERR_EMPTY_DATA 400
#define ERR_INVALID_PARAMETER 401
#define ERR_IMAGE_READONLY 402
#define ERR_CODE_WITHIN_SN_DATA_SPACE 403
#define ERR_SIZE_SN_NUMBER 404
#define ERR_NOT_DATA_IN_SN 405
#define ERR_SN_ADDR_SIZE_DEFINITION 406
#define ERR_CODE_WITHIN_MPU_IPE 407
#define ERR_EXTERNAL_POWER_RQ 408
#define ERR_INVALID_NUMBER 999
// Filetypes
#define FILETYPE_AUTO 0 // filetype auto detect (obsolete)
#define FILETYPE_TI_TXT 1 // filetype ti text
#define FILETYPE_INTEL_HEX 2 // filetype intel hex
#define SECURE_EN_KEY1 0xA951
#define SECURE_EN_KEY2 0xA639
// Remote Command definitions for MSP-GANG
// == commands used in the BOOT - do not use these opcodes
//#define C_NOCOMMAND 0 // Not a command
#define C_CR 0x0D // "Hello" commands (two bytes -> ">\r" without CS )
#define C_BOOTCMDDIS 0x2A // Disable boot commands
#define C_BOOTCMDEN 0x2B // Enable boot commands
#define C_DIAGNOSTIC 0x32 // Send errors to Host
#define C_SELECTBAUD 0x38 // Select one of five baud rates
#define C_ERASEFIRM 0x39 // Erase Firmware in master
#define C_LOADFIRM 0x3A // Update Firmware in master
#define C_EXITUPDATE 0x3B // Write ID, exit generic handler, go to firmware handler
#define C_GET_LABEL_A 0x40 // set gang communication status(release etc)
#define C_GET_PROGRESS_STATUS 0xA5 //
#define PROGRESS_STATUS_SIZE 48
// == End of commands used in the BOOT - =======================
#define C_START 0x31 // Command Start: Executes main process
#define C_ERASEIMAGE 0x33 // Erase image memory
// all commands 0x40 and over
// even - short address A1, A2
// odd - long address A1, A2, A3, A4
#define C_GET_INFO_MEMORY 0x41 // get preferable setup saved in Info-D
#define C_WRITE_INFO_MEMORY 0x42
#define C_LOADIMAGE 0x43 // must be odd opcode - Load target code into image memory
#define C_ACCESS_KEY_ST 0x44
#define C_VERIFY_IMAGE_PSA 0x45 // Verify PSA in the SFlash
#define C_INTERACTIVE_TASK 0x46
//response message type with the C_INTERACTIVE_TASK
#define READ_MEMORY_TYPE 0x10
#define PROGRESS_STATUS_TYPE 0xA5 // the same as C_GET_PROGRESS_STATUS 0xA5
#define WAITING_TYPE 0x15
#define C_READ_IMAGE_HEADER 0x47 // Read data from Image (SFlash)
#define C_BOOT_UPDATE 0x48
#define C_READ_GANG_BUFFER 0x49
#define C_WRITE_GANG_BUFFER 0x4A
#define C_DISABLE_API_INT 0x4C
#define C_SET_IO_STATE 0x4E
#define C_SELECTIMAGE 0x50 // Select program image: 0..15
#define C_DISPLAY_MESAGE 0x54 // display text or graphics on the screen
#define DISPLAY_TEXT 0xA000
#define DISPLAY_INV_TEXT 0xA200
#define DISPLAY_GRAPHICS 0x5000
#define DISPLAY_INV_GRAPHICS 0x5200
#define C_SET_TMP_GANG_CFG 0x56
#define C_GET_APPL_GANG_STATUS 0x58
#define C_REMOTE_SELFTEST 0x71 // Production test sequence
//============= End of Remote Command definitions for MSP-GANG ================
// Flag definitions for affected memory ranges
#define F_DATA_IN_RAM 0x01 // data in ram area
#define F_DATA_IN_MAIN 0x02 // data in main area
#define F_DATA_IN_INFO 0x04 // data in info area
#define NO_OF_ACTIVE_IMAGES (12*8)
#define TARGET_VCC_MIN 1800 //Vcc in mV - min 1.8 V
#define TARGET_VCC_MAX 3600 //Vcc in mV - max 3.6 V
#define TARGET_VCC_STEP 100 //Vcc in mV - step 0.1 V
#define TARGET_VCC_SETTLE_TIME_MAX 4000 //max 4000 ms
#define TARGET_VCC_SETTLE_TIME_STEP 20 //step 20 ms
//-----------------------------------------------------------------------------
#define IMAGE_HEADER_SIZE 256
#define DATA_ACK 0x90 // Acknowledge: command executed successfully
#define DATA_NAK 0xA0 // Not Acknowledge: something was wrong
#define DATA_INPROGRESS 0xB0 //TASK_IN_PROGRESS->0xB0 Ack - command accepted - and is in progress
#define DATA_PROMPT 0x3E // '>' Prompt - start char - in the new protocol
#define CMD_FAILED 0x70
#define DATA_FRAME 0x80
#define MAX_COM_NO 256
#define MAX_COM_SPEED_INDEX 5
#define SECURE_DEV_EN 0xA9
#define GANG_SIZE 8
#define INFO_CALDATA_SIZE 0x8
#define INFO_CALDATA_ADDR 0x10F8
//====================================================================
// Flash definition
//====================================================================
// ------ Flash Size definition --------------
#define FLASH_SEGM_SIZE 0x200
#define FLASH_PRG_START_ADDR 0x1100
#define FLASH_START_ADDR 0x1000
#define FLASH_NO_OF_BSL_SEGMENTS 4 //F5xx - 4 BSL segments
#define FLASH_NO_OF_SEGMENTS (FLASH_BUF_LEN/FLASH_SEGM_SIZE) //F5xx - max 512 kB
#define MAX_FLASH_NO_OF_INFO_SEGM 4
#define FLASH_NO_OF_ALL_SEGMENTS (FLASH_NO_OF_BSL_SEGMENTS + FLASH_NO_OF_SEGMENTS + MAX_FLASH_NO_OF_INFO_SEGM)
#define JTAG_PASSW_ADDRESS 0xFF80
#define BSL_PASSW_ADDRESS 0xFFE0
#define BSL_ENH_ADDRESS 0xFFDE
#define XBSL_ENH_ADDRESS 0xFFBE
#define BSL_ENH_NOT_ERASE_CODE 0x0000
#define BSL_ENH_BSL_DISABLED_CODE 0xAA55
#define BSL_ENH_ERASE_CODE 0xFFFF
#define PROC_NAME_LEN 23
#define JTAG_DEF_LEN 10
#define PROC_GROUP_LEN 16
#define BSL_X2V_SEGM_MASK 0xF
#define MAX_FILE_NAME 512
#define ONE_IMAGE_BLOCK_SIZE 0x10000 // 64 kB
//========================================================
// JTAG fuse restore in the MSP430Xv2 (F5xx, F6xx...)
// ----- procedure via Fast BSL only -----
//========================================================
#define BSL3_SEGMENT_ADDR_MIN 0x1600
#define BSL3_SEGMENT_SIZE 0x200
#define FUSE_XV2_ADDR 0x17FC //fuse address
#define SYSBSLC 0x0182 // Boot strap configuration area register
#define SYSBSLOFF 0x4000 // SYS - BSL Memory disabled
#define SYSBSLPE 0x8000 // SYS - BSL Memory protection enabled
//====================================================================
// MSP432
//====================================================================
#define ARM_BSL_PASSW_ADDRESS 0x0000
//==================================================================================
//--------- DLL functions ----------------------------------------------------------
//==================================================================================
//==============================================================
// Indexes below used in
// LONG WINAPI MSPGANG_SetConfig( LONG index, LONG data );
// LONG WINAPI MSPGANG_GetConfig( LONG index );
//==============================================================
LONG WINAPI MSPGANG_SetConfig( LONG index, LONG data );
LONG WINAPI MSPGANG_GetConfig( LONG index );
//list of indexes and acceptable data
#define FROMIMAGE_BIT 0x1000
#define CFG_INTERFACE 0
#define INTERFACE_NONE 0
#define INTERFACE_JTAG 4
#define INTERFACE_SBW 8
#define INTERFACE_BSL 0xC
#define INTERFACE_TYPE_MAX_INDEX INTERFACE_BSL
#define CFG_JTAG_SPEED 1
#define INTERFACE_FAST 0
#define INTERFACE_MED 1
#define INTERFACE_SLOW 2
#define INTERFACE_SPEED_MAX_INDEX INTERFACE_SLOW
#define CFG_SBW_SPEED 2
// INTERFACE_FAST 0
// INTERFACE_MED 1
// INTERFACE_SLOW 2
#define CFG_BSL_SPEED 3
// INTERFACE_FAST 0
// INTERFACE_MED 1
// INTERFACE_SLOW 2
#define CFG_IO_INTERFACE 4
#define SBW_VIA_TDOI_BIT 0x00
#define SBW_VIA_RST_BIT 0x01
// 0 - SBW_VIA_TDOI (pin 1) and TCK/TEST (pin-7/8)
// 1 - SBW_VIA_RST (pin 11) and TCK/TEST (pin-7/8)
#define CFG_POWERTARGETEN 6
#define EXTERNAL_POWER_WHOLE_RANGE 0 // external power supply - whole range from Vccmin to Vccmax
#define POWER_SUPPLIED_BY_MSPGANG 1 // targets supplied by MSP-GANG
#define EXTERNAL_POWER_IN_RANGE 2 // external power supply - verified range - selected Vcc +/- 0.3V
#define CFG_VCCINDEX 7
// Vcc in mV 1800 - 3600
#define CFG_ICC_HI_EN 8
// disable 0 (up to 30mA from MSP-GANG to each targets)
// enable 1 (up to 50mA from MSP-GANG to each targets)
#define CFG_BLOWFUSE 9
// disable 0
// enable 1
#define CFG_TARGET_EN_INDEX 10
// Targets GANG enable mask - 0x00 ...0xFF. Enable all targets -> 0xFF
#define TARGET_1_MASK 0x01
#define TARGET_2_MASK 0x02
#define TARGET_3_MASK 0x04
#define TARGET_4_MASK 0x08
#define TARGET_5_MASK 0x10
#define TARGET_6_MASK 0x20
#define TARGET_7_MASK 0x40
#define TARGET_8_MASK 0x80
#define CFG_FLASHERASEMODE 11
#define ERASE_NONE_MEM_INDEX 0
#define ERASE_ALL_MEM_INDEX 1
#define ERASE_PRG_ONLY_MEM_INDEX 2
#define ERASE_INFILE_MEM_INDEX 3
#define ERASE_DEF_CM_INDEX 4
#define ERASE_MAX_INDEX ERASE_DEF_CM_INDEX
#define CFG_ERASEINFOA 12 \
// disable 0
// enable 1
#define CFG_ERASEINFOB 13
// disable 0
// enable 1
#define CFG_ERASEINFOC 14
// disable 0
// enable 1
#define CFG_ERASEINFOD 15
// disable 0
// enable 1
#define CFG_MASSERASE_AND_INFOA_EN 16
// disable 0
// enable 1
#define CFG_ERASESTARTADDR 17
// FLASH/FRAM start erase address
#define CFG_ERASESTOPADDR 18
// FLASH/FRAM end erase address
#define CFG_FLASHREADMODE 19
#define READ_ALL_MEM_INDEX 0
#define READ_PRGMEM_ONLY_INDEX 1
#define READ_INFOMEM_ONLY_INDEX 2
#define READ_DEF_MEM_INDEX 3
#define READ_MEM_MAX_INDEX READ_DEF_MEM_INDEX
#define CFG_READINFOA 20
// disable 0
// enable 1
#define CFG_READINFOB 21
// disable 0
// enable 1
#define CFG_READINFOC 22
// disable 0
// enable 1
#define CFG_READINFOD 23
// disable 0
// enable 1
#define CFG_FINALACTION_MODE 24
#define APPLICATION_NO_RESET 0
#define APPLICATION_TOGGLE_RESET 1
#define APPLICATION_TOGGLE_VCC 2
#define APPLICATION_JTAG_RESET 3
#define APPLICATION_RESET_MAX_INDEX APPLICATION_JTAG_RESET
#define CFG_BEEPMODE 25
// sum of following bits
#define BEEP_PCSPK_EN_BIT 1 //Beep via PC Speaker enable
#define BEEP_OK_EN_BIT 2 //Beep when OK enable
#define BEEP_SOUND_EN_BIT 4 //Sound enable
#define CFG_DEFERASEMAINEN 26
// disable 0
// enable 1
#define CFG_CUSTOMRESETPULSETIME 27
// time in ms 1.....2000
#define CFG_CUSTOMRESETIDLETIME 28
// time in ms 1.....2000
#define CFG_BSL_ENH_ENABLE 29
// disable 0
// enable 1
#define CFG_BSL_ENH_INDEX 30
//for future usage
#define BSL_ENH_DISABLE 0
#define BSL_ENH_NONE 1
#define BSL_ENH_ERASE 2
#define BSL_ENH_MAX_INDEX 2
#define CFG_RETAIN_CAL_DATA_INDEX 31
// disable 0
// enable 1
#define CFG_FINALACTIONRUNTIME 32
// 0 - infinite,
// 1...120 time in seconds
#define CFG_FINALACTIONVCCOFFTIME 33
// Vcc-OFF (then again ON) time after programming when the
// APPLICATION_TOGGLE_VCC option is selected.
#define CFG_DCO_CONST_2XX_VERIFY_EN 35
// disable 0
// enable 1
#define CFG_DCOCAL_2XX_EN 36
// disable 0
// enable 1
#define CFG_BSL_FLASH_WR_EN 37
// mask for 4 BSL segments - disable->0, enable->1
// bit 0 -> 0x01 BSL segment 1
// bit 1 -> 0x02 BSL segment 2
// bit 2 -> 0x04 BSL segment 3
// bit 3 -> 0x08 BSL segment 4
#define CFG_BSL_FLASH_RD_EN 38
// mask for 4 BSL segments - disable->0, enable->1
// bit 0 -> 0x01 BSL segment 1
// bit 1 -> 0x02 BSL segment 2
// bit 2 -> 0x04 BSL segment 3
// bit 3 -> 0x08 BSL segment 4
#define CFG_READMAINMEMEN 39
// disable 0
// enable 1
#define CFG_READDEFSTARTADDR 40
// Memory READ start address
#define CFG_READDEFSTOPADDR 41
// Memory READ end address
#define CFG_COMPORT_NO 42
// Communication COM Port number - 0..255
#define CFG_UART_SPEED 43
// Baud Rate index
#define UART_9600 0
#define UART_19200 1
#define UART_38400 2
#define UART_57600 3
#define UART_115200 4
#define CFG_OPEN_FILE_TYPE 44
#define CODE_FILE_INDEX 0
#define APPEND_FILE_INDEX 1
#define PASSW_FILE_INDEX 2
#define SECONDCODE_FILE_INDEX 3
#define CODE2_FILE_INDEX 4
#define CFG_USE_SCRIPT_FILE 45
// disable 0
// enable 1
#define CFG_IMAGE_NO 46
//image number - 0...9
#define CFG_RESETTIME 47
#define RESET_10MS_INDEX 0
#define RESET_100MS_INDEX 1
#define RESET_200MS_INDEX 2
#define RESET_500MS_INDEX 3
#define RESET_CUSTOM_INDEX 4
#define RESET_MAX_INDEX RESET_CUSTOM_INDEX
#define CFG_PROJECT_SOURCE 48
#define INTERACTIVE_MODE 0
#define FROM_IMAGE_MEMORY_MODE 1
#define STANDALONE_MODE 2
#define FROM_IMAGE_FILE_MODE 3
#define PROJECT_SOURCE_MAX_INDEX FROM_IMAGE_FILE_MODE
#define CFG_COPY_CFG_FROM_MEMORY_EN 49
// Direct (eg. Interactive) 0
// From Image memory 1
#define CFG_RUNNING_SCRIPT_MODE 50
#define RUNNING_SCRIPT_NONE 0
#define RUNNING_SCRIPT_ONLINE 1
#define RUNNING_SCRIPT_OFFLINE 2
#define CFG_VCC_SETTLE_TIME 51
// Vss settle time in step 20 ms. Range 0...200 ( time 0...4000 ms)
#define CFG_JTAG_UNLOCK_EN 52
// disable 0
// enable 1
#define CFG_CODE2_FILE_EN 53
// disable 0
// enable 1
#define CFG_BSL_FIRST_PASSWORD 54
#define BSL_ANY_PASSW 0
#define BSL_PASSW_FROM_CODE_FILE 1
#define BSL_PASSW_FROM_PASSWORD_FILE 2
#define BSL_EMPTY_PASSW 3
#define CFG_DEFINED_RETAIN_DATA_EN 55
// disable 0
// enable 1
#define CFG_DEFINED_RETAIN_START_ADDR 56
//address must be even
#define CFG_DEFINED_RETAIN_END_ADDR 57
//address must be odd
#define DEFINED_RETAIN_DATA_MAX_SIZE 0x40
// END_ADDR - START_ADDR + 1 <= DEFINED_RETAIN_DATA_MAX_SIZE
#define CFG_SECURE_CODE_SOURCE 58
enum {USER_SOURCE=0, FILE_SOURCE=1};
#define CFG_MSP432_CLR_LOCKING_OPTIONS 59
#define MSP432_CLR_LOCKING_INFOA_BIT 0x01
#define MSP432_CLR_LOCKING_BSL_BIT 0x02
#define MSP432_CLR_LOCKING_MASK ( MSP432_CLR_LOCKING_INFOA_BIT | MSP432_CLR_LOCKING_BSL_BIT )
#define CFG_WRDEF_EXCLUDE_SECTIONS 60
// mask for 4 Read_Defined excluded sections disable->0, enable->1
// bit 0 -> 0x01 section 1
// bit 1 -> 0x02 section 2
// bit 2 -> 0x04 section 3
// bit 3 -> 0x08 section 4
#define CFG_RDDEF_EXCLUDE_SECTIONS 61
// mask for 4 Read_Defined excluded sections disable->0, enable->1
// bit 0 -> 0x01 section 1
// bit 1 -> 0x02 section 2
// bit 2 -> 0x04 section 3
// bit 3 -> 0x08 section 4
#define CFG_WRDEF_EXCLUDE_S1_START_ADDR 62
#define CFG_WRDEF_EXCLUDE_S1_END_ADDR 63
#define CFG_WRDEF_EXCLUDE_S2_START_ADDR 64
#define CFG_WRDEF_EXCLUDE_S2_END_ADDR 65
#define CFG_WRDEF_EXCLUDE_S3_START_ADDR 66
#define CFG_WRDEF_EXCLUDE_S3_END_ADDR 67
#define CFG_WRDEF_EXCLUDE_S4_START_ADDR 68
#define CFG_WRDEF_EXCLUDE_S4_END_ADDR 69
#define CFG_RDDEF_EXCLUDE_S1_START_ADDR 70
#define CFG_RDDEF_EXCLUDE_S1_END_ADDR 71
#define CFG_RDDEF_EXCLUDE_S2_START_ADDR 72
#define CFG_RDDEF_EXCLUDE_S2_END_ADDR 73
#define CFG_RDDEF_EXCLUDE_S3_START_ADDR 74
#define CFG_RDDEF_EXCLUDE_S3_END_ADDR 75
#define CFG_RDDEF_EXCLUDE_S4_START_ADDR 76
#define CFG_RDDEF_EXCLUDE_S4_END_ADDR 77
#define CFG_RD_TLV_EN 78
#define CFG_SERIALIZATION_EN 80
// disable 0
// enable 1
#define CFG_SN_ADDRESS_IN_MEMORY 81
//address must be even
#define CFG_SN_DATA_SIZE_IN_BYTES 82
//Size must be even 2...16
#define SN_DATA_MAX_SIZE 16
#define CFG_SN_REMOVE_CODE_FROM_SN_LOCATION 83
// disable 0
// enable 1
#define CFG_SN_SOURCE 84
#define SN_SOURCE_DEFINED 0
#define SN_SOURCE_FROM_FILE 1
// 0 - defined
// 1 - from file
#define CFG_SN_FORMAT_IN_MEMORY 85
#define SN_FORMAT_LSB_FIRST 0
#define SN_FORMAT_MSB_FIRST 1
#define CFG_SN_DATA_INCREMENT 86
#define CFG_INIT_SN_DATA_0 87
//Bits 0-31 of the SN init data
#define CFG_INIT_SN_DATA_1 (CFG_INIT_SN_DATA_0+1)
//Bits 32-63 of the SN init data
#define CFG_INIT_SN_DATA_2 (CFG_INIT_SN_DATA_0+2)
//Bits 64-91 of the SN init data
#define CFG_INIT_SN_DATA_3 (CFG_INIT_SN_DATA_0+3)
//Bits 92-127 of the SN init data
#define CFG_SN_DESTINATION 91
#define NUMBER_TO_FLASH 0
#define NUMBER_TO_MAC_REG 1
#define CFG_MPU_IPE_WR_LOCKED 92
// disable 0
// enable 1
#define CFG_MPU_IPE_WR_UNLOCKED 93
// disable 0
// enable 1
#define CFG_MPU_IPE_RD_UNLOCKED 94
// disable 0
// enable 1
#define CFG_MPU_IPE_START_ADDR 95
#define CFG_MPU_IPE_END_ADDR 96
#define CFG_ADDITIONAL_COMPORT_NO 200
// 0 - disable (default)
// 1-255 added COM port number 1-255
// MSP432P protection configuration
#define CFG_MSP432_MB_CMD 300
#define CFG_MSP432_MB_JTAG_SWD_LOCK_SECEN 301
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_INIT_VECT0 302
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_INIT_VECT1 303
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_INIT_VECT2 304
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_INIT_VECT3 305
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS0 306
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS1 307
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS2 308
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS3 309
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS4 310
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS5 311
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS6 312
#define CFG_MSP432_MB_JTAG_SWD_LOCK_AES_SECKEYS7 313
#define CFG_MSP432_MB_JTAG_SWD_LOCK_UNENC_PWD0 314
#define CFG_MSP432_MB_JTAG_SWD_LOCK_UNENC_PWD1 315
#define CFG_MSP432_MB_JTAG_SWD_LOCK_UNENC_PWD2 316
#define CFG_MSP432_MB_JTAG_SWD_LOCK_UNENC_PWD3 317
#define CFG_MSP432_MB_SEC_ZONE0_SECEN 318
#define CFG_MSP432_MB_SEC_ZONE0_START_ADDR 319
#define CFG_MSP432_MB_SEC_ZONE0_LENGTH 320
#define CFG_MSP432_MB_SEC_ZONE0_AESINIT_VECT0 321
#define CFG_MSP432_MB_SEC_ZONE0_AESINIT_VECT1 322
#define CFG_MSP432_MB_SEC_ZONE0_AESINIT_VECT2 323
#define CFG_MSP432_MB_SEC_ZONE0_AESINIT_VECT3 324
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS0 325
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS1 326
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS2 327
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS3 328
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS4 329
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS5 330
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS6 331
#define CFG_MSP432_MB_SEC_ZONE0_SECKEYS7 332
#define CFG_MSP432_MB_SEC_ZONE0_UNENC_PWD0 333
#define CFG_MSP432_MB_SEC_ZONE0_UNENC_PWD1 334
#define CFG_MSP432_MB_SEC_ZONE0_UNENC_PWD2 335
#define CFG_MSP432_MB_SEC_ZONE0_UNENC_PWD3 336
#define CFG_MSP432_MB_SEC_ZONE0_ENCUPDATE_EN 337
#define CFG_MSP432_MB_SEC_ZONE0_DATA_EN 338
#define CFG_MSP432_MB_SEC_ZONE1_SECEN 339
#define CFG_MSP432_MB_SEC_ZONE1_START_ADDR 340
#define CFG_MSP432_MB_SEC_ZONE1_LENGTH 341
#define CFG_MSP432_MB_SEC_ZONE1_AESINIT_VECT0 342
#define CFG_MSP432_MB_SEC_ZONE1_AESINIT_VECT1 343
#define CFG_MSP432_MB_SEC_ZONE1_AESINIT_VECT2 344
#define CFG_MSP432_MB_SEC_ZONE1_AESINIT_VECT3 345
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS0 346
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS1 347
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS2 348
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS3 349
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS4 350
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS5 351
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS6 352
#define CFG_MSP432_MB_SEC_ZONE1_SECKEYS7 353
#define CFG_MSP432_MB_SEC_ZONE1_UNENC_PWD0 354
#define CFG_MSP432_MB_SEC_ZONE1_UNENC_PWD1 355
#define CFG_MSP432_MB_SEC_ZONE1_UNENC_PWD2 356
#define CFG_MSP432_MB_SEC_ZONE1_UNENC_PWD3 357
#define CFG_MSP432_MB_SEC_ZONE1_ENCUPDATE_EN 358
#define CFG_MSP432_MB_SEC_ZONE1_DATA_EN 359
#define CFG_MSP432_MB_SEC_ZONE2_SECEN 360
#define CFG_MSP432_MB_SEC_ZONE2_START_ADDR 361
#define CFG_MSP432_MB_SEC_ZONE2_LENGTH 362
#define CFG_MSP432_MB_SEC_ZONE2_AESINIT_VECT0 363
#define CFG_MSP432_MB_SEC_ZONE2_AESINIT_VECT1 364
#define CFG_MSP432_MB_SEC_ZONE2_AESINIT_VECT2 365
#define CFG_MSP432_MB_SEC_ZONE2_AESINIT_VECT3 366
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS0 367
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS1 368
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS2 369
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS3 370
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS4 371
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS5 372
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS6 373
#define CFG_MSP432_MB_SEC_ZONE2_SECKEYS7 374
#define CFG_MSP432_MB_SEC_ZONE2_UNENC_PWD0 375
#define CFG_MSP432_MB_SEC_ZONE2_UNENC_PWD1 376
#define CFG_MSP432_MB_SEC_ZONE2_UNENC_PWD2 377
#define CFG_MSP432_MB_SEC_ZONE2_UNENC_PWD3 378
#define CFG_MSP432_MB_SEC_ZONE2_ENCUPDATE_EN 379
#define CFG_MSP432_MB_SEC_ZONE2_DATA_EN 380
#define CFG_MSP432_MB_SEC_ZONE3_SECEN 381
#define CFG_MSP432_MB_SEC_ZONE3_START_ADDR 382
#define CFG_MSP432_MB_SEC_ZONE3_LENGTH 383
#define CFG_MSP432_MB_SEC_ZONE3_AESINIT_VECT0 384
#define CFG_MSP432_MB_SEC_ZONE3_AESINIT_VECT1 385
#define CFG_MSP432_MB_SEC_ZONE3_AESINIT_VECT2 386
#define CFG_MSP432_MB_SEC_ZONE3_AESINIT_VECT3 387
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS0 388
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS1 389
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS2 390
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS3 391
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS4 392
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS5 393
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS6 394
#define CFG_MSP432_MB_SEC_ZONE3_SECKEYS7 395
#define CFG_MSP432_MB_SEC_ZONE3_UNENC_PWD0 396
#define CFG_MSP432_MB_SEC_ZONE3_UNENC_PWD1 397
#define CFG_MSP432_MB_SEC_ZONE3_UNENC_PWD2 398
#define CFG_MSP432_MB_SEC_ZONE3_UNENC_PWD3 399
#define CFG_MSP432_MB_SEC_ZONE3_ENCUPDATE_EN 400
#define CFG_MSP432_MB_SEC_ZONE3_DATA_EN 401
#define CFG_MSP432_MB_BSL_EABLE 402
#define CFG_MSP432_MB_BSL_START_ADDR 403
#define CFG_MSP432_MB_BSL_HARD_INV_PARAMS 404
#define CFG_MSP432_MB_JTAG_SWD_LOCK_ENCPAYLOADADDR 405
#define CFG_MSP432_MB_JTAG_SWD_LOCK_ENCPAYLOADLEN 406
#define CFG_MSP432_MB_JTAG_SWD_LOCK_DST_ADDR 407
#define CFG_MSP432_MB_SEC_ZONE0_PAYLOADADDR 408
#define CFG_MSP432_MB_SEC_ZONE0_PAYLOADLEN 409
#define CFG_MSP432_MB_SEC_ZONE1_PAYLOADADDR 410
#define CFG_MSP432_MB_SEC_ZONE1_PAYLOADLEN 411
#define CFG_MSP432_MB_SEC_ZONE2_PAYLOADADDR 412
#define CFG_MSP432_MB_SEC_ZONE2_PAYLOADLEN 413
#define CFG_MSP432_MB_SEC_ZONE3_PAYLOADADDR 414
#define CFG_MSP432_MB_SEC_ZONE3_PAYLOADLEN 415
#define CFG_MSP432_MB_FACTORY_RESET_ENABLE 416
#define CFG_MSP432_MB_FACTORY_RESET_PWDEN 417
#define CFG_MSP432_MB_FACTORY_RESET_PWD0 418
#define CFG_MSP432_MB_FACTORY_RESET_PWD1 419
#define CFG_MSP432_MB_FACTORY_RESET_PWD2 420
#define CFG_MSP432_MB_FACTORY_RESET_PWD3 421
#define CFG_MSP432_MB_FACTORY_RESET_PASSWORD0 422
#define CFG_MSP432_MB_FACTORY_RESET_PASSWORD1 423
#define CFG_MSP432_MB_FACTORY_RESET_PASSWORD2 424
#define CFG_MSP432_MB_FACTORY_RESET_PASSWORD3 425
// MSP432E protection configuration
#define CFG_MSP432E_FMPREADEN0_DATA 430
#define CFG_MSP432E_FMPREADEN1_DATA 431
#define CFG_MSP432E_FMPREADEN2_DATA 432
#define CFG_MSP432E_FMPREADEN3_DATA 433
#define CFG_MSP432E_FMPREADEN4_DATA 434
#define CFG_MSP432E_FMPREADEN5_DATA 435
#define CFG_MSP432E_FMPREADEN6_DATA 436
#define CFG_MSP432E_FMPREADEN7_DATA 437
#define CFG_MSP432E_FMPREADEN8_DATA 438
#define CFG_MSP432E_FMPREADEN9_DATA 439
#define CFG_MSP432E_FMPREADEN10_DATA 440
#define CFG_MSP432E_FMPREADEN11_DATA 441
#define CFG_MSP432E_FMPREADEN12_DATA 442
#define CFG_MSP432E_FMPREADEN13_DATA 443
#define CFG_MSP432E_FMPREADEN14_DATA 444
#define CFG_MSP432E_FMPREADEN15_DATA 445
#define CFG_MSP432E_FMPPRGEN0_DATA 446
#define CFG_MSP432E_FMPPRGEN1_DATA 447
#define CFG_MSP432E_FMPPRGEN2_DATA 448
#define CFG_MSP432E_FMPPRGEN3_DATA 449
#define CFG_MSP432E_FMPPRGEN4_DATA 450
#define CFG_MSP432E_FMPPRGEN5_DATA 451
#define CFG_MSP432E_FMPPRGEN6_DATA 452
#define CFG_MSP432E_FMPPRGEN7_DATA 453
#define CFG_MSP432E_FMPPRGEN8_DATA 454
#define CFG_MSP432E_FMPPRGEN9_DATA 455
#define CFG_MSP432E_FMPPRGEN10_DATA 456
#define CFG_MSP432E_FMPPRGEN11_DATA 457
#define CFG_MSP432E_FMPPRGEN12_DATA 458
#define CFG_MSP432E_FMPPRGEN13_DATA 459
#define CFG_MSP432E_FMPPRGEN14_DATA 460
#define CFG_MSP432E_FMPPRGEN15_DATA 461
#define CFG_MSP432E_USER_REG0 462
#define CFG_MSP432E_USER_REG1 463
#define CFG_MSP432E_USER_REG2 464
#define CFG_MSP432E_USER_REG3 465
#define CFG_MSP432E_USERDEBUGDATA 466
#define CFG_MSP432E_FP_REG_WREN 467
#define CFG_MSP432E_USER_REG_WREN 468
#define CFG_MSP432E_DBG_REG_WREN 469
#define CFG_MSP432E_PROTECTION_SOURCE 470
//---------- end of configuration setup indexes and data list --------------------
//The MSPGANG_Set_MCU_Name set the desired target's MCU
// Arguments: LPTSTR MCU name - without spaces eg MSP430F5438A
// Result: LONG (error code)
LONG WINAPI MSPGANG_Set_MCU_Name( LPTSTR name );
//The MSPGANG_Check_MCU_Name check if the MCU with specified MCU_name is supported
// Arguments: LPTSTR MCU name - without spaces eg MSP430F5438A
// Result: LONG (error code)
LONG WINAPI MSPGANG_Check_MCU_Name( LPTSTR name );
//MSPGANG_SetTmpGANG_Config set temporaty configuration that is restored
//to original configuration afte the mein or interractive process is finished
// Arguments: LONG index, data
// Result: LONG (error code)
LONG WINAPI MSPGANG_SetTmpGANG_Config( LONG no, LONG data );
//----- TMP_CFG_INDEX and data --------
#define CFG_TMP_CLEAR 2
//data - none
#define CFG_TMP_TASK_MASK 4
//--- task mask bits ---- - for all tasks - set 0xFFFF
#define CONNECT_TASK_BIT 0x0001
#define ERASE_TASK_BIT 0x0002
#define BLANKCHECK_TASK_BIT 0x0004
#define PROGRAM_TASK_BIT 0x0008
#define VERIFY_TASK_BIT 0x0010
#define SECURE_TASK_BIT 0x0020
#define DCO_CAL_TASK_BIT 0x0040
//spare 0x0080 to 0x4000
#define RST_AND_START_FW_BIT 0x8000
#define CFG_TMP_VCC_VALUE 6
// Vcc in mV - 1800 ...3600
#define CFG_TMP_POWER_VCC_EN 8
// disable 0
// enable 1
#define CFG_TMP_INTERFACE 10
// (INTERFACE_JTAG | INTERFACE_FAST)
// (INTERFACE_JTAG | INTERFACE_MED)
// (INTERFACE_JTAG | INTERFACE_SLOW)
// (INTERFACE_SBW | INTERFACE_FAST)
// (INTERFACE_SBW | INTERFACE_MED)
// (INTERFACE_SBW | INTERFACE_SLOW)
#define CFG_TMP_GANG_MASK 12
// Targets GANG enable mask - 0x00 ...0xFF. Enable all targets -> 0xFF
// TARGET_1_MASK 0x01
// TARGET_2_MASK 0x02
// TARGET_3_MASK 0x04
// TARGET_4_MASK 0x08
// TARGET_5_MASK 0x10
// TARGET_6_MASK 0x20
// TARGET_7_MASK 0x40
// TARGET_8_MASK 0x80
#define CFG_TMP_VCC_ONOFF 14
// disable 0
// enable 1
#define CFG_LCD_CONTRAST 16
// 0x00 --0x3F
#define CFG_TMP_ICC_HI_EN 18
// disable 0
// enable 1
#define CFG_TMP_IO_INTERFACE 20
// 0 - SBW_VIA_TDOI (pin 1) and TCK/TEST (pin-7/8)
// 1 - SBW_VIA_RST (pin 11) and TCK/TEST (pin-7/8)
#define CFG_TMP_RESET 22
// disable 0
// enable 1
#define CFG_TMP_KEYBOARD_EN 24
// disable 0
// enable 1
#define CFG_TMP_VCC_SETTLE_TIME 26
// 0...200 Vcc settle time in 20 ms increment (t = 0...4000 ms)
#define CFG_TMP_CUMULATIVE_ST_EN 28
// 0 - disable
// 1 - enable ( default )
#define CFG_WRAPPER_MASK 30
// used in the DLL wrapper of the MSP-GANG430 only. Do not use it.
#define CFG_WRAPPER_EN_KEY 32
// used in the DLL wrapper of the MSP-GANG430 only. Do not use it.
#define CFG_WRAPPER_GANG_MASK 34
// used in the DLL wrapper of the MSP-GANG430 only. Do not use it.
#define CFG_TMP_BSL_1ST_PASSW 36
// #define BSL_ANY_PASSW 0
// #define BSL_PASSW_FROM_CODE_FILE 1
// #define BSL_PASSW_FROM_PASSWORD_FILE 2
// #define BSL_EMPTY_PASSW 3
#define CFG_DISABLE_TASK_MASK 38
#define CFG_TMP_MAX_INDEX CFG_DISABLE_TASK_MASK
//=== end of MSPGANG_SetTmpGANG_Config ===============
// MSPGANG_GetNameConfig
// MSPGANG_SetNameConfig
// Set - Get file names of current code /script / password / sounds files
// Arguments: LONG index, File name
LPTSTR WINAPI MSPGANG_GetNameConfig( LONG index );
LONG WINAPI MSPGANG_SetNameConfig( LONG index, LPTSTR name );
#define CODEFILE_INDEX 0
#define SCRIPTFILE_INDEX 1
#define PASSWORDFILE_INDEX 2
#define SOUNDERRFILE_INDEX 3
#define SOUNDOKFILE_INDEX 4
#define SOUNDWARNINGFILE_INDEX 5
#define CODE_2_FILE_INDEX 6
#define IMAGE_FILE_INDEX 7
#define SN_LOG_FILE_INDEX 8
#define SN_DATA_FILE_INDEX 9
#define NAMECFG_MAX_INDEX SN_DATA_FILE_INDEX
//Access to all codes, data and passwords buffers and flags
//See below buffers structure
//get ptr to 'DATA_BUFFERS dat' inside the MSP-GANG.dll
LONG WINAPI MSPGANG_GetDataBuffers_ptr( void ** x );
#define DBUFFER_SIZE 0x210000
#define JTAG_PASSW_LEN 0x80
#define BSL_PASSW_LEN 0x20 //MSP430
#define ARM_BSL_PASSW_LEN 0x100 //MSP432
#define MAX_BSL_PASSW_LEN 0x100 //max from (ARM_BSL_PASSW_LEN, BSL_PASSW_LEN)
#define MAX_PASSW_LEN 0x100 //max from (ARM_BSL_PASSW_LEN, BSL_PASSW_LEN, JTAG_PASSW_LEN )
#define FLASH_END_ADDR (DBUFFER_SIZE-1)
#define FLASH_BUF_LEN DBUFFER_SIZE
#define GANG_SIZE 8
typedef struct
{
BYTE SourceCode[DBUFFER_SIZE]; //source code from the file
BYTE UsedCode[DBUFFER_SIZE]; //combined data (source code, serialization etc)
BYTE GangRx[DBUFFER_SIZE][GANG_SIZE]; //data read from all targets
BYTE Tmp[DBUFFER_SIZE]; //used for second file cmp
BYTE Flag_ScrCode[DBUFFER_SIZE]; //0 - empty 1-Code1, 2-Code2, 4-Appended Code in SourceCode[x];
#define CODE1_FLAG 1
#define CODE2_FLAG 2
#define APPEND_CODE_FLAG 4
BYTE Flag_UsedCode[DBUFFER_SIZE]; //0 - empty 1-valid data in UsedCode[x];
BYTE Flag_WrEn[DBUFFER_SIZE]; //0 - none 1-write/verify enable in FlashMem[x]
BYTE Flag_EraseEn[DBUFFER_SIZE]; //0 - none 1-erase enable in FlashMem[x]
BYTE Flag_RdEn[DBUFFER_SIZE]; //0 - none 1-read enable in FlashMem[x]
BYTE Flag_Sp3[DBUFFER_SIZE]; //used internally
BYTE JTAG_Passsword[2][JTAG_PASSW_LEN];
BYTE BSL_Passsword[2][MAX_BSL_PASSW_LEN];
BYTE Flag_JTAG_Passw[2][JTAG_PASSW_LEN]; // [0][..]-password from code file; [1][..]-password from password file
BYTE Flag_BSL_Passw[2][MAX_BSL_PASSW_LEN]; // [0][..]-password from code file; [1][..]-password from password file
} DATA_BUFFERS;
extern DATA_BUFFERS dat;
LONG WINAPI MSPGANG_Convert_Address( BYTE type, LONG Addr );
#define MCU_TO_DATABUF 1
#define DATABUF_TO_MCU 2
LPTSTR WINAPI MSPGANG_Memory_Header_text( LONG Addr );
#define MEM_HEADER_TXT_SIZE 200
// Write/Read to/from internal RAM buffer GangBuffer[128][8] inside the MSP-GANG programmer.
// Buffer can contains unique data to each target that should be copied from buffer to target's RAM or FLASH.
// All unique data, even if are not the same contents can be copied simultaneously to each target devices using
// MSPGANG_Interactive_Copy_GANG_Buffer_to_RAM( LONG addr, LONG size )
// and MSPGANG_Interactive_Copy_GANG_Buffer_to_FLASH( LONG addr, LONG size );
// Prepare data to each target using MSPGANG_SetGangBuffer to write data to GangBuffer[target-1][size];
// Target number -> 1...8
// When the Serial Number is read/write for using with option - Autoprogram (GO), then size buffer is limited
// to 32 bytes and with the target number the SN_DATA_FLAG must be added, e.g
// MSPGANG_SetGangBuffer( SN_DATA_FLAG | target, size, data );
#define GANG_DATA_BUF_SIZE 128
#define SN_GANG_BUF_SIZE SN_DATA_MAX_SIZE
#define TARGET_MASK 0x1F
#define SN_DATA_FLAG 0x40
LONG WINAPI MSPGANG_GetGangBuffer( BYTE target, BYTE size, BYTE *data );
LONG WINAPI MSPGANG_SetGangBuffer( BYTE target, BYTE size, BYTE *data );
//-- MSPGANG_LoadFirmware ---------------------------------------------------------
// loads the firmware memory at the programmer from build-in the DLL code table contents
// Result: LONG (error code)
LONG WINAPI MSPGANG_LoadFirmware( void );
//The MSPGANG_HW_devices reads all available COM ports. See structure below for details
// ARGUMENT - pointer to internal structure inside the MSP-GANG.dll
// Result: LONG (error code)
LONG WINAPI MSPGANG_HW_devices( LONG max, void ** AvailableComPorts );
#define HW_NAME_SIZE 30
typedef union
{
unsigned char bytes[HW_NAME_SIZE];
struct
{
unsigned short ComNo;
char ComName[7];
char description[HW_NAME_SIZE-2-7];
}x;
}COM_PORTS_DEF;
//-- MSPGANG_InitCom ------------------------------------------------------------------
// InitCom opens a communications port, sets the baudrate and checks if the
// MSP-GANG is present
// Arguments: char * lpszComPort (the name of the port) eg> "\\\\.\\COM3"
// LONG lBaudRate (the baud rate)
// Result: LONG (error code)
// Note: It is recommended to call the MSPGANG_HW_devices(..) (see above) function first and check
// available com ports. The USB COM port for the MSP-GANG, if detectec, is listed as the first.
LONG WINAPI MSPGANG_InitCom( LPTSTR lpszPort, LONG lBaud);
//-- MSPGANG_ReleaseCom ---------------------------------------------------------------
// ReleaseCom releases the communications port
// Arguments: none
// Result: LONG (error code)
LONG WINAPI MSPGANG_ReleaseCom(void);
//-- GetErrorString -----------------------------------------------------------
// retrieves the pointer to the error string belonging to the error number
// Arguments: LONG lErrorNumber (the error number)
// Result: CHAR* (the pointer to the error string)
LPTSTR WINAPI MSPGANG_GetErrorString(LONG lErrorNumber);
//-- MSPGANG_GetDevice ----------------------------------------------------------------
// reads all specific parameters of a device type from MSP-GANG.dll and allocate
// them in a buffer pointed to by lpData (see structure below).
// Arguments: LPTSTR - MCUname (name without spaces) or blank "" for currently selected MCU
// void **lpData - ponter to structure
// Result: LONG (error code)
LONG WINAPI MSPGANG_GetDevice( LPTSTR lpszDeviceName, void **lpData);
typedef struct
{
long Group;
long IsFRAM;
long RAM_size;
long no_of_info_segm;
long info_segm_size;
long info_start_addr;
long info_end_addr;
long info_A_locked;
long MainMem_start_addr;
long MainMem_end_addr;
long no_of_BSL_segm;
long BSL_segm_size;
long BSL_start_addr;
long BSL_end_addr;
long Vcc_prg_min;
long Vcc_run_min;
long BSL_passw_size;
long family_index;
long has_JTAG_password;
long has_unlockable_JTAG;
long has_SBW;
long has_4wire_JTAG;
long has_BSL;
long no_of_DCO_constants;
long RAM_start_addr;
long MCU_ID;
long Clk_Type;
long uses_SUC;
long MCU_Type;
long MCU_Type_index;
long ARM_FW_Type;
long MAC_RegAddr;
long MPU_Type;
long spare[11];
} DEVICE_INFO;
extern DEVICE_INFO device;
#define MPU_NONE 0
#define HAS_MPU_BIT 1
#define HAS_MPU_IPE_BIT 2
//-- MSPGANG_SelectBaudrate -------------------------------------------------------
// MSPGANG_SelectBaudrate selects the baudrate of the programmer unit
// Arguments: LONG (baudrate index: 0 = 9600, 4 = 115200
// Result: LONG (error code)
LONG WINAPI MSPGANG_SelectBaudrate(LONG lBaud);
//-- MSPGANG_GetDiagnostic ------------------------------------------------------------
// MSPGANG_GetDiagnostic retrieves info baout the unit - hardware and software
// Arguments: void *lpData (result's data)
// Result: LONG (error code)
LONG WINAPI MSPGANG_GetDiagnostic(void *lpData);
//-- MSPGANG_MainProcess ----------------------------------------------------------
// MSPGANG_MainProcess executes the main process at the programmer unit.
// All data during the main process are taken from image memory or SD card memmory.
// Arguments: LONG (timeout in s)
// Result: LONG (error code)
LONG WINAPI MSPGANG_MainProcess(LONG lTime);
//-- MSPGANG_InteractiveProcess ----------------------------------------------------------
// MSPGANG_InteractiveProcess executes the main process at the programmer unit.
// All data during the main process are transferred via USB or RS232 communication interface
// Contents inside the image memory or SD card memmory (in u=inserted) are irrelevant.
// Arguments: LONG (timeout in s)
// Result: LONG (error code)
LONG WINAPI MSPGANG_InteractiveProcess( LONG lTime ); //timeout in seconds
//-- MSPGANG_Interactive_Open_Target_Device ----------------------------------------------------------
// MSPGANG_Interactive_Open_Target_Device inits communication with target device and checking MCU_ID.
// When done, target(s)is ready to get next interracctive commands (write, read , erase etc)
// Arguments: LPTSTR (name- displayed on the LCD displaye)
// Result: LONG (error code)
LONG WINAPI MSPGANG_Interactive_Open_Target_Device( LPTSTR name );
//-- MSPGANG_Interactive_Close_Target_Device ----------------------------------------------------------
// MSPGANG_Interactive_Close_Target_Device close communication with target device(s)
// All Vcc becomes OFF, JTAG/SBW inactive
// Arguments: none
// Result: LONG (error code)
LONG WINAPI MSPGANG_Interactive_Close_Target_Device( void );
//-- MSPGANG_Interactive_DefReadTargets ----------------------------------------------------------
// MSPGANG_Interactive_DefReadTargets read contenst of the FLASH/FRAM wrom the space defined for READ
// in the configuration MSPGANG_SetConfig(...)
// Arguments: none
// Result: LONG (error code)
LONG WINAPI MSPGANG_Interactive_DefReadTargets( BYTE mask, BYTE bar_min, BYTE bar_max, LONG Start_addr, LONG End_addr ) ;
LONG WINAPI MSPGANG_Interactive_ReadTargets( BYTE mask ) ;
LONG WINAPI MSPGANG_Interactive_ReadBytes( BYTE target_no, LONG addr, LONG size, BYTE * data ) ;
LONG WINAPI MSPGANG_Interactive_WriteWord_to_RAM( LONG addr, LONG data );
LONG WINAPI MSPGANG_Interactive_WriteByte_to_RAM( LONG addr, BYTE data );
LONG WINAPI MSPGANG_Interactive_WriteBytes_to_RAM( LONG addr, LONG size, BYTE * data );
LONG WINAPI MSPGANG_Interactive_WriteBytes_to_FLASH( LONG addr, LONG size, BYTE * data );
LONG WINAPI MSPGANG_Interactive_Copy_GANG_Buffer_to_RAM( LONG addr, LONG size );
LONG WINAPI MSPGANG_Interactive_Copy_GANG_Buffer_to_FLASH( LONG addr, LONG size );
LONG WINAPI MSPGANG_Interactive_EraseSectors( LONG StartAddr, LONG EndAddr );
LONG WINAPI MSPGANG_Interactive_BlankCheck( LONG StartAddr, LONG EndAddr );
LONG WINAPI MSPGANG_Interactive_CS( LONG StartAddr, LONG EndAddr );
LONG WINAPI MSPGANG_Interactive_DCO_Test( BYTE DCO_no, LONG *result_in_kHz );
LONG WINAPI MSPGANG_Interactive_ClrLockedDevice( void );
//-- MSPGANG_SelectImage -----------------------------------------------------------
// MSPGANG_SelectImage sets active image to work with. MSP-GANG supports up to 96 images images.
// Image numbers (image size 64 kB each) are compatible with the old image numbering (0..15) - 512 kB each.
// new image numbering style
// b7 - 1 - new numbering - force new standard for e.g. subimage number = 0
// b6..b4 - sub image number
// b3..b0 - image number (0...15 -> image # 1..16 )
// b7 b6..4 b3..0
// e.g. 1 2 4 (image 5.2) (new numbering - when erased- one sector 64 kB only)
// 0 0 4 (image 5 ) (old numbering - when erased- eight sector -> 512 kB)
// but
// 0 2 4 (image 5.2) ( even without b7=1, it is a new numbering - when erased- one sector 64 kB only)
// Old image numbering New image numbering
// 0 0x80 or 0, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0 (on GUI displayed as 1.0, 1.1, 1.2, 1.3....)
// 1 0x81 or 1, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1 .........................
// 2 0x82 or 2, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2 .........................
// 3 0x83 or 3, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3 .........................
// 4 0x84 or 4, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4 .........................
// 5 0x85 or 5, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5 .........................
// 6 0x86 or 6, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6 .........................
// 7 0x87 or 7, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7 .........................
// 8 0x88 or 8, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8 .........................
// 9 0x89 or 9, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9 .........................
// 10 0x8A or 10, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA .........................
// 11 0x8B or 11, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB .........................
// 12 - used for read only as long as the flash image is not used for internal firmware
// 13 (transition time)
// 14 --,,,---
// 15 --,,,---
// Result: LONG (the error code)
LONG WINAPI MSPGANG_SelectImage(LONG lImage);
//-- MSPGANG_EraseImage -----------------------------------------------------------
// MSPGANG_EraseImage clears (presets with 0xFF) the image memory at the progr. unit
// Arguments: none
// Result: LONG (the error code)
LONG WINAPI MSPGANG_EraseImage(void);
//-- MSPGANG_CreateGangImage -----------------------------------------------------------
// MSPGANG_CreateGangImage - prepares data to be saved in the Image memory or used in Interractive process
// Arguments: name - displayed on the LCD display
// Result: LONG (error code)
LONG WINAPI MSPGANG_CreateGangImage( LPTSTR name );
//-- MSPGANG_LoadImageBlock -----------------------------------------------------------
// MSPGANG_LoadImageBlock - saved data prepared by MSPGANG_CreateGangImage in the selected Image memory
// Arguments: name
// Result: LONG (error code)
LONG WINAPI MSPGANG_LoadImageBlock( void );
//-- MSPGANG_VerifyPSAImageBlock -----------------------------------------------------------
// MSPGANG_VerifyPSAImageBlock - verified check sum of all bclock saved in the selected image memory
// Arguments: name
// Result: LONG (error code)
LONG WINAPI MSPGANG_VerifyPSAImageBlock( void );
//-- MSPGANG_Read_Code_File read code file, append file or password file and save it in the MSP-GANG.dll internal buffer
// Type of the code is selected via Configuration
// MSPGANG_SetConfig( CFG_OPEN_FILE_TYPE, LONG data );
// where: data -> CODE_FILE_INDEX, APPEND_FILE_INDEX or PASSW_FILE_INDEX.
// By default it is used CODE_FILE_INDEX. When the MSPGANG_Read_Code_File is executed
// then the type file is set again to default value - CODE_FILE_INDEX.
//
// Arguments: LPTSTR FullPath
// Result: LONG (error code)
LONG WINAPI MSPGANG_Read_Code_File( LPTSTR FullPath );
LONG WINAPI MSPGANG_Get_Code_Info( LONG type );
#define CODE_SIZE_INFO 1
#define CODE_CHECK_SUM 2
#define CODE2_SIZE_INFO 3
#define CODE2_CHECK_SUM 4
#define APPEND_CODE_SIZE_INFO 5
#define APPEND_CODE_CHECK_SUM 6
#define WHOLE_CODE_SIZE_INFO 7
#define WHOLE_CODE_CHECK_SUM 8
#define CS_PER_GANG430STD 9
// The MSPGANG_Load_Config, MSPGANG_Save_Config and MSPGANG_Default_Config
// read, write the configuration file used in the MSP-GANG.
// The MSPGANG_Default_Config restore confuguration to default (new) setup.
// All confuguration items loaded from the file or default can be modified later item by item
// using MSPGANG_SetConfig(...) function
// Arguments: LPTSTR FullPath
// Result: LONG (error code)
LONG WINAPI MSPGANG_Load_Config( LPTSTR filename );
LONG WINAPI MSPGANG_Save_Config( LPTSTR filename );
LONG WINAPI MSPGANG_Default_Config( void );
// LONG WINAPI MSPGANG_Read_SN_Data_File( LONG mode, LONG index, LPTSTR filename );
// File with serial number / MAC addresses used for programming selected target device in Autoprogram (GO) - current run only.
// File must be modified before starting Autoprogram and should contain new SN/MAC addresses for programming current target devices.
// Format inside file is fixed
// first line - SN/MAC for first target
// ..................................
// last line - SN/MAC for last target
// SN.MAC format - number of bytes in hex e.g. - in example SN/MAC has size 6 bytes each
// A5 28 38 E2 56 A8
// ....................
// A5 28 38 E2 56 AF
// mode, index - spare - not used yet. For future options.
// filename -> full name and path of the SN data file with extention *.txt
LONG WINAPI MSPGANG_Read_SN_Data_File( LONG mode, LONG index, LPTSTR filename );
// LONG WINAPI MSPGANG_Append_Log_File( LONG mode, LPTSTR filename );
LONG WINAPI MSPGANG_Append_Log_File( LONG mode, LPTSTR filename );
#define SN_LOG_FILE 1
// The MSPGANG_GetLabel function read the MSP-GANG programmer's label
LONG WINAPI MSPGANG_GetLabel( BYTE *Data );
#define LABEL_SIZE_IN_BYTES 256
typedef union
{
unsigned char bytes[LABEL_SIZE_IN_BYTES+2];
struct
{
//label from MSP-GANG
unsigned char boot_sw_ID[2];
unsigned char boot_sw_rev[4];
unsigned char api_sw_ID[2];
unsigned char api_sw_rev[4];
unsigned char boot_sw_rev_m[2];
unsigned char hardware_rev[2];
unsigned char api_sw_rev_m[2];
char boot_sw_name[9];
char api_sw_name[9];
unsigned char silicon_UN[8];
char access_code_desc[32];
unsigned char access_code[32];
char HW_SN[8];
char MFG_ID[4];
char HW_ID[4];
unsigned char HW_rev[2];
unsigned char HW_yymmdd[6];
char InfoA_spare[8];
//end of from MSP-GANG (total 140 bytes)
unsigned char dll_ID[2];
unsigned char dll_rev[4];
char dll_date[16];
char dll_name[16];
unsigned char new_FW_ID[2];
unsigned char new_FW_rev[4];
char new_FW_name[10];
char new_FW_spare2[8];
}x;
}UNIT_LABEL_DEF;
extern UNIT_LABEL_DEF unit_label;
//The MSPGANG_GetInfoMemory and MSPGANG_SetInfoMemory read or write 128 bytes from/to information memory inside MSP-GANG.
//Information memory contains a few data and setup used in the MSP-GANG. It can be used for additional data in the future
// Arguments: BYTE - page 0 - (info memory - 0x1800-0x187F)
// page 1 - (info memory - 0x1880-0x18FF)
// BYTE *data - pointer to data buffer
// Result: LONG (error code)
LONG WINAPI MSPGANG_GetInfoMemory( BYTE page, BYTE *data );
LONG WINAPI MSPGANG_SetInfoMemory( BYTE page, BYTE *data );
//The MSPGANG_ReadImageBlock reads the header from the selected image memory
// Arguments: LONG addr - address from the image memory (0..250)
// LONG size - 1...254
// void *lpData - pointer to BYTE data buffer - Data format of the void *lpData -> union _IMAGE_HEADER - see below.
// Result: LONG (error code)
#define UNLOCK_INFOA 0x40
#define UNLOCK_INFO 0x80
LONG WINAPI MSPGANG_ReadImageBlock( LONG addr, LONG size, void *lpData ); //size - max 250 bytes
#define HEADER_ID_SIZE 10 //fixed size - do not modify
#define SCRIPT_TEXT_SIZE 16 //fixed size - do not modify
#define SCRIPT_MCU_NAME_SIZE 16 //fixed size - do not modify
#define IMAGE_HEADER_CTRL_OFFSET 112
union _IMAGE_HEADER
{
BYTE bytes[IMAGE_HEADER_SIZE];
WORD words[IMAGE_HEADER_SIZE/2];
struct
{
WORD own_PSA;
WORD global_PSA;
BYTE year;
BYTE month;
BYTE day;
BYTE hour;
BYTE min;
BYTE sec;
#define GLOBAL_PSA_START_OFFSET 10
// down - covered by global_PSA ----
#define SHORT_ID_2BYTE_OFFSET 10
WORD shortID;
#define CHUNKS_NO_2BYTE_OFFSET 12
WORD chunks;
#define IMAGE_DATA_2BYTE_OFFSET 14
WORD image_data_offset;
#define GLOBAL_SIZE_4BYTE_OFFSET 16
DWORD size; //global_size;
WORD ID_rev; //20
BYTE ID_name[HEADER_ID_SIZE]; //22
DWORD DLL_ver; //32
#define HEADER_COMMENT_ADDR 36
char comment[SCRIPT_TEXT_SIZE];
WORD used_tasks_mask; //52
BYTE Interface; //54 type (JTAG, SBW, BSL), speed(Fast, Med, Slow)
BYTE GangMask; //55
BYTE Vcc_PowerEn; //56
BYTE Icc_HiEn; //57
WORD Vcc_mV; //58
WORD min_Vcc_mV; //60
WORD max_Vcc_mV; //62
WORD RST_time_ms; //64
WORD RST_release_ms; //66
BYTE InfoA_Erase_En; //68
BYTE BSL_Erase_En_mask; //69
BYTE SecureDev_En; //70
BYTE DCO_Flags; //71
#define DCO_RETAIN_EN 0x01
#define DCO_VALIDATION_EN 0x02
#define DCO_RECAL_EN 0x04
#define DCO_ONE_CONSTANTS 0x08
BYTE IO_cfg; //72
#define SBW_VIA_RST_BIT 0x01
BYTE MemoryOption; //73 for GUI only - for displaying used memory option. No impact in firmware
BYTE InterfaceSpeed; //74 for GUI only - for displaying used speeds (JTAG/SBW/CJTAG/BSL). No impact in firmware
BYTE VccSettleTime; //75 settle time *20ms
BYTE JTAG_unlockEn : 1; //76
BYTE HasLockedInfoA : 1;
BYTE HasAutoEraseInBSL : 1;
BYTE BSL_X_type : 1;
BYTE spare_flag4 : 1;
BYTE spare_flag5 : 1;
BYTE spare_flag6 : 1;
BYTE spare_flag7 : 1;
BYTE ClrSegments; //77 MSP432
// #define MSP432_CLR_LOCKING_INFOA_BIT 0x01
// #define MSP432_CLR_LOCKING_BSL_BIT 0x02
BYTE BSL_1st_Passw; //78
BYTE EraseIfLocked; //ARM !!!!!!!!!!!!!!!!! - not used yet
#define UNLOCK_KEY_EN 0x39
BYTE SnDataSize; //80
BYTE MPU_Options; //81
#define MPU_OPTION_NONE 0
#define MPU_IPE_WR_LOCKED_EN_BIT 0x01
#define MPU_IPE_WR_UNLOCKED_EN_BIT 0x02
#define MPU_IPE_RD_UNLOCKED_EN_BIT 0x04
// BYTE free[112-82];
}prg;
struct
{
BYTE offset[IMAGE_HEADER_CTRL_OFFSET]; //offset 112
BYTE flags; //0x70
#define IMAGE_LOCK 0x10 //must be the same bit as in LOCK_LD_PRJ
BYTE sp1; //0x71
BYTE sp2; //0x72
BYTE sp3; //0x73
BYTE sp4; //0x74
BYTE sp5; //0x75
BYTE sp6; //0x76
BYTE sp7; //0x77
BYTE sp8; //0x78
BYTE sp9; //0x79
BYTE sp10; //0x7A
BYTE sp11; //0x7B
BYTE sp12; //0x7C
BYTE sp13; //0x7D
BYTE sp14; //0x7E
BYTE sp15; //0x7F
}ctrl;
struct
{
BYTE offset[IMAGE_HEADER_SIZE/2];
char MCU_name[SCRIPT_MCU_NAME_SIZE]; //0
WORD Id[2]; //16
WORD SubId[2]; //20
WORD MainEraseMode; //24
WORD minPVcc; //26
WORD RAM_size; //28
WORD SubIDAddr; //30
BYTE FRAM; //32
//#define FRAM_NONE 0
//#define FRAM_ASIC 1
//#define FRAM_MSPXV2_57 2
//#define FRAM_APOLLO 3
//#define FRAM_MSPXV2_59 4
// --- one byte
BYTE DefaultDCO : 1; //33
BYTE ASIC : 1;
BYTE MPU : 1;
BYTE JTAG_Passw : 1;
BYTE BSLprogrammable : 1;
BYTE JTAG_Unlockable : 1;
BYTE BSL_16B_passw : 1;
BYTE has_MPU_IPE : 1; //spare
// --- one byte
BYTE TestPin; //34
BYTE CpuX; //35
BYTE Quick_W :1; //36
BYTE Quick_R :1;
BYTE Quick_W_bug :1;
BYTE Quick_WclkA :1;
BYTE BSL_F5x_StdEntry :1;
BYTE BSL9600 :1;
BYTE FRAM_directWr_En :1;
BYTE AutoBlankCheckDis :1;
BYTE FastFlash; //37
BYTE EnhVerify; //38
BYTE JTAG; //39
BYTE SpyBiWire; //40
BYTE Marginal; //41
BYTE F5xx; //42
BYTE MCU_Group; //43
WORD RAM_addr; //44
BYTE SYS_CLK; //46 used for F5xx and up
//#define STANDARD 0 - for compatibility
#define Xv2_PLL 1 //as standard before
#define HF_8MHz 2 //FRAM FR57xx
#define HF_1MHz 3 //Apollo
#define HF2_8MHz 4 //FRAM FR58xx, FR59xx
#define Xv2_PLL_G60XX 5
#define DCO_16384HZ 6 //i2xxx
BYTE InfoA_type; //47
//#define STANDARD 0 - for compatibility
#define I2XX_1K 1 //i2xxx 1K - 0x1000-0x13FF
BYTE FLASH_Type; //48
//#define STANDARD 0 - for compatibility
#define SEGMENT_1K 1 //i2xxx 1K flash segment size
#define FLASH_SEGM_2K 2
#define FLASH_SEGM_4K 4
#define FLASH_SEGM_8K 8
#define FLASH_SEGM_16K 16
#define FLASH_SEGM_32K 32
BYTE Secure_Type; //49
//#define STANDARD 0 - for compatibility
#define SUC 1 //i2xxx
BYTE Map; //50
BYTE SysClkDiv2; //51
BYTE NMI_to_addr; //52
#define NMI_TO_ADDR_NOT_SUPPORTED 0x80
BYTE FW_type; //53
#define FAMILY_XMS432P401 21 //XSP432P401 Rev-B obsolete - not supported
#define FAMILY_MSP432P401 22
#define FAMILY_MSP432P4111 23
#define FAMILY_MSP432E4X 60
BYTE MCU_Type; //54
#define MSP430F 0x01 //or can be 0
#define CC_RF_BIT_ID 0x10
#define MSP_FR_BIT_ID 0x20
#define MSP432_BIT_ID 0x80
BYTE free_1; //55
BYTE free_2; //56
BYTE free_3; //57
WORD Id2[2]; //58
WORD free_4; //62
DWORD PrgFlags; //64 used for ARM only so far.
//68
// free 128-68;
}device;
};
//The MSPGANG_Get_qty_MCU_Family, MSPGANG_Get_MCU_FamilyName and MSPGANG_Get_MCU_Name
// allows to get list of all supported MCUs and sort them in the family names groups.
// Currently following MCU's grout are suttorted
// Family_ID Family name
// 1, " MSP430F1xx"
// 20, " MSP430F2xx"
// 22, " MSP430AFE2xx"
// 21, " MSP430G2xx"
// 40, " MSP430F4xx"
// 41, " MSP430FE4xx"
// 42, " MSP430FG4xx"
// 43, " MSP430FW4xx"
// 50, " MSP430F5xx"
// 57, " MSP430FR5xx"
// 60, " MSP430F6xx"
// 51, " CC-430F5xx"
// 61, " CC-430F6xx"
// See manual for details how to get list of MCUs
LONG WINAPI MSPGANG_Get_qty_MCU_Type( void );
LONG WINAPI MSPGANG_Set_MCU_Type( int type );
LONG WINAPI MSPGANG_Get_MCU_TypeName( LONG index, LPTSTR name );
LONG WINAPI MSPGANG_Get_qty_MCU_Family( void );
LONG WINAPI MSPGANG_Get_MCU_FamilyName( LONG index, LPTSTR name );
LONG WINAPI MSPGANG_Get_MCU_Name( LONG group_index, LONG index, LPTSTR name );
// The MSPGANG_MakeSound make beep or sounds
void WINAPI MSPGANG_MakeSound( LONG type );
//type as below
#define BEEP_OK 1
#define BEEP_ERR 2
#define BEEP_PRG_ERR 3
#define BEEP_WARNING 4
//The MSPGANG_CallBack_ProgressBar, MSPGANG_CallBack_Message and MSPGANG_WaitUntilFinished
// monitors executed functions during execution
// Functions used internally
LONG WINAPI MSPGANG_CallBack_ProgressBar( void ** text, void ** history, BYTE *G_status, BYTE *DLL_status );
LPTSTR WINAPI MSPGANG_CallBack_Message( void );
LONG WINAPI MSPGANG_WaitUntilFinished( LONG error, LONG lTime );
#define DLL_STATUS_SIZE 32
// MSPGANG_GetProgressStatus get progress status from MSP-GANG. Received data in bytes contains
//gang mask of all preoceesed done in the function called before the
//MSPGANG_GetProgressStatus is used. Each bit in the Gang mask represent one targted device
// bit 0 -> Target 1, ....... bit 7 -> Target 8
// eg: Connected_gang_mask -> 0x7A - targets 2,4,5,6,7 are detected and communication established
// *** -> final results - for all targets
// See GANG_PROGRESS_STATUS union below for details
LONG WINAPI MSPGANG_GetProgressStatus(void *lpData);
#define SCRIPT_TEXT_SIZE 16
union GANG_PROGRESS_STATUS
{
BYTE bytes[PROGRESS_STATUS_SIZE+4];
struct
{
BYTE header;
BYTE ctr;
WORD task_ctr; //byte offset - 0
WORD chunk_ctr; //byte offset - 2
BYTE run; //byte offset - 4
BYTE ack; //byte offset - 5
WORD Finished_tasks_mask; //byte offset - 6,7
//--- task mask bits ----
// CONNECT_TASK_BIT 0x0001
// ERASE_TASK_BIT 0x0002
// BLANKCHECK_TASK_BIT 0x0004
// PROGRAM_TASK_BIT 0x0008
// VERIFY_TASK_BIT 0x0010
// SECURE_TASK_BIT 0x0020
// DCO_CAL_TASK_BIT 0x0040
//spare 0x0080 to 0x4000
// RST_AND_START_FW_BIT 0x8000
BYTE ***; //byte offset - 8
//target masks
// TARGET_1_MASK 0x01
// TARGET_2_MASK 0x02
// TARGET_3_MASK 0x04
// TARGET_4_MASK 0x08
// TARGET_5_MASK 0x10
// TARGET_6_MASK 0x20
// TARGET_7_MASK 0x40
// TARGET_8_MASK 0x80
BYTE Rq_gang_mask; //byte offset - 9
BYTE Connected_gang_mask; //byte offset - 10
BYTE Erased_gang_mask; //byte offset - 11
BYTE BlankCheck_gang_mask; //byte offset - 12
BYTE Programmed_gang_mask; //byte offset - 13
BYTE Verified_gang_mask; //byte offset - 14
BYTE Secured_gang_mask; //byte offset - 15
BYTE RestoredOldSN; //byte offset - 16
BYTE spare[5]; //byte offset - 17..21
BYTE error_no; //byte offset - 22
BYTE VTIO_32mV; //byte offset - 23
BYTE VccSt_LOW; //byte offset - 24
BYTE VccSt_HI; //byte offset - 25
// VccSt_LOW, VccSt_HI provide 2 bits to each target.
// Bit A for each target and bit B for each target.
// Bits B A
// 0 0 Vcc below 0.7V
// 0 1 Vcc below Vcc min ( 0.7V < Vcc < Vcc min)
// 1 0 Vcc over Vcc min (OK status)
// 1 1 Vcc over 3.8V
BYTE VccErr; //byte offset - 26
//current Vcc below min
BYTE VccErr_Cumulative; //byte offset - 27
//*** (during programminf) Vcc below min
BYTE JTAG_init_err_mask; //byte offset - 28
BYTE JTAG_Fuse_already_blown_mask; //byte offset - 29
BYTE Wrong_MCU_ID_mask; //byte offset - 30
BYTE Progress_bar; //byte offset - 31
// 0...100%
char comment[SCRIPT_TEXT_SIZE]; //byte offset - 32..47
}st;
};
LONG WINAPI MSPGANG_GetAPIStatus( LONG no, BYTE *data );
//----- Gang Status index (no) -----------
#define GET_APP_FLAGS 10
#define GET_LAST_STATUS 12
#define GET_LAST_ERROR_NO 14
#define GET_ACTIVE_TARGETS_MASK 16
#define GET_MCU_ID 18
#define GANG_MCU_ID_IN_BYTES_SIZE 16
#define GANG_LAST_STATUS_SIZE 8
typedef union
{
BYTE b[GANG_LAST_STATUS_SIZE];
WORD w[GANG_LAST_STATUS_SIZE/2];
struct
{
BYTE status; //error no
BYTE connected_mask;
BYTE active_mask;
BYTE error_mask;
BYTE gang_mask;
BYTE spare_1;
BYTE spare_2;
BYTE spare_3;
}type;
}_LAST_STATUS;
//received 4 bytes of internal status
//no = GET_APP_FLAGS (10)
//response:
// Byte-0
// b0 (LSB) Hardware rev-0
// b1 initialization finished (after power-up)
// b2 access key CRC error
// b3 invalid access key
// b4 running from SD card
// b5 File in SD card found
// b6 target secure device in process
// b7 keypad enabled
//
// Byte-1
// b0 key pressed
// b1..b7 spare
// Byte-2 spare
// Byte-3 spare
//
//
// no = GET_LAST_STATUS (12)
// response:
// Byte-0 Error number in the last execute transaction
// Byte-1 targets connection mask
// Byte-2 active targets mask
// Byte-3 targets error mask
// Byte-4..7 spare
//
// no = GET_LAST_ERROR_NO (14)
// Byte-0 - last error number from MSP-GANG for any command
// error numbers 1...255 - see error list numbers above
// no = GET_ACTIVE_TARGETS_MASK (16)
// return - mask of the active target devices - checked IR response
// valid for JTAG/SBW communication only
// 0x01 - target 1
// ................
// 0x80 - target 8
// e.g. response 0x47 - targets 1,2,3,5 give the alive response
// no = GET_MCU_ID (18)
// return - ID of MCU - 2 bytes per one target - in total 2*8 = 16 bytes
// byte 0,1 - ID for target 1
// byte 2,4 - ID for target 3
// ................
// byte 14,15 - ID for target 8
//The MSPGANG_GetPCHardwareFingerprint reads hardware fingerprint from the PC.
//Used for project protected with password or hardware fingerprint number.
// Arguments: none
// Result: DWORD - hex hardware fimgerprint number
DWORD WINAPI MSPGANG_GetPCHardwareFingerprint( void );
//The MSPGANG_ImageFileSave and MSPGANG_ImageFileLoad Save/Load the image to/from file
// Used internally by GUI
LONG WINAPI MSPGANG_ImageFileSave( LPTSTR filename, LPTSTR name, LONG type, LPTSTR passw );
LONG WINAPI MSPGANG_ImageFileLoad( LPTSTR filename, LPTSTR passw, LONG mode );
// load mode - 0 read only
// load mode - 1 read from the file and save to selected image memory
#define BINARY_EXTENTION ".mspgangbin"
#define IMAGE_FILE_EXT ".mspgangimage"
//The MSPGANG_SelfTest is used for the MSP-GANg programmer selftest - provided in GUI
//
LONG WINAPI MSPGANG_SelfTest( LONG addr, LONG size, BYTE * data_in, BYTE * result );
//The MSPGANG_Flash_valid_addr is used for validation FLASH/FRAM address
// Arguments: LONG dest - 0 (without TLV memory), 0x10 - with TLV memory
// LONG start_addr - Flash/FRAM start address
// LONG size - Flash/FRAM size
// Result: LONG (error code)
LONG WINAPI MSPGANG_Flash_valid_addr( LONG dest, LONG start_addr, LONG size );
// Used by GUI only
void WINAPI MSPGANG_Save_Data_to_File( LONG mode, LONG source, LPTSTR FileName );
//-------------------------------------------
// MSPGANG_Set_IO_State( LONG Vcc_mV, BYTE *data ) - set static level on IO pins (JTAG,SBW...)
//
// Vcc_mV - Set the Vcc in mV - for output voltage and I/O translators levels
// data -> 8 data bytes
//
// data[0] - open destination buffer for output and transferred data for each targets
// 0 -> none
// 1 -> TDI (targer 1..8)
// 2 -> TDOI (targer 1..8)
// 3 -> TMS (targer 1..8)
// 4 -> RST (targer 1..8)
// 5 -> BSL-RX (targer 1..8)
// data[1] - data transferred to the buffer above b0..b7 -> target1... target8
// data[2] - output enable bits 0-> tri-state 1->output
// b2 (0x04) - common RST - the same state for all 8 targets (note - if the RST buffer above is selected, then this state is ignored)
// b3 (0x08) - common TEST - the same state for all 8 targets
// b4 (0x10) - common TCK - the same state for all 8 targets
// b5 (0x20) - common TMS - the same state for all 8 targets (note - if the TMS buffer above is selected, then this state is ignored)
// data[3] - output level on all targets 0-> LOW 1->HI
// b2 (0x04) - common RST - the same level for all 8 targets (note - if the RST buffer above is selected, then this state is ignored)
// b3 (0x08) - common TEST - the same level for all 8 targets
// b4 (0x10) - common TCK - the same level for all 8 targets
// b5 (0x20) - common TMS - the same level for all 8 targets (note - if the TMS buffer above is selected, then this state is ignored)
// data[4] - Vcc enable bits to each targets b0..b7 -> target1... target8
// data[5] - Icc HI enable 0->disable, 1->enable
// data[6] - spare-1
// data[7] - spare-2
//
//-------------------------------------------
LONG WINAPI MSPGANG_Set_IO_State( LONG Vcc_mV, BYTE *data );
// definition for data[0]
#define DEST_STATE_NONE 0
#define TDI_STATE_DEST 1
#define TDOI_STATE_DEST 2
#define TMS_STATE_DEST 3
#define RST_STATE_DEST 4
#define BSLRX_STATE_DEST 5
// definition for data[2], [3]
#define RST_STATE_BIT 0x04
#define TEST_STATE_BIT 0x08
#define TCK_STATE_BIT 0x10
#define TMS_STATE_BIT 0x20
//========================================================================
// MSP432P_Locking Option definitions
//========================================================================
#define MSP432_MB_START_ADDR 0x200000
#define CMD_ENABLE_JTAG_UNLOCK_FACTORY_RESET 0x00000001
#define CMD_ENABLE_PASSWORD3 0x00000800
#define CMD_ENABLE_PASSWORD2 0x00000400
#define CMD_ENABLE_PASSWORD1 0x00000200
#define CMD_ENABLE_PASSWORD0 0x00000100
#define CMD_ENABLE_MASK_0_JTAG_SWD_LOCK_SECEN 0x00080000
#define CMD_ENABLE_MASK_1_SEC_ZONE0_EN 0x00100000
#define CMD_ENABLE_MASK_2_SEC_ZONE1_EN 0x00200000
#define CMD_ENABLE_MASK_3_SEC_ZONE2_EN 0x00400000
#define CMD_ENABLE_MASK_4_SEC_ZONE3_EN 0x00800000
#define CMD_ENABLE_MASK_5_BSL_CONFIG 0x00020000
#define CMD_ENABLE_MASK_6_JTAG_SWD_LOCK_ENC_UPDATE 0x10000000
#define CMD_ENABLE_MASK_7_SEC_ZONE0_UPDATE 0x01000000
#define CMD_ENABLE_MASK_8_SEC_ZONE1_UPDATE 0x02000000
#define CMD_ENABLE_MASK_9_SEC_ZONE2_UPDATE 0x04000000
#define CMD_ENABLE_MASK_10_SEC_ZONE3_UPDATE 0x08000000
#define CMD_ENABLE_MASK_11_FACTORY_RESET_PARAMS 0x20000000
#define CMD_ENABLE_MASK_12_FACTORY_RESET 0x00010000
#define CMD_EN_FLASH_MAILBOX_GLOBAL_MASK 0x3FFB0000
enum
{
CMD_JTAG_SWD_LOCK_SECEN_INDEX=0,
CMD_SEC_ZONE0_EN_INDEX,
CMD_SEC_ZONE1_EN_INDEX,
CMD_SEC_ZONE2_EN_INDEX,
CMD_SEC_ZONE3_EN_INDEX,
CMD_BSL_CONFIG_INDEX,
CMD_JTAG_SWD_LOCK_ENC_UPDATE_INDEX,
CMD_SEC_ZONE0_UPDATE_INDEX,
CMD_SEC_ZONE1_UPDATE_INDEX,
CMD_SEC_ZONE2_UPDATE_INDEX,
CMD_SEC_ZONE3_UPDATE_INDEX,
CMD_FACTORY_RESET_PARAMS_INDEX,
CMD_FACTORY_RESET_INDEX,
NUM_CMDS
};
typedef struct TI_MSP432_CMD_JTAG_SWD_LOCK_SECEN_t
{
UINT32 JTAG_SWD_LOCK_SECEN;
UINT32 JTAG_SWD_LOCK_AES_INIT_VECT[4];
UINT32 JTAG_SWD_LOCK_AES_SECKEYS[8];
UINT32 JTAG_SWD_LOCK_UNENC_PWD[4];
UINT32 ACK; //read-only
UINT32 reserved[2];
}TI_MSP432_CMD_JTAG_SWD_LOCK_SECEN;
typedef struct TI_MSP432_CMD_SEC_ZONEx_EN_t
{
UINT32 SEC_ZONEx_SECEN;
UINT32 SEC_ZONEx_START_ADDR;
UINT32 SEC_ZONEx_LENGTH;
UINT32 SEC_ZONEx_AESINIT_VECT[4];
UINT32 SEC_ZONEx_SECKEYS[8];
UINT32 SEC_ZONEx_UNENC_PWD[4];
UINT32 SEC_ZONEx_ENCUPDATE_EN;
UINT32 SEC_ZONEx_DATA_EN;
UINT32 ACK; //read-only
UINT32 reserved[2];
}TI_MSP432_CMD_SEC_ZONEx_EN;
typedef struct TI_MSP432_CMD_BSL_CONFIG_t
{
UINT32 BSL_Enable;
UINT32 BSL_Start_Addr;
UINT32 BSL_Hard_Inv_Params;
UINT32 reserved[2];
UINT32 ACK; //read-only
}TI_MSP432_CMD_BSL_CONFIG;
typedef struct TI_MSP432_CMD_JTAG_SWD_LOCK_ENC_UPDATE_t
{
UINT32 JTAG_SWD_LOCK_ENCPAYLOADADDR;
UINT32 JTAG_SWD_LOCK_ENCPAYLOADLEN;
UINT32 JTAG_SWD_LOCK_DST_ADDR;
UINT32 ACK; //read-only
UINT32 reserved;
}TI_MSP432_CMD_JTAG_SWD_LOCK_ENC_UPDATE;
typedef struct TI_MSP432_CMD_SEC_ZONEx_UPDATE_t
{
UINT32 SEC_ZONEx_PAYLOADADDR;
UINT32 SEC_ZONEx_PAYLOADLEN;
UINT32 ACK; //read-only
UINT32 reserved;
}TI_MSP432_CMD_SEC_ZONEx_UPDATE;
typedef struct TI_MSP432_CMD_FACTORY_RESET_PARAMS_t
{
UINT32 FACTORY_RESET_ENABLE;
UINT32 FACTORY_RESET_PWDEN;
UINT32 FACTORY_RESET_PWD[4];
UINT32 ACK; //read-only
UINT32 reserved;
}TI_MSP432_CMD_FACTORY_RESET_PARAMS;
typedef struct TI_MSP432_CMD_FACTORY_RESET_t
{
UINT32 PASSWORD[4];
UINT32 ACK; //read-only
UINT32 reserved;
}TI_MSP432_CMD_FACTORY_RESET;
#define NUM_SINGLE_FIELDS 5
#define NUM_MULTI_FIELDS 3
#define NUM_FIELDS (NUM_SINGLE_FIELDS + NUM_MULTI_FIELDS)
#define MULTI_FIELD_START_OFFSET 3 //reference InitDialog function for this
#define MAX_FIELD_TXT_SIZE 200
#define TI_MSP432_MB_WORD_SIZE 0xA4
#define TI_MSP432_MB_BYTE_SIZE (4*TI_MSP432_MB_WORD_SIZE)
typedef union TI_MSP432_CMD_MAILBOX_t
{
BYTE mb_bytes[4*TI_MSP432_MB_BYTE_SIZE]; //0 - 0x24c (inclusive)
UINT32 mb_words[TI_MSP432_MB_WORD_SIZE]; //0 - 0x24c (inclusive)
struct
{
UINT32 MB_START; //magic number
UINT32 CMD; //bit-field with all enabled commands
UINT32 RESERVED[2]; //Blanks, set to 0xFFFFFFFF
TI_MSP432_CMD_JTAG_SWD_LOCK_SECEN CMD_JTAG_SWD_LOCK_SECEN;
TI_MSP432_CMD_SEC_ZONEx_EN CMD_SEC_ZONEx_EN[4];
TI_MSP432_CMD_BSL_CONFIG CMD_BSL_CONFIG;
TI_MSP432_CMD_JTAG_SWD_LOCK_ENC_UPDATE CMD_JTAG_SWD_LOCK_ENC_UPDATE;
TI_MSP432_CMD_SEC_ZONEx_UPDATE CMD_SEC_ZONEx_UPDATE[4];
UINT32 RESERVED2; //extra reserved between Zonex and Factory Reset
TI_MSP432_CMD_FACTORY_RESET_PARAMS CMD_FACTORY_RESET_PARAMS;
TI_MSP432_CMD_FACTORY_RESET CMD_FACTORY_RESET;
UINT32 MB_END; //magic number
}mb_fields;
//Don't create a mailbox without the magic numbers!
#ifdef __cplusplus
TI_MSP432_CMD_MAILBOX_t()
{
mb_fields.MB_START = 0x0115ACF6;
mb_fields.MB_END = 0x011E11D;
mb_fields.RESERVED[0] = mb_fields.RESERVED[1] = 0xFFFFFFFF;
mb_fields.CMD_JTAG_SWD_LOCK_SECEN.ACK = 0xFFFFFFFF;
mb_fields.CMD_JTAG_SWD_LOCK_SECEN.reserved[0] = 0xFFFFFFFF;
mb_fields.CMD_JTAG_SWD_LOCK_SECEN.reserved[1] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[0].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[0].reserved[0] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[0].reserved[1] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[1].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[1].reserved[0] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[1].reserved[1] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[2].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[2].reserved[0] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[2].reserved[1] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[3].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[3].reserved[0] = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_EN[3].reserved[1] = 0xFFFFFFFF;
mb_fields.CMD_BSL_CONFIG.ACK = 0xFFFFFFFF;
mb_fields.CMD_BSL_CONFIG.reserved[0] = 0xFFFFFFFF;
mb_fields.CMD_BSL_CONFIG.reserved[1] = 0xFFFFFFFF;
mb_fields.CMD_JTAG_SWD_LOCK_ENC_UPDATE.ACK = 0xFFFFFFFF;
mb_fields.CMD_JTAG_SWD_LOCK_ENC_UPDATE.reserved = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[0].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[0].reserved = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[1].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[1].reserved = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[2].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[2].reserved = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[3].ACK = 0xFFFFFFFF;
mb_fields.CMD_SEC_ZONEx_UPDATE[3].reserved = 0xFFFFFFFF;
mb_fields.RESERVED2 = 0xFFFFFFFF;
mb_fields.CMD_FACTORY_RESET_PARAMS.FACTORY_RESET_ENABLE = 0;
mb_fields.CMD_FACTORY_RESET_PARAMS.FACTORY_RESET_PWDEN = 0xFFFFFFFF;
mb_fields.CMD_FACTORY_RESET_PARAMS.ACK = 0xFFFFFFFF;
mb_fields.CMD_FACTORY_RESET_PARAMS.reserved = 0xFFFFFFFF;
mb_fields.CMD_FACTORY_RESET.ACK = 0xFFFFFFFF;
mb_fields.CMD_FACTORY_RESET.reserved = 0xFFFFFFFF;
}
#endif
}TI_MSP432_CMD_MAILBOX;
//========================================================================
// MSP432E_Locking Option definitions
//========================================================================
#define TI_SYSTEM_REGISTERS 0x400FE000
#define TI_DEVICE_ID_REG0 TI_SYSTEM_REGISTERS
#define TI_DEVICE_ID_REG1 (TI_SYSTEM_REGISTERS + 4 )
#define TI_DEVICE_MEMSIZE_REG (TI_SYSTEM_REGISTERS + 8 )
#define TI_USECRL_ADDR (TI_SYSTEM_REGISTERS + 0x140)
#define TI_FLASH_REGISTERS 0x400FD000
#define TI_FMA_ADDR ( TI_FLASH_REGISTERS + 0 )
#define TI_FMD_ADDR ( TI_FLASH_REGISTERS + 4 )
#define TI_FMC_ADDR ( TI_FLASH_REGISTERS + 8 )
#define TI_FCRIS_ADDR ( TI_FLASH_REGISTERS + 0x0C )
#define TI_FCIM_ADDR ( TI_FLASH_REGISTERS + 0x10 )
#define TI_FCMISC_ADDR ( TI_FLASH_REGISTERS + 0x14 )
//--- OTP and protection registers --
#define TI_PROT_REG_SIZE 16
#define TI_PROT_READ_ENABLE_ADDR 0x400FE200
#define TI_PROT_PRG_ENABLE_ADDR 0x400FE400
#define TI_FMPRE0 (TI_SYSTEM_REGISTERS + 0x130)
#define TI_FMPRE0_2 (TI_SYSTEM_REGISTERS + 0x200)
#define TI_FMPRE1 (TI_SYSTEM_REGISTERS + 0x204)
#define TI_FMPRE2 (TI_SYSTEM_REGISTERS + 0x208)
#define TI_FMPRE3 (TI_SYSTEM_REGISTERS + 0x20C)
#define TI_FMPRE4 (TI_SYSTEM_REGISTERS + 0x210)
#define TI_FMPRE5 (TI_SYSTEM_REGISTERS + 0x214)
#define TI_FMPRE6 (TI_SYSTEM_REGISTERS + 0x218)
#define TI_FMPRE7 (TI_SYSTEM_REGISTERS + 0x21C)
#define TI_FMPRE8 (TI_SYSTEM_REGISTERS + 0x220)
#define TI_FMPRE9 (TI_SYSTEM_REGISTERS + 0x224)
#define TI_FMPRE10 (TI_SYSTEM_REGISTERS + 0x228)
#define TI_FMPRE11 (TI_SYSTEM_REGISTERS + 0x22C)
#define TI_FMPRE12 (TI_SYSTEM_REGISTERS + 0x230)
#define TI_FMPRE13 (TI_SYSTEM_REGISTERS + 0x234)
#define TI_FMPRE14 (TI_SYSTEM_REGISTERS + 0x238)
#define TI_FMPRE15 (TI_SYSTEM_REGISTERS + 0x23C)
#define TI_FMPPE0 (TI_SYSTEM_REGISTERS + 0x134)
#define TI_FMPPE0_2 (TI_SYSTEM_REGISTERS + 0x400)
#define TI_FMPPE1 (TI_SYSTEM_REGISTERS + 0x404)
#define TI_FMPPE2 (TI_SYSTEM_REGISTERS + 0x408)
#define TI_FMPPE3 (TI_SYSTEM_REGISTERS + 0x40C)
#define TI_FMPPE4 (TI_SYSTEM_REGISTERS + 0x410)
#define TI_FMPPE5 (TI_SYSTEM_REGISTERS + 0x414)
#define TI_FMPPE6 (TI_SYSTEM_REGISTERS + 0x418)
#define TI_FMPPE7 (TI_SYSTEM_REGISTERS + 0x41C)
#define TI_FMPPE8 (TI_SYSTEM_REGISTERS + 0x420)
#define TI_FMPPE9 (TI_SYSTEM_REGISTERS + 0x424)
#define TI_FMPPE10 (TI_SYSTEM_REGISTERS + 0x428)
#define TI_FMPPE11 (TI_SYSTEM_REGISTERS + 0x42C)
#define TI_FMPPE12 (TI_SYSTEM_REGISTERS + 0x430)
#define TI_FMPPE13 (TI_SYSTEM_REGISTERS + 0x434)
#define TI_FMPPE14 (TI_SYSTEM_REGISTERS + 0x438)
#define TI_FMPPE15 (TI_SYSTEM_REGISTERS + 0x43C)
#define TI_USER_DBG (TI_SYSTEM_REGISTERS + 0x1D0)
#define TI_BOOTCFG (TI_SYSTEM_REGISTERS + 0x1D0)
#define TI_USER_REG0 (TI_SYSTEM_REGISTERS + 0x1E0)
#define TI_USER_REG1 (TI_SYSTEM_REGISTERS + 0x1E4)
#define TI_USER_REG2 (TI_SYSTEM_REGISTERS + 0x1E8)
#define TI_USER_REG3 (TI_SYSTEM_REGISTERS + 0x1EC)
#define TI_M3_DBG (TI_SYSTEM_REGISTERS + 0x130)
#define MSP432E_PROTECTION_SIZE (4*TI_PROT_REG_SIZE+2*4+6)
#define MSP432E_USER_PROT_SIZE (2*TI_PROT_REG_SIZE+4+5)
#define MSP432E_USER_FPRE_OFFSET 0
#define MSP432E_USER_FPPE_OFFSET TI_PROT_REG_SIZE
#define MSP432E_USER_USER_OFFSET (2*TI_PROT_REG_SIZE)
#define MSP432E_USER_DBG_OFFSET (2*TI_PROT_REG_SIZE + 4)
#define MSP432E_USER_DBG_WE_OFFSET (2*TI_PROT_REG_SIZE + 5)
#define MSP432E_USER_REG_WE_OFFSET (2*TI_PROT_REG_SIZE + 6)
#define MSP432E_FP_WE_OFFSET (2*TI_PROT_REG_SIZE + 7)
#define MSP432E_PROTECT_SOURCE_OFFSET (2*TI_PROT_REG_SIZE + 8)
#define MSP432E_FILE_PROT_OFFSET MSP432E_USER_PROT_SIZE
#define MSP432E_FILE_PROT_SIZE (2*TI_PROT_REG_SIZE+4+1)
#define MSP432E_FILE_FPRE_OFFSET MSP432E_USER_PROT_SIZE
#define MSP432E_FILE_FPPE_OFFSET (MSP432E_USER_PROT_SIZE + TI_PROT_REG_SIZE)
#define MSP432E_FILE_USER_OFFSET (MSP432E_USER_PROT_SIZE + 2*TI_PROT_REG_SIZE)
#define MSP432E_FILE_DBG_OFFSET (MSP432E_USER_PROT_SIZE + 2*TI_PROT_REG_SIZE + 4)
typedef union TI_MSP432E_LOCKING_OPTIONS_t
{
BYTE bytes[4*MSP432E_PROTECTION_SIZE];
struct
{
UINT32 MemoryProt_User_FPRE[TI_PROT_REG_SIZE];
UINT32 MemoryProt_User_FPPE[TI_PROT_REG_SIZE];
UINT32 MemoryProt_User_USER[4];
UINT32 UserDebugData;
UINT32 USER_DBG_WrEn;
UINT32 USER_REG_WrEn;
UINT32 FP_WrEn;
UINT32 Protection_Source;
UINT32 MemoryProt_File_FPRE[TI_PROT_REG_SIZE];
UINT32 MemoryProt_File_FPPE[TI_PROT_REG_SIZE];
UINT32 MemoryProt_File_USER[4];
UINT32 FileDebugData;
}data;
}TI_MSP432E_LOCKING_OPTIONS;
//LONG WINAPI MSPGANG_GetLockingOptions( LONG dest, LONG offset, LONG size, BYTE *data );
//
LONG WINAPI MSPGANG_GetLockingOptions( LONG dest, LONG offset, LONG size, BYTE *data );
// dest definitions
#define MSP432_USER_LOCKING_OPTIONS 1
#define MSP432_FILE_LOCKING_OPTIONS 2
#define MSP432E_USER_LOCKING_OPTIONS 3
#define MSP432E_FILE_LOCKING_OPTIONS 4
//LONG WINAPI MSPGANG_SetLockingOptions( LONG dest, LONG offset, LONG size, BYTE *data );
LONG WINAPI MSPGANG_SetLockingOptions( LONG dest, LONG offset, LONG size, BYTE *data );
// dest definitions
// #define MSP432_USER_LOCKING_OPTIONS 1
// #define MSP432E_USER_LOCKING_OPTIONS 3
//LONG WINAPI MSPGANG_GetLockingOptions( LONG dest, LONG offset, LONG size, BYTE *data );
//
LONG WINAPI MSPGANG_GetCmdListTxt( LONG dest, LONG n, LONG k, void **txt );
// dest definitions
#define MSP432_MB_CMD_TEXT 1
#define MSP432_MB_FIELD_TEXT 2
void WINAPI MSPGANG_Trace( LONG state );
很高兴能帮到您!
In the configuration CFG_BLOWFUSE set enable and MCU will be secured at the end of Autoprogram - via DLL also.
MSPGANG_SetConfig( CFG_BLOWFUSE, 1 );