From 845d5f77d58c6547e28f3fd29ffa830f93e08f26 Mon Sep 17 00:00:00 2001 From: Tomek CEDRO Date: Wed, 2 Nov 2011 03:48:31 +0000 Subject: transport/swd_drv: Fixed critical issue with bitswapping of transmitted data. ACK and DATA packets are always transmitted LSb-First, no matter how ARM draws its fuckin timing diagrams! --- src/transport/swd_libswd_drv_openocd.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/transport/swd_libswd_drv_openocd.c b/src/transport/swd_libswd_drv_openocd.c index acc8830c..49a1f946 100644 --- a/src/transport/swd_libswd_drv_openocd.c +++ b/src/transport/swd_libswd_drv_openocd.c @@ -62,7 +62,7 @@ int swd_drv_mosi_8(swd_ctx_t *swdctx, swd_cmd_t *cmd, char *data, int bits, int static char misodata[8], mosidata[8]; /* Split output data into char array. */ - for (i=0;i<8;i++) mosidata[(nLSBfirst==SWD_DIR_LSBFIRST)?(i):(7-i)]=((1<transfer(NULL, bits, mosidata, misodata, 0); if (res<0) return SWD_ERROR_DRIVER; @@ -91,7 +91,7 @@ int swd_drv_mosi_32(swd_ctx_t *swdctx, swd_cmd_t *cmd, int *data, int bits, int static char misodata[32], mosidata[32]; //UrJTAG drivers shift data LSB-First. - for (i=0;i<32;i++) mosidata[(nLSBfirst==SWD_DIR_LSBFIRST)?(i):(31-i)]=((1<transfer(NULL, bits, mosidata, misodata, 0); if (res<0) return SWD_ERROR_DRIVER; return i; @@ -116,12 +116,11 @@ int swd_drv_miso_8(swd_ctx_t *swdctx, swd_cmd_t *cmd, char *data, int bits, int static signed int res; static char misodata[8], mosidata[8]; - // This function sends and reveice MSb-first. - res=jtag_interface->transfer(NULL, bits, mosidata, misodata, 0); + res=jtag_interface->transfer(NULL, bits, mosidata, misodata, SWD_DIR_LSBFIRST); if (res<0) return SWD_ERROR_DRIVER; /* Now we need to reconstruct the data byte from shifted in LSBfirst byte array. */ *data=0; - for (i=0;itransfer(NULL, bits, mosidata, misodata, 0); + res=jtag_interface->transfer(NULL, bits, mosidata, misodata, SWD_DIR_LSBFIRST); if (res<0) return SWD_ERROR_DRIVER; /* Now we need to reconstruct the data byte from shifted in LSBfirst byte array. */ *data=0; - for (i=0;i