Go to the source code of this file.
Classes | |
struct | swd_cmd_t |
SWD Command Element Structure. More... | |
struct | swd_context_config_t |
Context configuration structure. More... | |
struct | swd_swdp_t |
Most actual Serial Wire Debug Port Registers. More... | |
struct | swd_ahbap_t |
Most actual Advanced High Bandwidth Access Peripherial Bus Reisters. More... | |
struct | swd_driver_t |
Interface Driver structure. More... | |
struct | swd_ctx_t |
SWD Context Structure definition. More... | |
Defines | |
#define | SWD_REQUEST_START_BITNUM 7 |
SWD Packets Bit Fields and Values. | |
#define | SWD_REQUEST_APnDP_BITNUM 6 |
Access Port (high) or Debug Port (low) access. | |
#define | SWD_REQUEST_RnW_BITNUM 5 |
Read (high) or Write (low) access. | |
#define | SWD_REQUEST_ADDR_BITNUM 4 |
LSB of the address field in request header. | |
#define | SWD_REQUEST_A2_BITNUM 4 |
Target Register Address bit 2. | |
#define | SWD_REQUEST_A3_BITNUM 3 |
Target Register Address bit 3. | |
#define | SWD_REQUEST_PARITY_BITNUM 2 |
Odd Parity calculated from APnDP, RnW, A[2:3]. | |
#define | SWD_REQUEST_STOP_BITNUM 1 |
Packet Stop bit, always 0. | |
#define | SWD_REQUEST_PARK_BITNUM 0 |
Park wire and switch between receive/transmit. | |
#define | SWD_REQUEST_START_VAL 1 |
Start Bit Value is always 1. | |
#define | SWD_REQUEST_STOP_VAL 0 |
Stop Bit Value is always 0. | |
#define | SWD_REQUEST_PARK_VAL 1 |
Park bus and put outputs into Hi-Z state. | |
#define | SWD_REQUEST_BITLEN 8 |
Number of bits in request packet header. | |
#define | SWD_ADDR_MINVAL 0 |
Address field minimal value. | |
#define | SWD_ADDR_MAXVAL 3 |
Address field maximal value. | |
#define | SWD_ACK_BITLEN 3 |
Number of bits in Acknowledge packet. | |
#define | SWD_ACK_OK_VAL 4 |
OK code value. | |
#define | SWD_ACK_WAIT_VAL 2 |
WAIT code value. | |
#define | SWD_ACK_FAULT_VAL 1 |
FAULT code value. | |
#define | SWD_DP_ADDR_IDCODE 0 |
IDCODE register address (RO). | |
#define | SWD_DP_ADDR_ABORT 0 |
ABORT register address (WO). | |
#define | SWD_DP_ADDR_CTRLSTAT 1 |
CTRLSTAT register address (R/W, CTRLSEL=b0). | |
#define | SWD_DP_ADDR_WCR 1 |
WCR register address (R/W, CTRLSEL=b1). | |
#define | SWD_DP_ADDR_RESEND 2 |
RESEND register address (RO). | |
#define | SWD_DP_ADDR_SELECT 2 |
SELECT register address (WO). | |
#define | SWD_DP_ADDR_RDBUF 3 |
RDBUF register address (RO). | |
#define | SWD_ABORT_BITNUM_DAPABORT 0 |
SW-DP ABORT Register map. | |
#define | SWD_ABORT_BITNUM_DSTKCMPCLR 1 |
DSTKCMPCLR bit number. | |
#define | SWD_ABORT_BITNUM_DSTKERRCLR 2 |
DSTKERRCLR bit number. | |
#define | SWD_ABORT_BITNUM_DWDERRCLR 3 |
DWDERRCLR bit number. | |
#define | SWD_ABORT_BITNUM_DORUNERRCLR 4 |
DORUNERRCLR bit number. | |
#define | SWD_CTRLSTAT_BITNUM_ORUNDETECT 0 |
SW-DP CTRL/STAT Register map. | |
#define | SWD_CTRLSTAT_BITNUM_OSTICKYORUN 1 |
OSTICKYORUN bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OTRNMODE 2 |
OTRNMODE bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OSTICKYCMP 4 |
OSTICKYCMP bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OSTICKYERR 5 |
OSTICKYERR bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OREADOK 6 |
OREADOK bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OWDATAERR 7 |
OWDATAERR bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OMASKLANE 8 |
OMASKLANE bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OTRNCNT 12 |
OTRNCNT bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OCDBGRSTREQ 26 |
OCDBGRSTREQ bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OCDBGRSTACK 27 |
OCDBGRSTACK bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OCDBGPWRUPREQ 28 |
OCDBGPWRUPREQ bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OCDBGPWRUPACK 29 |
OCDBGPWRUPACK bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OCSYSPWRUPREQ 30 |
OCSYSPWRUPREQ bit number. | |
#define | SWD_CTRLSTAT_BITNUM_OCSYSPWRUPACK 31 |
OCSYSPWRUPACK bit number. | |
#define | SWD_MASKLANE_0 0b0001 |
SW-DP CTRLSTAT MASKLANE available values. | |
#define | SWD_MASKLANE_1 0b0010 |
Compare byte lane 1 (0x----FF--). | |
#define | SWD_MASKLANE_2 0b0100 |
Compare byte lane 2 (0x--FF----). | |
#define | SWD_MASKLANE_3 0b1000 |
Compare byte lane 3 (0xFF------). | |
#define | SWD_SELECT_BITNUM_CTRLSEL 0 |
SW-DP SELECT Register map. | |
#define | SWD_SELECT_BITNUM_APBANKSEL 4 |
APBANKSEL bit number. | |
#define | SWD_SELECT_BITNUM_APSEL 24 |
APSEL bit number. | |
#define | SWD_WCR_BITNUM_PRESCALER 0 |
SW-DP WCR Register map. | |
#define | SWD_WCR_BITNUM_WIREMODE 6 |
#define | SWD_WCR_BITNUM_TURNROUND 8 |
#define | SWD_TURNROUND_1 0 |
SW-DP WCR TURNROUND available values. | |
#define | SWD_TURNROUND_2 1 |
#define | SWD_TURNROUND_3 2 |
#define | SWD_TURNROUND_4 3 |
#define | SWD_TURNROUND_MIN SWD_TURNROUND_1 |
#define | SWD_TURNROUND_MAX SWD_TURNROUND_4 |
#define | SWD_TURNROUND_DEFAULT SWD_TURNROUND_1 |
#define | AHB_AP_CONTROLSTATUS 0x00 |
AHB-AP Registers Map. | |
#define | AHB_AP_TAR 0x04 |
R/W, 32bit, reset value: 0x00000000. | |
#define | AHB_AP_DRW 0x0C |
R/W, 32bit. | |
#define | AHB_AP_BD0 0x10 |
R/W, 32bit. | |
#define | AHB_AP_BD1 0x14 |
R/W, 32bit. | |
#define | AHB_AP_BD2 0x18 |
R/W, 32bit. | |
#define | AHB_AP_BD3 0x1C |
R/W, 32bit. | |
#define | AHB_AP_DROMT 0xF8 |
RO, 32bit, reset value: 0xE00FF000. | |
#define | AHB_AP_IDR 0xFC |
RO, 32bit, reset value: 0x24770001. | |
#define | SWD_DATA_MAXBITCOUNT 32 |
SWD queue and payload data definitions. | |
#define | SWD_DATA_BYTESIZE 8 |
How many bits are there in a byte. | |
#define | SWD_DATA_BITLEN 32 |
How many bits are there in data payload. | |
#define | SWD_CMDQLEN_DEFAULT 1024; |
How long is the command queue by default. | |
Typedefs | |
typedef enum SWD_ERROR_CODE | swd_error_code_t |
Status and Error Codes definitions. | |
typedef enum SWD_LOGLEVEL | swd_loglevel_t |
Logging Level Codes definition. | |
typedef enum SWD_CMDTYPE | swd_cmdtype_t |
SWD Command Codes definitions. | |
typedef enum SWD_SHIFTDIR | swd_shiftdir_t |
What is the shift direction LSB-first or MSB-first. | |
typedef enum SWD_OPERATION | swd_operation_t |
Command Queue operations codes. | |
typedef struct swd_cmd_t | swd_cmd_t |
SWD Command Element Structure. | |
Enumerations | |
enum | SWD_ERROR_CODE { SWD_OK = 0, SWD_ERROR_GENERAL = -1, SWD_ERROR_NULLPOINTER = -2, SWD_ERROR_NULLQUEUE = -3, SWD_ERROR_NULLTRN = -4, SWD_ERROR_PARAM = -5, SWD_ERROR_OUTOFMEM = -6, SWD_ERROR_RESULT = -7, SWD_ERROR_RANGE = -8, SWD_ERROR_DEFINITION = -9, SWD_ERROR_NULLCONTEXT = -10, SWD_ERROR_QUEUE = -11, SWD_ERROR_ADDR = -12, SWD_ERROR_APnDP = -13, SWD_ERROR_RnW = -14, SWD_ERROR_PARITY = -15, SWD_ERROR_ACK = -16, SWD_ERROR_ACKUNKNOWN = -19, SWD_ERROR_ACKNOTDONE = -20, SWD_ERROR_ACKMISSING = -21, SWD_ERROR_ACKMISMATCH = -22, SWD_ERROR_ACKORDER = -23, SWD_ERROR_BADOPCODE = -24, SWD_ERROR_NODATACMD = -25, SWD_ERROR_DATAADDR = -26, SWD_ERROR_NOPARITYCMD = -27, SWD_ERROR_PARITYADDR = -28, SWD_ERROR_NOTDONE = -29, SWD_ERROR_QUEUEROOT = -30, SWD_ERROR_BADCMDTYPE = -31, SWD_ERROR_BADCMDDATA = -32, SWD_ERROR_TURNAROUND = -33, SWD_ERROR_DRIVER = -34, SWD_ERROR_ACK_WAIT = -35, SWD_ERROR_ACK_FAULT = -36, SWD_ERROR_QUEUENOTFREE = -37, SWD_ERROR_TRANSPORT = -38 } |
Status and Error Codes definitions. More... | |
enum | SWD_LOGLEVEL { SWD_LOGLEVEL_SILENT = 0, SWD_LOGLEVEL_INFO = 1, SWD_LOGLEVEL_WARNING = 2, SWD_LOGLEVEL_ERROR = 3, SWD_LOGLEVEL_DEBUG = 4 } |
Logging Level Codes definition. More... | |
enum | SWD_CMDTYPE { SWD_CMDTYPE_MOSI_DATA = -7, SWD_CMDTYPE_MOSI_REQUEST = -6, SWD_CMDTYPE_MOSI_TRN = -5, SWD_CMDTYPE_MOSI_PARITY = -4, SWD_CMDTYPE_MOSI_BITBANG = -3, SWD_CMDTYPE_MOSI_CONTROL = -2, SWD_CMDTYPE_MOSI = -1, SWD_CMDTYPE_UNDEFINED = 0, SWD_CMDTYPE_MISO = 1, SWD_CMDTYPE_MISO_ACK = 2, SWD_CMDTYPE_MISO_BITBANG = 3, SWD_CMDTYPE_MISO_PARITY = 4, SWD_CMDTYPE_MISO_TRN = 5, SWD_CMDTYPE_MISO_DATA = 6 } |
SWD Command Codes definitions. More... | |
enum | SWD_SHIFTDIR { SWD_DIR_LSBFIRST = 0, SWD_DIR_MSBFIRST = 1 } |
What is the shift direction LSB-first or MSB-first. More... | |
enum | SWD_OPERATION { SWD_OPERATION_FIRST = 1, SWD_OPERATION_QUEUE_APPEND = 1, SWD_OPERATION_TRANSMIT_HEAD = 2, SWD_OPERATION_TRANSMIT_TAIL = 3, SWD_OPERATION_TRANSMIT_ALL = 4, SWD_OPERATION_TRANSMIT_ONE = 5, SWD_OPERATION_TRANSMIT_LAST = 6, SWD_OPERATION_QUEUE = 7, SWD_OPERATION_EXECUTE = 8, SWD_OPERATION_LAST = 8 } |
Command Queue operations codes. More... | |
enum | swd_bool_t { SWD_FALSE = 0, SWD_TRUE = 1 } |
Boolean values definition. More... | |
Functions | |
int | swd_bin8_parity_even (char *data, char *parity) |
Data parity calculator, calculates even parity on char type. | |
int | swd_bin32_parity_even (int *data, char *parity) |
Data parity calculator, calculates even parity on integer type. | |
int | swd_bin8_print (char *data) |
Prints binary data of a char value on the screen. | |
int | swd_bin32_print (int *data) |
Prints binary data of an integer value on the screen. | |
char * | swd_bin8_string (char *data) |
Generates string containing binary data of a char value. | |
char * | swd_bin32_string (int *data) |
Generates string containing binary data of an integer value. | |
int | swd_bin8_bitswap (unsigned char *buffer, int bitcount) |
Bit swap helper function that reverse bit order in char *buffer. | |
int | swd_bin32_bitswap (unsigned int *buffer, int bitcount) |
Bit swap helper function that reverse bit order in int *buffer. | |
int | swd_cmd_queue_init (swd_cmd_t *cmdq) |
Initialize new queue element in memory that becomes a queue root. | |
swd_cmd_t * | swd_cmd_queue_find_root (swd_cmd_t *cmdq) |
Find queue root (first element). | |
swd_cmd_t * | swd_cmd_queue_find_tail (swd_cmd_t *cmdq) |
Find queue tail (last element). | |
int | swd_cmd_queue_append (swd_cmd_t *cmdq, swd_cmd_t *cmd) |
Append element pointed by *cmd at the end of the quque pointed by *cmdq. | |
int | swd_cmd_queue_free (swd_cmd_t *cmdq) |
Free queue pointed by *cmdq element. | |
int | swd_cmd_queue_free_head (swd_cmd_t *cmdq) |
Free queue head up to *cmdq element. | |
int | swd_cmd_queue_free_tail (swd_cmd_t *cmdq) |
Free queue tail starting after *cmdq element. | |
int | swd_cmd_queue_append_mosi_request (swd_ctx_t *swdctx, char *request) |
Appends command queue with SWD Request packet header. | |
int | swd_cmd_queue_append_mosi_trn (swd_ctx_t *swdctx) |
Append command queue with Turnaround activating MOSI mode. | |
int | swd_cmd_queue_append_miso_trn (swd_ctx_t *swdctx) |
Append command queue with Turnaround activating MISO mode. | |
int | swd_cmd_queue_append_miso_nbit (swd_ctx_t *swdctx, char **data, int count) |
Append command queue with bus binary read bit-by-bit operation. | |
int | swd_cmd_queue_append_mosi_nbit (swd_ctx_t *swdctx, char *data, int count) |
Append command queue with bus binary write bit-by-bit operation. | |
int | swd_cmd_queue_append_mosi_parity (swd_ctx_t *swdctx, char *parity) |
Append command queue with parity bit write. | |
int | swd_cmd_queue_append_miso_parity (swd_ctx_t *swdctx, char *parity) |
Append command queue with parity bit read. | |
int | swd_cmd_queue_append_miso_data (swd_ctx_t *swdctx, int *data) |
Append command queue with data read. | |
int | swd_cmd_queue_append_miso_data_p (swd_ctx_t *swdctx, int *data, char *parity) |
Append command queue with data and parity read. | |
int | swd_cmd_queue_append_miso_n_data_p (swd_ctx_t *swdctx, int **data, char **parity, int count) |
Append command queue with series of data and parity read. | |
int | swd_cmd_queue_append_mosi_data (swd_ctx_t *swdctx, int *data) |
Append command queue with data and parity write. | |
int | swd_cmd_queue_append_mosi_data_ap (swd_ctx_t *swdctx, int *data) |
Append command queue with data and automatic parity write. | |
int | swd_cmd_queue_append_mosi_data_p (swd_ctx_t *swdctx, int *data, char *parity) |
Append command queue with data and provided parity write. | |
int | swd_cmd_append_mosi_n_data_ap (swd_ctx_t *swdctx, int **data, int count) |
Append command queue with series of data and automatic parity writes. | |
int | swd_cmd_append_mosi_n_data_p (swd_ctx_t *swdctx, int **data, char **parity, int count) |
Append command queue with series of data and provided parity writes. | |
int | swd_cmd_queue_append_miso_ack (swd_ctx_t *swdctx, char *ack) |
Append queue with ACK read. | |
int | swd_cmd_queue_append_mosi_control (swd_ctx_t *swdctx, char *ctlmsg, int len) |
Append command queue with len-octet size control seruence. | |
int | swd_cmd_queue_append_swdpreset (swd_ctx_t *swdctx) |
Append command queue with SW-DP-RESET sequence. | |
int | swd_cmd_queue_append_jtag2swd (swd_ctx_t *swdctx) |
Append command queue with JTAG-TO-SWD DAP-switch sequence. | |
int | swd_cmd_queue_append_swd2jtag (swd_ctx_t *swdctx) |
Append command queue with SWD-TO-JTAG DAP-switch sequence. | |
int | swd_bus_setdir_mosi (swd_ctx_t *swdctx) |
Append command queue with TRN WRITE/MOSI. | |
int | swd_bus_setdir_miso (swd_ctx_t *swdctx) |
Append command queue with TRN READ/MISO. | |
int | swd_bit8_gen_request (swd_ctx_t *swdctx, char *APnDP, char *RnW, char *addr, char *request) |
int | swd_transmit (swd_ctx_t *swdctx, swd_cmd_t *cmd) |
int | swd_cmd_queue_flush (swd_ctx_t *swdctx, swd_operation_t operation) |
Flush command queue contents into interface driver. | |
int | swd_mosi_request (swd_ctx_t *swdctx, swd_operation_t operation, char *APnDP, char *RnW, char *addr) |
Perform Request. | |
int | swd_miso_ack (swd_ctx_t *swdctx, swd_operation_t operation, char *ack) |
Perform ACK read into *ack and verify received data. | |
int | swd_mosi_data_p (swd_ctx_t *swdctx, swd_operation_t operation, int *data, char *parity) |
Perform (MOSI) data write with provided parity value. | |
int | swd_mosi_data_ap (swd_ctx_t *swdctx, swd_operation_t operation, int *data) |
Perform (MOSI) data write with automatic parity calculation. | |
int | swd_miso_data_p (swd_ctx_t *swdctx, swd_operation_t operation, int *data, char *parity) |
Perform (MISO) data read. | |
int | swd_idcode (swd_ctx_t *swdctx, swd_operation_t operation, int *idcode, char *ack, char *parity) |
Read target's IDCODE register value. | |
int | swd_log (swd_loglevel_t loglevel, char *msg) |
char * | swd_error_string (swd_error_code_t error) |
swd_ctx_t * | swd_init (void) |
LibSWD initialization routine. | |
int | swd_deinit_ctx (swd_ctx_t *swdctx) |
De-initialize selected swd context and free its memory. | |
int | swd_deinit_cmdq (swd_ctx_t *swdctx) |
De-initialize command queue and free its memory on selected swd context. | |
int | swd_deinit (swd_ctx_t *swdctx) |
De-initialize selected swd context and its command queue. | |
int | swd_drv_mosi_8 (swd_ctx_t *swdctx, char *data, int bits, int direction) |
int | swd_drv_mosi_32 (swd_ctx_t *swdctx, int *data, int bits, int direction) |
int | swd_drv_miso_8 (swd_ctx_t *swdctx, char *data, int bits, int direction) |
int | swd_drv_miso_32 (swd_ctx_t *swdctx, int *data, int bits, int direction) |
int | swd_drv_mosi_trn (swd_ctx_t *swdctx, int clks) |
int | swd_drv_miso_trn (swd_ctx_t *swdctx, int clks) |
#define AHB_AP_BD0 0x10 |
R/W, 32bit.
R/W, 32bit
#define AHB_AP_BD1 0x14 |
R/W, 32bit.
R/W, 32bit
#define AHB_AP_BD2 0x18 |
R/W, 32bit.
R/W, 32bit
#define AHB_AP_BD3 0x1C |
R/W, 32bit.
R/W, 32bit
#define AHB_AP_CONTROLSTATUS 0x00 |
AHB-AP Registers Map.
TODO!!!! R/W, 32bit, reset value: 0x43800042 R/W, 32bit, reset value: 0x43800042
#define AHB_AP_DROMT 0xF8 |
RO, 32bit, reset value: 0xE00FF000.
RO, 32bit, reset value: 0xE00FF000
#define AHB_AP_DRW 0x0C |
R/W, 32bit.
R/W, 32bit
#define AHB_AP_IDR 0xFC |
RO, 32bit, reset value: 0x24770001.
RO, 32bit, reset value: 0x24770001
#define AHB_AP_TAR 0x04 |
R/W, 32bit, reset value: 0x00000000.
R/W, 32bit, reset value: 0x00000000
#define SWD_ABORT_BITNUM_DAPABORT 0 |
SW-DP ABORT Register map.
DAPABORT bit number.
#define SWD_CTRLSTAT_BITNUM_ORUNDETECT 0 |
SW-DP CTRL/STAT Register map.
ORUNDETECT bit number.
#define SWD_DATA_MAXBITCOUNT 32 |
SWD queue and payload data definitions.
What is the maximal bit length of the data.
#define SWD_MASKLANE_0 0b0001 |
SW-DP CTRLSTAT MASKLANE available values.
Compare byte lane 0 (0x------FF)
#define SWD_REQUEST_START_BITNUM 7 |
SWD Packets Bit Fields and Values.
Packet Start bit, always set to 1.
#define SWD_SELECT_BITNUM_CTRLSEL 0 |
SW-DP SELECT Register map.
CTRLSEL bit number.
#define SWD_TURNROUND_1 0 |
SW-DP WCR TURNROUND available values.
TRN takes one CLK cycle. TRN takes one CLK cycle.
#define SWD_TURNROUND_2 1 |
TRN takes two CLK cycles.
#define SWD_TURNROUND_3 2 |
TRN takes three CLK cycles.
#define SWD_TURNROUND_4 3 |
TRN takes four CLK cycles. ????
#define SWD_TURNROUND_DEFAULT SWD_TURNROUND_1 |
Default TRN length is one CLK.
#define SWD_TURNROUND_MAX SWD_TURNROUND_4 |
longest TRN time.
#define SWD_TURNROUND_MIN SWD_TURNROUND_1 |
shortest TRN time.
#define SWD_WCR_BITNUM_PRESCALER 0 |
SW-DP WCR Register map.
PRESCALER bit number. PRESCALER bit number.
#define SWD_WCR_BITNUM_TURNROUND 8 |
TURNROUND bit number.
#define SWD_WCR_BITNUM_WIREMODE 6 |
WIREMODE bit number.
SWD Command Element Structure.
In libswd each operation is split into separate commands (request, trn, ack, data, parity) that can be appended to the command queue and later executed. This organization allows better granularity for tracing bugs and makes possible to compose complete bus/target operations made of simple commands.
typedef enum SWD_CMDTYPE swd_cmdtype_t |
SWD Command Codes definitions.
Available values: MISO>0, MOSI<0, undefined=0. To check command direction (read/write) multiply tested value with one of the MOSI or MISO commands
typedef enum SWD_ERROR_CODE swd_error_code_t |
Status and Error Codes definitions.
Error Codes definition, use this to have its name on debugger.
typedef enum SWD_LOGLEVEL swd_loglevel_t |
Logging Level Codes definition.
Logging Level codes definition, use this to have its name on debugger.
typedef enum SWD_OPERATION swd_operation_t |
Command Queue operations codes.
typedef enum SWD_SHIFTDIR swd_shiftdir_t |
What is the shift direction LSB-first or MSB-first.
enum swd_bool_t |
enum SWD_CMDTYPE |
SWD Command Codes definitions.
Available values: MISO>0, MOSI<0, undefined=0. To check command direction (read/write) multiply tested value with one of the MOSI or MISO commands
enum SWD_ERROR_CODE |
Status and Error Codes definitions.
Error Codes definition, use this to have its name on debugger.
enum SWD_LOGLEVEL |
Logging Level Codes definition.
Logging Level codes definition, use this to have its name on debugger.
enum SWD_OPERATION |
Command Queue operations codes.
enum SWD_SHIFTDIR |
int swd_bin32_bitswap | ( | unsigned int * | buffer, | |
int | bitcount | |||
) |
Bit swap helper function that reverse bit order in int *buffer.
Most Significant Bit becomes Least Significant Bit. It is possible to swap only n-bits from int (32-bit) *buffer.
*buffer | unsigned char (32-bit) data pointer. | |
bitcount | how many bits to swap. |
int swd_bin32_parity_even | ( | int * | data, | |
char * | parity | |||
) |
Data parity calculator, calculates even parity on integer type.
*data | source data pointer. | |
*parity | resulting data pointer. |
int swd_bin32_print | ( | int * | data | ) |
Prints binary data of an integer value on the screen.
*data | source data pointer. |
char* swd_bin32_string | ( | int * | data | ) |
Generates string containing binary data of an integer value.
*data | source data pointer. |
int swd_bin8_bitswap | ( | unsigned char * | buffer, | |
int | bitcount | |||
) |
Bit swap helper function that reverse bit order in char *buffer.
Most Significant Bit becomes Least Significant Bit. It is possible to swap only n-bits from char (8-bit) *buffer.
*buffer | unsigned char (8-bit) data pointer. | |
bitcount | how many bits to swap. |
int swd_bin8_parity_even | ( | char * | data, | |
char * | parity | |||
) |
Data parity calculator, calculates even parity on char type.
*data | source data pointer. | |
*parity | resulting data pointer. |
int swd_bin8_print | ( | char * | data | ) |
Prints binary data of a char value on the screen.
*data | source data pointer. |
char* swd_bin8_string | ( | char * | data | ) |
Generates string containing binary data of a char value.
*data | source data pointer. |
int swd_bus_setdir_miso | ( | swd_ctx_t * | swdctx | ) |
Append command queue with TRN READ/MISO.
*swdctx | swd context pointer. |
int swd_bus_setdir_mosi | ( | swd_ctx_t * | swdctx | ) |
Append command queue with TRN WRITE/MOSI.
*swdctx | swd context pointer. |
int swd_cmd_append_mosi_n_data_ap | ( | swd_ctx_t * | swdctx, | |
int ** | data, | |||
int | count | |||
) |
Append command queue with series of data and automatic parity writes.
*swdctx | swd context pointer. | |
**data | data value array pointer. | |
count | number of (data+parity) elements to read. |
int swd_cmd_append_mosi_n_data_p | ( | swd_ctx_t * | swdctx, | |
int ** | data, | |||
char ** | parity, | |||
int | count | |||
) |
Append command queue with series of data and provided parity writes.
*swdctx | swd context pointer. | |
**data | data value array pointer. | |
**parity | parity value array pointer. | |
count | number of (data+parity) elements to read. |
Append element pointed by *cmd at the end of the quque pointed by *cmdq.
*cmdq | pointer to any element on command queue | |
*cmd | pointer to the command to be appended |
int swd_cmd_queue_append_jtag2swd | ( | swd_ctx_t * | swdctx | ) |
Append command queue with JTAG-TO-SWD DAP-switch sequence.
*swdctx | swd context pointer. |
int swd_cmd_queue_append_miso_ack | ( | swd_ctx_t * | swdctx, | |
char * | ack | |||
) |
Append queue with ACK read.
*swdctx | swd context pointer. | |
*ack | packet value pointer. |
int swd_cmd_queue_append_miso_data | ( | swd_ctx_t * | swdctx, | |
int * | data | |||
) |
Append command queue with data read.
*swdctx | swd context pointer. | |
*data | data pointer. |
int swd_cmd_queue_append_miso_data_p | ( | swd_ctx_t * | swdctx, | |
int * | data, | |||
char * | parity | |||
) |
Append command queue with data and parity read.
*swdctx | swd context pointer. | |
*data | data value pointer. | |
*parity | parity value pointer. |
int swd_cmd_queue_append_miso_n_data_p | ( | swd_ctx_t * | swdctx, | |
int ** | data, | |||
char ** | parity, | |||
int | count | |||
) |
Append command queue with series of data and parity read.
*swdctx | swd context pointer. | |
**data | data value array pointer. | |
**parity | parity value array pointer. | |
count | number of (data+parity) elements to read. |
int swd_cmd_queue_append_miso_nbit | ( | swd_ctx_t * | swdctx, | |
char ** | data, | |||
int | count | |||
) |
Append command queue with bus binary read bit-by-bit operation.
This function will append command to the queue for each bit, and store one bit into single char array element, so read is not constrained to 8 bits. On error memory is released and apropriate error code is returned. Important: Memory pointed by *data must be allocated prior call!
*swdctx | swd context pointer. | |
**data | allocated data array to write result into. | |
count | number of bits to read (also the **data size). |
int swd_cmd_queue_append_miso_parity | ( | swd_ctx_t * | swdctx, | |
char * | parity | |||
) |
Append command queue with parity bit read.
*swdctx | swd context pointer. | |
*parity | parity value pointer. |
int swd_cmd_queue_append_miso_trn | ( | swd_ctx_t * | swdctx | ) |
Append command queue with Turnaround activating MISO mode.
*swdctx | swd context pointer. |
int swd_cmd_queue_append_mosi_control | ( | swd_ctx_t * | swdctx, | |
char * | ctlmsg, | |||
int | len | |||
) |
Append command queue with len-octet size control seruence.
This control sequence can be used for instance to send payload of packets switching DAP between JTAG and SWD mode.
*swdctx | swd context pointer. | |
*ctlmsg | control message array pointer. | |
len | number of elements to send from *ctlmsg. |
int swd_cmd_queue_append_mosi_data | ( | swd_ctx_t * | swdctx, | |
int * | data | |||
) |
Append command queue with data and parity write.
*swdctx | swd context pointer. | |
*data | data value pointer. |
int swd_cmd_queue_append_mosi_data_ap | ( | swd_ctx_t * | swdctx, | |
int * | data | |||
) |
Append command queue with data and automatic parity write.
*swdctx | swd context pointer. | |
*data | data value pointer. |
int swd_cmd_queue_append_mosi_data_p | ( | swd_ctx_t * | swdctx, | |
int * | data, | |||
char * | parity | |||
) |
Append command queue with data and provided parity write.
*swdctx | swd context pointer. | |
*data | data value pointer. | |
*parity | parity value pointer. |
int swd_cmd_queue_append_mosi_nbit | ( | swd_ctx_t * | swdctx, | |
char * | data, | |||
int | count | |||
) |
Append command queue with bus binary write bit-by-bit operation.
This function will append command to the queue for each bit and store one bit into single char array element, so read is not constrained to 8 bits. On error memory is released and apropriate error code is returned. Important: Memory pointed by *data must be allocated prior call!
*swdctx | swd context pointer. | |
**data | allocated data array to write result into. | |
count | number of bits to read (also the **data size). |
int swd_cmd_queue_append_mosi_parity | ( | swd_ctx_t * | swdctx, | |
char * | parity | |||
) |
Append command queue with parity bit write.
*swdctx | swd context pointer. | |
*parity | parity value pointer. |
int swd_cmd_queue_append_mosi_request | ( | swd_ctx_t * | swdctx, | |
char * | request | |||
) |
Appends command queue with SWD Request packet header.
Note that contents is not validated, so bad request can be sent as well.
*swdctx | swd context pointer. | |
*request | pointer to the 8-bit request payload. |
int swd_cmd_queue_append_mosi_trn | ( | swd_ctx_t * | swdctx | ) |
Append command queue with Turnaround activating MOSI mode.
*swdctx | swd context pointer. |
int swd_cmd_queue_append_swd2jtag | ( | swd_ctx_t * | swdctx | ) |
Append command queue with SWD-TO-JTAG DAP-switch sequence.
*swdctx | swd context pointer. |
int swd_cmd_queue_append_swdpreset | ( | swd_ctx_t * | swdctx | ) |
Append command queue with SW-DP-RESET sequence.
*swdctx | swd context pointer. |
Find queue root (first element).
*cmdq | pointer to any queue element |
Find queue tail (last element).
*cmdq | pointer to any queue element |
int swd_cmd_queue_flush | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation | |||
) |
Flush command queue contents into interface driver.
Operation is specified by SWD_OPERATION and can be used to select how to flush the queue, ie. head-only, tail-only, one, all, etc.
*swdctx | swd context pointer. | |
operation | tells how to flush the queue. |
int swd_cmd_queue_free | ( | swd_cmd_t * | cmdq | ) |
Free queue pointed by *cmdq element.
*cmdq | pointer to any element on command queue |
int swd_cmd_queue_free_head | ( | swd_cmd_t * | cmdq | ) |
Free queue head up to *cmdq element.
*cmdq | pointer to the element that becomes new queue root. |
int swd_cmd_queue_free_tail | ( | swd_cmd_t * | cmdq | ) |
Free queue tail starting after *cmdq element.
*cmdq | pointer to the last element on the new queue. |
int swd_cmd_queue_init | ( | swd_cmd_t * | cmdq | ) |
Initialize new queue element in memory that becomes a queue root.
*cmdq | pointer to the command queue element of type swd_cmd_t |
int swd_deinit | ( | swd_ctx_t * | swdctx | ) |
De-initialize selected swd context and its command queue.
*swdctx | swd context pointer. |
int swd_deinit_cmdq | ( | swd_ctx_t * | swdctx | ) |
De-initialize command queue and free its memory on selected swd context.
*swdctx | swd context pointer. |
int swd_deinit_ctx | ( | swd_ctx_t * | swdctx | ) |
De-initialize selected swd context and free its memory.
Note: This function will not free command queue for selected context!
*swdctx | swd context pointer. |
int swd_idcode | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation, | |||
int * | idcode, | |||
char * | ack, | |||
char * | parity | |||
) |
Read target's IDCODE register value.
*swdctx | swd context pointer. | |
operation | type of action to perform (queue or execute). | |
*idcode | resulting register value pointer. | |
*ack | resulting acknowledge response value pointer. | |
*parity | resulting data parity value pointer. |
swd_ctx_t* swd_init | ( | void | ) |
LibSWD initialization routine.
It should be called prior any operation made with libswd. It initializes command queue and basic parameters for context that is returned as pointer.
int swd_miso_ack | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation, | |||
char * | ack | |||
) |
Perform ACK read into *ack and verify received data.
*swdctx | swd context pointer. | |
operation | type of action to perform with generated request. | |
*ack | pointer to the result location. |
int swd_miso_data_p | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation, | |||
int * | data, | |||
char * | parity | |||
) |
Perform (MISO) data read.
*swdctx | swd context pointer. | |
operation | type of action to perform on generated command. | |
*data | payload value pointer. | |
*parity | payload parity value pointer. |
int swd_mosi_data_ap | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation, | |||
int * | data | |||
) |
Perform (MOSI) data write with automatic parity calculation.
*swdctx | swd context pointer. | |
operation | type of action to perform on generated command. | |
*data | payload value pointer. |
int swd_mosi_data_p | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation, | |||
int * | data, | |||
char * | parity | |||
) |
Perform (MOSI) data write with provided parity value.
*swdctx | swd context pointer. | |
operation | type of action to perform on generated command. | |
*data | payload value pointer. | |
*parity | payload parity value pointer. |
int swd_mosi_request | ( | swd_ctx_t * | swdctx, | |
swd_operation_t | operation, | |||
char * | APnDP, | |||
char * | RnW, | |||
char * | addr | |||
) |
Perform Request.
*swdctx | swd context pointer. | |
operation | type of action to perform with generated request. | |
*APnDP | AccessPort (high) or DebugPort (low) access value pointer. | |
*RnW | Read (high) or Write (low) access value pointer. | |
*addr | target register address value pointer. |